手摸手2-springboot编写基础的增删改查

news2025/1/16 18:51:40

目录

    • 手摸手2-springboot编写基础的增删改查
      • 创建controller层
      • 添加service层接口
      • service层实现
      • 添加mapper层
      • mapper层对应的sql
      • 添加扫描注解,对应sql文件的目录

手摸手2-springboot编写基础的增删改查

创建controller层

实现 test 表中的添加、修改、删除及列表查询接口(未分页)

package com.onejson.ojmall.controller;

import com.onejson.ojmall.entity.TestEntity;
import com.onejson.ojmall.entity.dto.TestDTO;
import com.onejson.ojmall.entity.vo.TestVO;
import com.onejson.ojmall.service.ITestService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * 测试表
 *
 * @author 微信公众号 onejson
 * @date 2023-08-11
 */
@RestController
@RequestMapping(path = "/test", produces = "application/json;charset=UTF-8")
@Api(value = "/test", tags = "测试表", produces = "application/json;charset=UTF-8")
public class TestController{

    @Resource
    private ITestService testService;

    /**
     * 查询列表
     */
    @ApiOperation(value = "条件查询列表分页", notes = "条件查询列表分页")
    @GetMapping("/list")
    public List<TestEntity> list(TestEntity sysTest) {
        return testService.selectTestList(sysTest);
    }

    /**
     * 新增
     */
    @ApiOperation(value = "新增")
    @PostMapping
    public boolean add(@Validated @RequestBody TestDTO testDTO) {
        return testService.insertTest(testDTO);
    }

    /**
     * 修改
     */
    @ApiOperation(value = "更新")
    @PutMapping
    public boolean edit(@RequestBody TestDTO testDTO) {
        return testService.updateTest(testDTO);
    }

    /**
     * 详情
     */
    @ApiOperation(value = "详情")
    @GetMapping(value = "/{id}")
    public TestVO getInfo(@PathVariable("id") Integer id) {

        return testService.getTestById(id);
    }

    /**
     * 删除
     */
    @ApiOperation(value = "删除")
    @DeleteMapping("/{ids}")
    public boolean remove(@PathVariable Integer[] ids) {
        return testService.removeTestByIds(ids);
    }


}

添加service层接口

package com.onejson.ojmall.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.onejson.ojmall.entity.TestEntity;
import com.onejson.ojmall.entity.dto.TestDTO;
import com.onejson.ojmall.entity.vo.TestVO;

import java.util.List;


/**
 * 测试表
 *
 * @author 微信公众号 onejson
 * @date 2023-08-11 11:24:47
 */
public interface ITestService extends IService<TestEntity> {


    /**
     * 查询测试表列表
     *
     * @param testEntity 测试表Entity类
     * @return list列表
     */
    List<TestEntity> selectTestList(TestEntity testEntity);


    /**
     * 新增测试表
     *
     * @param testDTO 测试表DTO类
     * @return 结果
     */
    boolean insertTest(TestDTO testDTO);


    /**
     * 更新测试表
     *
     * @param testDTO 测试表DTO类
     * @return 结果
     */
    boolean updateTest(TestDTO testDTO);


    /**
     * 详情测试表
     *
     * @param id id值
     * @return 结果
     */
    TestVO getTestById(Integer id);


    /**
     * 删除测试表
     *
     * @param ids id数组
     * @return 结果
     */
    boolean removeTestByIds(Integer[] ids);


}

service层实现

package com.onejson.ojmall.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.onejson.ojmall.entity.TestEntity;
import com.onejson.ojmall.entity.dto.TestDTO;
import com.onejson.ojmall.entity.vo.TestVO;
import com.onejson.ojmall.mapper.TestMapper;
import com.onejson.ojmall.service.ITestService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;

/**
 * 测试表
 *
 * @author 微信公众号 onejson
 * @date 2023-08-11
 */
@Service
@Transactional
public class TestServiceImpl extends ServiceImpl<TestMapper, TestEntity> implements ITestService {

    @Resource
    private TestMapper testMapper;


    /**
     * 查询测试表列表
     *
     * @param testEntity 测试表Entity类
     * @return 测试表
     */
    @Override
    public List<TestEntity> selectTestList(TestEntity testEntity) {
        return testMapper.selectTestList(testEntity);
    }

    /**
     * 新增测试表
     *
     * @param testDTO 测试表DTO类
     * @return 结果
     */
    @Override
    public boolean insertTest(TestDTO testDTO) {

        TestEntity testInfoEntity = new TestEntity();
        BeanUtils.copyProperties(testDTO, testInfoEntity);

        return this.save(testInfoEntity);
    }

    /**
     * 更新测试表
     *
     * @param testDTO 测试表DTO类
     * @return 结果
     */
    @Override
    public boolean updateTest(TestDTO testDTO) {

        TestEntity testInfoEntity = new TestEntity();
        BeanUtils.copyProperties(testDTO, testInfoEntity);

        return this.updateById(testInfoEntity);
    }


