MyBatis增删改查(SpringBoot版)
本篇将带你快速学会在SpringBoot工程下,实现MaBatis对数据的增删改查功能。
一、环境准备
创建SpringBoot工程,数据库表 tb_user,实体类User,以及引入Mybatis相关依赖(创建springboot工程时已经引入),配置Mybatis(数据库连接信息),这些工作我们在 springboot整合 mybatis 的时候就已经完成,如果有不清楚的可以回看上一篇文章。
注意在创建工程,引入Mybatis相关依赖的时候也把 lombok勾选上。
在做数据的增删改查前,先来查询一下数据库 db1下的 tb_user表,一共四条数据,如下。方便后面测试后进行查看验证。
二、删除
需求:根据id删除用户数据,如删除 id为4的用户数据。
1、编写SQL
定义接口方法,在 UserMapper接口下添加删除方法
1 | // 根据id删除用户数据,参数占位符动态获取用户id |
2、测试运行
在 springboot整合单元测试的类中,编写测试方法进行测试。
1 | // 自动装配注入 |
因为使用的是 void方法,所以运行结束后,控制台没有返回数据。直接刷新或再次查询一下 tb_user表,发现成功删除 id为4的用户数据。
注1:该删除方法也可以有返回值,其返回值为此次操作影响的记录数。只不过这里我们用了 void定义后无返回值。
注2:如果mapper接口方法形参只有一个普通类型的参数,#{…}里面的属性名可以随便写,如: #{id}、#{value}。
3、预编译SQL
3.1 配置日志
在application.properties中,配置mybatis的日志,并指定输出到控制台。
输入mybatislog就会有提示
1 | #指定mybatis输出日志的位置,输出控制台 |
配置完成后再次启动测试,成功输出日志信息,即预编译SQL
3.2 预编译SQL好处
1)性能更高
2)更安全(防止SQL注入)
SQL注入是通过操作输入的数据来修改事先定义好的SQL语句,以达到执行代码对服务器进行攻击的方法。
关于SQL注入,之前的文章有介绍过,这里不再赘述。
三、增加
需求:往 tb_user表中插入一条用户数据。
1、编写SQL
1)首先对sql语句进行分析,由于设置了主键 id为自增,故 id不需要插入,其余字段都需要插入
1 | insert into tb_user(username,name,age,gender) values ('Tom',汤姆,22,'男') |
2)定义接口方法,在 UserMapper接口下添加新增方法
注:将多个参数封装到一个 user对象中,这样在调用 insert方法时就不用传递多个参数,而只需要传递user对象即可(该对象即为我们的实体类对象)。直接通过对象中的属性值来实现动态获取
1 | // 新增员工 |
2、测试运行
在 springboot整合单元测试的类中,编写测试方法进行测试。
1 |
|
运行后控制台输出的结果如下
返回数据库查询 tb_user表,发现新增用户成功
3、主键返回功能实现
3.1 背景
在数据添加成功后,需要获取插入数据库数据的主键。
如: 在点餐系统业务中,添加套餐数据时,还需要维护套餐菜品关系表数据。具体两步如下:
1.先保存套餐信息,并获取套餐ID。
2.然后再保存套餐菜品关联信息(需要记录套餐ID、菜品ID)
3.2 实现
需要在接口方法上添加如下注解
注:该注解会自动将生成的主键值,赋值给emp对象的id属性
1 | // 新增用户 |
3.3 测试
修改测试方法里面的测试数据,重新启动运行,控制台成功输出返回的主键值。
再返回数据库查询 tb_user表,发现多了一条新增的 id为8的用户信息。
四、修改
在实际的业务中,点击修改按钮一般都会弹出一个表单,并显示可以修改的数据,如下
所以修改数据,要完成如下两个需求
需求1:根据 id查询数据用于回显。
需求2:根据 id修改数据。
1、数据回显
根据id查询用户,用于修改前的回显
1.1 编写SQL
定义接口方法,在 UserMapper接口下添加查询方法
注:该方法有返回值,由于查询返回的是一条数据,所以直接将查询返回的结果封装到一个 user对象中,而不是封装到 List集合。
1 | // 修改用户 |
1.2 测试运行
在 springboot整合单元测试的类中,编写测试方法进行测试。
1 | // 根据id查询用户 |
运行后控制台输出的结果如下,成功返回 id为8的用户数据。
1.3 注意事项
1、实体类属性名和数据库表查询返回的字段名一致,mybatis会自动封装。
2、如果实体类属性名和数据库表查询返回的字段名不一致,不能自动封装。
解决方法如下:
推荐使用最后一种方式
2、修改数据
经过上一步,将查询的数据回显出来后,就需要对其进行修改。
1.1 编写SQL
定义接口方法,在 UserMapper接口下添加修改方法
注:同样参考新增的方法,将多个参数封装到一个 user对象中,直接通过对象中的属性值来实现动态获取。
1 | // 修改用户 |
1.2 测试运行
在 springboot整合单元测试的类中,编写测试方法进行测试。
1 | // 根据id修改用户 |
运行后控制台输出的结果如下,说明已成功修改。
五、查询
1、条件查询
如查询用户姓名包含”张”的男性用户(采用 like模糊匹配)
1.1 编写SQL
定义接口方法,在 UserMapper接口下添加新增方法
注:根据条件查询,查询的结果可能不止一条,所以要封装到一个 List集合中,集合的泛型就是我们的 user对象。
需要根据条件查询的字段,来指定方法中的形参
1 | // 根据条件查询用户,这里采用了concat方法 |
1.2 测试运行
在 springboot整合单元测试的类中,编写测试方法进行测试。
1 | // 根据条件查询用户 |