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

目录

    • 手摸手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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

技术领导力实战笔记25

25&#xff5c;用心做好“鼓励式”管理 激发正能量 授权 分工作&#xff1a; 老人干新事&#xff0c;新人干老事&#xff0c;强者干难事&#xff0c;弱者干细事 新人干老事 所谓新人&#xff0c;是对业务产品不了解&#xff0c;对工作流程不清晰的岗位新人。对于新人来说&…

java八股文面试[多线程]——线程间通信方式

多个线程在并发执行的时候&#xff0c;他们在CPU中是随机切换执行的&#xff0c;这个时候我们想多个线程一起来完成一件任务&#xff0c;这个时候我们就需要线程之间的通信了&#xff0c;多个线程一起来完成一个任务&#xff0c;线程通信一般有4种方式&#xff1a; 通过 volat…

解决Linux Ubuntu上安装RabbitMQ服务后的公网远程访问问题,借助cpolar内网穿透技术

文章目录 前言1.安装erlang 语言2.安装rabbitMQ3. 内网穿透3.1 安装cpolar内网穿透(支持一键自动安装脚本)3.2 创建HTTP隧道 4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 RabbitMQ是一个在 AMQP(高级消息队列协议)基…

哈夫曼树与哈夫曼编码

哈夫曼树与哈夫曼编码 哈夫曼树 哈夫曼树又称最优二叉树&#xff0c;这种数据结构主要用于解决一些编码问题&#xff0c;与普通二叉树相比&#xff0c;哈夫曼树在特定场景下能够显著的提高效率。 相关概念 权值&#xff1a;指哈夫曼树叶子节点的权值&#xff0c;例如上图中哈…

07:STM32----ADC模数转化器

目录 1:简历 2:逐次逼近型ADC 3:ADC基本结构 4:输入通道 5:规则组的4种转换模式 1:单次转化,非扫描模式 2:连续转化,非扫描模式 3:单次转化,扫描模式 4:单次转化,扫描模式 6:触发控制 7:数据对齐 8:转化时间 9:校准 10:ADC的硬件电路 A: AD单通道 1:连接图 2:函…

计算机竞赛 基于机器视觉的二维码识别检测 - opencv 二维码 识别检测 机器视觉

文章目录 0 简介1 二维码检测2 算法实现流程3 特征提取4 特征分类5 后处理6 代码实现5 最后 0 简介 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于机器学习的二维码识别检测 - opencv 二维码 识别检测 机器视觉 该项目较为新颖&#xff0c;适合作为竞赛课…

【多线程案例】单例模式(懒汉模式和饿汉模式)

文章目录 1. 什么是单例模式&#xff1f;2. 立即加载/“饿汉模式”3. 延时加载/“懒汉模式”3.1 第一版3.2 第二版3.3 第三版3.4 第四版 1. 什么是单例模式&#xff1f; 提起单例模式&#xff0c;就必须介绍设计模式&#xff0c;而设计模式就是在软件设计中&#xff0c;针对特殊…

6路液体水位检测芯片VK36W6D SOP16 抗电源干扰及手机干扰特性好

产品品牌&#xff1a;永嘉微电/VINKA 产品型号&#xff1a;VK36W6D 封装形式&#xff1a;SOP16/QFN16L 详细资料&#xff1a;13.5/5.474/4.703 概述 VK36W6D具有6个触摸检测通道&#xff0c;可用来检测6个点的水位。该芯片具有较高的集成度&#xff0c;仅需极少的外部组件便…

一文了解tcp/ip协议的运行原理

接触代理ip的人都了解https/sock5等ip协议&#xff0c;那么TCP/IP 协议又是什么&#xff1f; 一、什么是TCP/IP 协议&#xff1f; TCP/IP 协议实际上是一系列网络通信协议的一个统称&#xff0c;他负责具体的数据传输工作&#xff0c;核心的两个协议包括TCP以及IP&#xff0c…

25.选择排序,归并排序,基数排序

