springboot-mybatis的增删改查

目录

一、准备工作

二、常用配置

 三、尝试

 四、增删改查

1、增加

2、删除

3、修改

4、查询

五、XML的映射方法


一、准备工作

实施前的准备工作:

  1. 准备数据库表

  2. 创建一个新的springboot工程,选择引入对应的起步依赖(mybatis、mysql驱动、lombok)

  3. application.properties中引入数据库连接信息

  4. 创建对应的实体类 Emp(实体类属性采用驼峰命名)

  5. 准备Mapper接口 EmpMapper

SQL文件:emp的sql文件

二、常用配置

#指定mybatis输出日志的位置, 输出控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

# 查询的时候mybatis驼峰命名法
mybatis.configuration.map-underscore-to-camel-case=true

 三、尝试

在Mybatis中提供的参数占位符有两种:${...} 、#{...}

  • #{...}

    • 执行SQL时,会将#{…}替换为?,生成预编译SQL,会自动设置参数值

    • 使用时机:参数传递,都使用#{…}

  • ${...}

    • 拼接SQL。直接将参数拼接在SQL语句中,存在SQL注入问题

    • 使用时机:如果对表名、列表进行动态设置时使用

注意事项:在项目开发中,建议使用#{...},生成预编译SQL,防止SQL注入安全。

 四、增删改查

1、增加

 // 新增
    @Options(useGeneratedKeys = true,keyProperty = "id")  // 返回主键
    @Insert("insert into emp(username, name, gender, image, job, entrydate, " +
            "dept_id, create_time, update_time) " +
            "values (#{userName}, #{name}, #{gender}, #{image}," +
            " #{job}, #{entryDate}, #{deptId}, #{createTime}, #{updateTime})")
    int insert(Emp emp);

        测试

 // 新增
    @Test
    public void empAdd(){

        //创建员工对象
        Emp emp = new Emp();
        emp.setUserName("小明");
        emp.setName("小将");
        emp.setImage("sadasdasd.jpg");
        emp.setGender((short)1);
        emp.setJob(1);
        emp.setEntryDate(LocalDate.of(2000,1,1));
        emp.setCreateTime(LocalDate.now());
        emp.setUpdateTime(LocalDate.now());
        emp.setDeptId(1);

        empMapper.insert(emp);

    }

2、删除

  // 删除
    @Delete("delete from emp where id = #{id}")
    int delete(int id);

        test

 // 删除测试
    @Test
     public void empDelete() {

        var s =  empMapper.delete(17);

        System.out.printf("删除:%s\n",s);

    }

3、修改

  // 修改
    @Update("update emp set username = #{userName}, name = #{name}, gender = 3 where id = 18;")
    void update(Emp emp);

        Test

  // 修改
    @Test
    public  void update(){

        Emp emp = new Emp();

        emp.setName("大卫");
        emp.setUserName("daadasd");
        emp.setGender(2);

        empMapper.update(emp);


    }

4、查询

  // 查询
    @Select("select * from emp " +
            "where name like concat('%',#{name},'%') " +
            "and gender = #{gender} " +
            "and entrydate between #{begin} and #{end} " +
            "order by update_time desc")
    List<Emp> list(String name, Short gender, LocalDate begin, LocalDate end);

        Test

 // 查询
    @Test
    public void search(){


        List<Emp> emp =   empMapper.list("汤姆", (short) 1,LocalDate.of(2000,8,15),LocalDate.of(2023,8,5));
        System.out.println(emp);
        
    }

五、XML的映射方法

  • <sql>:定义可重用的SQL片段

  • <include>:通过属性refid,指定包含的SQL片段

  • <if>

    • 用于判断条件是否成立,如果条件为true,则拼接SQL

    • 形式:

      <if test="name != null"> … </if>
  • <where>

    • where元素只会在子元素有内容的情况下才插入where子句,而且会自动去除子句的开头的AND或OR

  • <set>

    • 动态地在行首插入 SET 关键字,并会删掉额外的逗号。(用在update语句中)​​​​​​​

  • <foreach>​​​​​​​遍历deleteByIds方法中传递的参数ids集合

       <foreach collection="集合名称" item="集合遍历出来的元素/项" separator="每一次遍历使用的分隔符" 
             open="遍历开始前拼接的片段" close="遍历结束后拼接的片段">
    </foreach>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.demo.crud.mapper.EmpMapper">

    <!--提取重复代码 -->
    <sql id="commonSelect">select * from emp </sql>


    <!--  查询-->