    /**
     * 详情测试表
     *
     * @param id id值
     * @return 结果
     */
    @Override
    public TestVO getTestById(Integer id) {

        TestEntity testEntity = this.getById(id);
        TestVO testVO = new TestVO();
        BeanUtils.copyProperties(testEntity, testVO);

        return testVO;
    }


    /**
     * 删除测试表
     *
     * @param ids id数组
     * @return 结果
     */
    @Override
    public boolean removeTestByIds(Integer[] ids) {
        return this.removeByIds(Arrays.asList(ids));
    }


}

添加mapper层

package com.onejson.ojmall.mapper;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import com.onejson.ojmall.entity.TestEntity;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;


/**
 * 测试表
 *
 * @author 微信公众号 onejson
 * @date 2023-08-11 11:24:47
 */
@Mapper
public interface TestMapper extends BaseMapper<TestEntity> {


    /**
     * 查询测试表列表
     *
     * @param testEntity 测试表Entity类
     * @return list列表
     */
    List<TestEntity> selectTestList(TestEntity testEntity);

    /**
     * 统计测试表个数
     *
     * @param testEntity 测试表Entity类
     * @return 符合条件的记录个数
     */
    Integer countTest(TestEntity testEntity);


}

mapper层对应的sql

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">


<mapper namespace="com.onejson.ojmall.mapper.TestMapper">

    <!-- 可根据自己的需求,是否要使用 -->
    <resultMap type="com.onejson.ojmall.entity.TestEntity" id="testMap">
        <result property="id" column="id"/>
        <result property="title" column="title"/>
    </resultMap>

    <sql id="selectTest">
        select *
        from test
    </sql>

    <sql id="whereTest">
        <where>
            <if test="id !=null and id !=''">AND id = #{id,jdbcType=VARCHAR}</if>
            <if test="title !=null and title !=''">AND title = #{title,jdbcType=VARCHAR}</if>
        </where>
    </sql>

    <select id="selectTestList" parameterType="com.onejson.ojmall.entity.TestEntity" resultMap="testMap">
        <include refid="selectTest"/>
        <include refid="whereTest"/>
    </select>

    <select id="countTest" parameterType="com.onejson.ojmall.entity.TestEntity" resultType="java.lang.Integer">
        SELECT count(*)
        FROM (
        <include refid="selectTest"/>
        <include refid="whereTest"/>
        ) a
    </select>


</mapper>

添加扫描注解,对应sql文件的目录

@MapperScan("com.onejson.ojmall.mapper")

image-20230811175227748

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/960519.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PHP8函数包含文件-PHP8知识详解

在php中&#xff0c;可以使用以下函数来包含其他文件&#xff1a;include()、include_once()、require()、require_once()。 1、include(): 包含并运行指定文件中的代码。如果文件不存在或包含过程中出现错误&#xff0c;将发出警告。 <?php include filename.php; ?>…

【前端demo】背景渐变动画

文章目录 效果过程代码htmlcss 其他demo 效果 效果预览&#xff1a;https://codepen.io/karshey/pen/OJrXZwQ 过程 注意&#xff0c;直接在body上加height:100%可能也会出现height为0的情况&#xff0c;这是需要令html的height:100% 代码 html <!DOCTYPE html> <…

面试题--从键盘输入网站到网页显示,之间发生了什么

文章目录 首先进入HTTP阶段协议栈阶段TCP阶段IP阶段MAC网卡交换机路由器抵达 首先进入HTTP阶段 1.解析对应的URL&#xff0c;访问一个对应的服务器xxx.com的一个文件index.html; 2 使用DNS查询对应的ip地址&#xff0c;通过DNS服务器进行查找 3 组装http报文&#xff0c;生成h…

成集云 | 多维表自动查询快递100信息 | 解决方案

源系统成集云目标系统 方案介绍 产品详情 维格表是一种新一代的团队数据协作和项目管理工具&#xff0c;它结合了可视化数据库、电子表格、实时网络协同、低代码开发技术四项功能&#xff0c;且支持API与可视化看板&#xff0c;操作简单&#xff0c;能提升中小企业的数字化生…

python网络编程

文章目录 socket套接字客户端/服务模型linux文件描述符fdLinux网络IO模型详解网络服务器Apache VS Nginx生产者消费者-生成器版客户端/服务端-多线程版IO多路复用TCPServer模型异步IO多路复用TCPServer模型 socket套接字 套接字&#xff08;socket&#xff09;是抽象概念,表示T…

【数据分享】1901-2022年1km分辨率的逐月降水栅格数据(免费获取/全国/分省)

气象指标在日常研究中非常常用&#xff0c;之前我们给大家分享过来源于国家青藏高原科学数据中心提供的气象指标栅格数据&#xff08;均可查看之前的文章获悉详情&#xff09;&#xff1a; 1901-2022年1km分辨率逐月平均气温栅格数据1901-2022年1km分辨率逐年平均气温栅格数据…

wsl中使用宝塔每次都要绑定账号问题解决