目录 一. 选择排序 &#xff08;1&#xff09;简单选择排序 &#xff08;2&#xff09;堆排序 二. 归并排序 三. 基数排序 四. 各种排序方法的比较 &#xff08;1&#xff09;时间性能 &#xff08;2&#xff09;空间性能 &#xff08;3&#xff09;排序方法的稳定性能…

美创科技获通信网络安全服务能力评定(应急响应一级)认证!

近日&#xff0c;中国通信企业协会公布通信网络安全服务能力评定2023年第一批获证企业名单。 美创科技获得应急响应一级资质&#xff0c;成为2023年第一批获证企业之一&#xff01; 通信网络安全服务能力评定是对通信网络安全服务单位从事通信网络安全服务综合能力的评定&#…

Revit SDK 介绍:CreateAirHandler 创建户式风管机

前言 这个例子介绍如何通过 API 创建一个户式风管机族的内容&#xff0c;包含几何和接头。 内容 效果 核心逻辑 必须打开机械设备的族模板创建几何实体来表示风管机创建风机的接头 创建几何实体来表示风管机 例子中创建了多个拉伸&#xff0c;下面仅截取一段代码&#xff…

python爬虫—requests

一、安装 pip install requests 二、基本使用 1、基本使用 类型 &#xff1a; models.Response r.text : 获取网站源码 r.encoding &#xff1a;访问或定制编码方式 r.url &#xff1a;获取请求的 url r.content &#xff1a;响应的字节类型 r.status_code &#xff1a;响应…

山西省文物局与大势智慧签订战略合作协议

8月24日&#xff0c;由山西省文物局、中国文物信息咨询中心(国家文物局数据中心)主办的数字文博发展论坛在太原举行。武汉大势智慧科技有限公司&#xff08;后简称“大势智慧”&#xff09;受邀参与&#xff0c;与来自国内文博数字化领域的专家学者齐聚一堂&#xff0c;围绕“数…

什么是同源策略(same-origin policy)?它对AJAX有什么影响?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 同源策略&#xff08;Same-Origin Policy&#xff09;与 AJAX 影响⭐ 同源策略的限制⭐ AJAX 请求受同源策略影响⭐ 跨域资源共享&#xff08;CORS&#xff09;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记…

K 次取反后最大化的数组和【贪心算法】

1005 . K 次取反后最大化的数组和 给你一个整数数组 nums 和一个整数 k &#xff0c;按以下方法修改该数组&#xff1a; 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后&#xff0c;返回数组 可能…

02_nodejs开发环境安装

02 【nodejs开发环境安装】 1.版本介绍 在命令窗口中输入 node -v 可以查看版本0.x 完全不技术 ES64.x 部分支持 ES6 特性5.x 部分支持ES6特性&#xff08;比4.x多些&#xff09;&#xff0c;属于过渡产品&#xff0c;现在来说应该没有什么理由去用这个了6.x 支持98%的 ES6 特…

zabbix安装部署

前期准备&#xff1a;安装mysql数据库和nginx 一、下载zabbix rpm -Uvh https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm yum-config-manager --enable rhel-7-server-optional-rpms yum install epel-release numactl yum install…

Metasploit“MSF”连接postgresql时因排序规则版本不匹配导致无法连接

一、问题 更新Kali之后使用Metasploit时出现一个问题&#xff0c;连接postgresql时因排序规则版本不匹配导致无法连接 警告: database "msf" has a collation version mismatch DETAIL: The database was created using collation version 2.36, but the operati…

Linux操作系统中的信号剖析,

1、前言 信号是一种信息载体&#xff0c;在现实中&#xff0c;信号就是表示消息的物理量&#xff0c;比如说红绿灯&#xff0c;古时候狼烟等等&#xff0c;就拿红绿灯来说&#xff0c;为什人和车辆都是看到绿灯才会通行&#xff0c;红灯亮了就要停下来&#xff0c;因为这是现实…