<!--   resultType单条记录封装的类型 -->
    <select id="list" resultType="com.demo.crud.pojo.Emp">

        <include refid="commonSelect"/>
        <where>
            <if test="name != null">
                name like concat('%',#{name},'%')
            </if>
            order by update_time desc
        </where>

    </select>

     <!--删除操作-->
    <delete id="deleteByIds">
        delete from emp where id in
        <foreach collection="ids" item="id" separator="," open="(" close=")">
            #{id}
        </foreach>
    </delete>


</mapper>

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

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

相关文章

TP DP PP 并行训练方法介绍

这里写目录标题 张量并行TP流水线并行 PPnaive模型并行GPipePipeDream 数据并行DPFSDP 张量并行TP 挖坑 流水线并行 PP 经典的流水线并行范式有Google推出的Gpipe&#xff0c;和微软推出的PipeDream。两者的推出时间都在2019年左右&#xff0c;大体设计框架一致。主要差别为…

细讲一个 TCP 连接能发多少个 HTTP 请求(二)

第三个问题&#xff1a;一个 TCP 连接中 HTTP 请求发送可以一起发送么&#xff08;比如一起发三个请求&#xff0c;再三个响应一起接收&#xff09;&#xff1f; HTTP/1.1 存在一个问题&#xff0c;单个 TCP 连接在同一时刻只能处理一个请求&#xff0c;意思是说&#xff1a;两…

[Docker实现测试部署CI/CD----相关服务器的安装配置(2)]

目录 6、Jenkins安装配置安装jdk安装maven拉取镜像启动jenkins修改数据卷权限浏览器访问安装插件配置jenkins移动JDK和Maven配置JDK和Maven 6、Jenkins安装配置 Jenkins 是一个开源软件项目&#xff0c;是基于 Java 开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&…

js省市区下拉框联动——前端笔记

问题&#xff1a; 我们常常要用到下拉框联动的功能&#xff0c;比如最常用的是选择地址的 省 市 区 的联动。思路&#xff1a; 先填充第一个下拉框&#xff0c;然后写一个第一个下拉框的change事件来加载第二个下拉框&#xff0c;再写第二个下拉框的change事件来加载第三个下…

整理mongodb文档:collation

文章连接 整理mongodb文档:collation 看前提示 对于mongodb的collation。个人主要用的范围是在createcollection&#xff0c;以及find的时候用&#xff0c;所以本片介绍的时候也是这两个地方入手&#xff0c;对新手个人觉得理解概念就好。不要求强制性掌握&#xff0c;但是要…

2023 8-5

430. 扁平化多级双向链表 前序遍历(递归) 脖子左歪45度,多级链表变成了二叉树,输出先序即可。 前序遍历再将结果存放在双向链表中,通过将链表存入节点来改变原来的节点 /* // Definition for a Node. class Node { public:int val;Node* prev;Node* next;Node* child; }; *…

芯片工程师求职题目之CPU篇(2)

1. CPU架构中流水线的概念&#xff1f; CPU流水线(pipelining)是一种将指令分解为多步&#xff0c;并让不同指令的各步操作重叠&#xff0c;从而实现几条指令并行处理&#xff0c;以加速程序运行过程的技术。指令的每步有各自独立的电路来处理&#xff0c;每完成一步&#xff…

Java问题排查工具Arthas安装教程

Java问题排查工具Arthas入门教程 什么是阿里Arthas&#xff1f; 在生产环境经常遇到大量的日志&#xff0c;同时还有一些性能问题&#xff0c;需要进行进程分析&#xff0c;排查&#xff0c;有时候确实比较花时间&#xff0c;所以可以借助一些开源的框架来实现&#xff0c;Art…

深入学习 Redis - 谈谈你对 Redis 的 RDB、AOF、混合持久化的了解吧?

目录 一、Redis 是怎么存储数据的&#xff1f; 二、Redis 具体是按照什么样的策略来实现持久化的&#xff1f; 2.1、RDB&#xff08;Redis Database&#xff09; 2.1.1、触发机制 2.1.2、bgsave 命令处理流程 2.1.3、RDB 文件的处理 2.1.4、演示效果 1&#xff09;手动执…

2023华数杯数学建模A题思路 - 隔热材料的结构优化控制研究

# 1 赛题 A 题 隔热材料的结构优化控制研究 新型隔热材料 A 具有优良的隔热特性&#xff0c;在航天、军工、石化、建筑、交通等 高科技领域中有着广泛的应用。 目前&#xff0c;由单根隔热材料 A 纤维编织成的织物&#xff0c;其热导率可以直接测出&#xff1b;但是 单根隔热…

Multimodal Learning with Transformer: A Survey

Transformer多模态学习 Abstract1 INTRODUCTION2 BACKGROUND2.1 Multimodal Learning (MML)2.2 Transformers: a Brief History and Milestones2.3 Multimodal Big Data 3 TRANSFORMERS: A GEOMETRICALLY TOPOLOGICAL PERSPECTIVE3.1 Vanilla Transformer3.1.1 Input Tokenizat…

查看gz文件 linux zcat file.gz mtx.gz

可以使用以下命令来查看 gz 压缩文件的内容&#xff1a; zcat file.gz 1 该命令会将 file.gz 文件解压并输出到标准输出&#xff0c;可以通过管道符将其与 grep 命令结合使用来查找需要的关键词&#xff0c;例如&#xff1a; zcat file.gz | grep keyword 1 该命令会将 file.gz…

GD32F103的EXTI中断和EXTI事件

GD32F103的EXTI可以产生中断&#xff0c;也产生事件信号。 GD32F03的EXTI触发源: 1、I/O管脚的16根线&#xff1b; 2、内部模块的4根线(包括LVD、RTC闹钟、USB唤醒、以太网唤醒)。 通过配置GPIO模块的AFIO_EXTISSx寄存器&#xff0c;所有的GPIO管脚都可以被选作EXTI的触发源…

windows开机运行jar

windows开机自启动jar包&#xff1a; 一、保存bat批处理文件 echo off %1 mshta vbscript:CreateObject("WScript.Shell").Run("%~s0 ::",0,FALSE)(window.close)&&exit java -jar E:\projects\ruoyi-admin.jar > E:\server.log 2>&1 &…

VX-API-Gateway开源网关技术的使用记录

VX-API-Gateway开源网关技术的使用记录 官网地址 https://mirren.gitee.io/vx-api-gateway-doc/ VX-API-Gateway(以下称为VX-API)是基于Vert.x (java)开发的 API网关, 是一个分布式、全异步、高性能、可扩展、轻量级的可视化配置的API网关服务官网下载程序zip包 访问 https:/…

【机器学习】 贝叶斯理论的变分推理

许志永 一、说明 贝叶斯原理&#xff0c;站在概率角度上似乎容易解释&#xff0c;但站在函数立场上就不那么容易了&#xff1b;然而&#xff0c;在高端数学模型中&#xff0c;必须要在函数和集合立场上有一套完整的概念&#xff0c;其迭代和运算才能有坚定的理论基础。 二、贝叶…

刷题笔记 day7

力扣 209 长度最小的子数组 解法&#xff1a;滑动指针&#xff08;对同向双指针区间内的数据处理&#xff09; 1&#xff09;先初始化 两个指针 left &#xff0c;right。 2&#xff09;右移指针right的同时使用sum记录指针right处的值&#xff0c;并判断sum的值是否满足要求&…

【C#学习笔记】装箱和拆箱

文章目录 装箱和拆箱性能消耗装箱拆箱 比较var&#xff0c;object&#xff0c;dynamic&#xff0c;\<T\>varobject\<T\> 泛型dynamic 装箱和拆箱 在讲引用类型object的时候&#xff0c;我们说它是万能的&#xff0c;却没说它万能在哪里。 除了object为每一种变量…

【TiDB理论知识08】HATP概述

1 HTAP技术 OLTP 在线事务 支付 转账 高并发 每次操作的数据量少 &#xff0c;行存 OLAP 报表分析 每次操作大量数据 列存储 2 传统解决方案 数据抽取到数仓或者数据湖 ETL有延迟 &#xff0c;一般会有T1 T2 数据多副本 3 HTAP的要求 4 TIDB的HTAP架构 TiFlash特点&…

【Linux操作系统】相关问题和知识点总结~

【Linux操作系统】相关问题和知识点总结~&#x1f60e; 前言&#x1f64c;在Linux中&#xff0c;查看CPU使用效率top命令mpstat指令sar指令vmstat指令 如何查看Linux的内核版本grep指令&#xff08;用于在文件内容中&#xff0c;查找满足条件的内容&#xff09;如何批量删除当前…