环境&#xff1a;windows11、wsl2、Ubuntu20.04、宝塔8.0.24 1、开启Hyper-V&#xff0c;如果是家庭版使用下面代码启用Hyper-V&#xff0c;创建个.cmd文件保存后使用管理员权限运行&#xff08;需要重启电脑&#xff09; pushd "%~dp0" dir /b %SystemRoot%\servi…

QT6配置Android环境的多次尝试

可能用到的链接&#xff1a;https://www.androiddevtools.cn/#&#xff08;Android开发工具&#xff09; https://developer.android.google.cn/studio&#xff08;Android studio 下载&#xff09; https://www.oracle.com/java/technologies/downloads&#xff08;java下载&a…

【pyinstaller 怎么打包python,打包后程序闪退 不打日志 找不到自建模块等问题的踩坑解决】

程序打包踩坑解决的所有问题 问题1 多个目录怎么打包 不管你包含多个层目录&#xff0c;引用多么复杂&#xff0c;只需要打包主程序所在文件即可&#xff0c;pyinstaller会自动寻找依赖包&#xff0c;如果报错自建模块找不到&#xff0c;参照问题3 pyinstaller main.py问题2…

QT创建可移动点类

效果如图所示&#xff1a; 创建新类MovablePoint&#xff0c;继承自QWidget. MovablePoint头文件: #ifndef MOVABLEPOINT_H #define MOVABLEPOINT_H#include <QWidget> #include <QPainter> #include <QPaintEvent> #include <QStyleOption> #includ…

——滑动窗口

滑动窗口 所谓滑动窗口&#xff0c;就是不断的调节子序列的起始位置和终止位置&#xff0c;从而得出我们要想的结果。也可以理解为一种双指针的做法。 leetcode76 class Solution {public String minWindow(String s, String t) {char[] schars s.toCharArray();char[] tc…

需要在Activity间传递大量的数据,能有哪些方法?

在Activity间传递的数据一般比较简单&#xff0c;可是有时分实践开发中也会传一些比较复杂的数据&#xff0c;尤其是面试问道当遇到需求在Activity间传递很多的数据怎么办&#xff1f; Intent 传递数据的巨细是有约束的&#xff0c;它大约能传的数据是1M-8K&#xff0c;原因是…

【狂神】Spring5笔记(10-19)

又是美好而努力的一天呀~ __ /|* * * * * * / * * * / * * * * / * * * * * * * happy valentines day * * * * …

python基础之miniConda管理器

一、介绍 MiniConda 是一个轻量级的 Conda 版本&#xff0c;它是 Conda 的精简版&#xff0c;专注于提供基本的环境管理功能。Conda 是一个流行的开源包管理系统和环境管理器&#xff0c;用于在不同的操作系统上安装、管理和运行软件包。 与完整版的 Anaconda 相比&#xff0c…

CSS transition 过渡

1 前言 CSS过渡(transition)可以在一个元素切换到另一种状态时为其定义平滑的过渡效果。 例如&#xff0c;用户鼠标悬停在按钮上时&#xff0c;按钮颜色平滑的从一个颜色过渡到另一个颜色。 .btn:hover{background-color: red;color: black; }默认悬停效果 添加过渡效果 .b…

2.(Python数模)线性规划问题

Python解决线性规划问题 参考了以下博文 https://blog.csdn.net/m0_46692607/article/details/126784109?spm1001.2014.3001.5506 目标是解决以下的线性规划&#xff0c;程序计算出目标函数的最大值&#xff0c;并在最大值下取得的x1x2x3对应值。 源代码如下&#xff1a; …

MybatisPlus(2)

前言&#x1f36d; ❤️❤️❤️SSM专栏更新中&#xff0c;各位大佬觉得写得不错&#xff0c;支持一下&#xff0c;感谢了&#xff01;❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 上篇我们简单介绍了MybatisPlus的方便之处&#xff0c;这篇来深入了解Myb…

探索生成式人工智能的前景

一、什么是生成式人工智能&#xff1f; 生成式人工智能&#xff08;Generative AI&#xff09;是一类人工智能&#xff08;AI&#xff09;技术和模型&#xff0c;旨在创建新颖的内容。与简单的复制不同&#xff0c;这些模型通过利用从训练数据集中收集到的模式和见解&#xff…

飞桨花滑骨骼点动作识别比赛记 2

基于 PaddleVideo 的花滑骨骼点动作识别 2s-AGCN配置文件节点流配置文件 2s-agcn_ntucs_joint_fsd.yamlMODEL 字段DATASET 字段PIPELINE 和 INFERENCE 字段OPTIMIZER 字段 agcn2s.pygraph输入通道数 骨骼流 Dataset 和 Pipeline配置文件DATASETPIPELINE 源码skeleton.pyskeleto…

Elasticsearch 7.6 - API高阶操作篇

ES 7.6 - API高阶操作篇 分片和副本索引别名添加别名查询所有别名删除别名使用别名代替索引操作代替插入代替查询 场景实操 滚动索引索引模板创建索引模板查看模板删除模板 场景实操一把索引的生命周期数据迁移APIGEO(地理)API索引准备矩形查询圆形查询多边形查询 自定义分词器…