一.技术介绍
Spring Boot整合MyBatis,指的是在Spring Boot框架中,通过MyBatis作为持久层框架,与Spring Boot进行整合,提供数据库交互的功能。
具体来说,通过MyBatis的Mapper接口,可以定义与数据库表相对应的方法,这些方法可以通过MyBatis的映射文件进行映射,从而实现对数据库的操作。
二.准备工作
创建stu表,实现简单增删改查
1.创建springboot工程
勾选Mybatis,Mysql驱动 lombok(自动生成类方法)
application.propoties配置Mybatis四要素
2.创建实体类,数据库表
3.创建持久层接口
Mapper接口
@Mapper注解是MyBatis提供的一个注解,用于标记Mapper接口。 当Spring Boot启动时,会扫描到这些接口并自动创建对应的Mapper实例bean对象,用于与数据库进行交互。
4.测试类
@Autowired依赖注入,从ioc容器导入接口对象
三.具体实现
1.删除元素
删除id为20241的元素
创建Mapper接口,定义方法,传参使用占位符#{}
对传参不了解的同学可以参考上一篇文章
sql语句中的占位符#{}
在执行过程中#{}会替换为?生成预编译sql
在参数传递使用,作用
1.提高效率
会生成含有?的预编译sql,放入缓存下次使用时,编译前直接从缓存拿出,只需要给?传个参数
2.防止sql注入
${}拼接sql 会直接拼接到sql中,存在sql注入风险
2 插入元素
@insert
insert into 表名(字段名) values #{ }
传参时传入多个属性时,可以封装为一个对象
所以需要创建stu类
接口定义方法,@Select写入sql
测试
3.修改元素
接口定义方法,@update写入sql
测试
修改
4.查询元素单一结果
接口定义方法,方法返回结果封装一个对象
@select写入sql
测试
发现classId=null
原因:sql查询返回字段名与类的属性名不一致
类的属性是classId 返回字段名是class_id
字段名与类的属性名不一致解决方法:
1.方法一 (不常用) 起别名
将查询返回的字段修改为和类属性名一致
2.方法二(不常用) 添加@Results @result注解
把字段注解对应属性
3.方法三 (推荐)开启Mybatis驼峰命名自动封装
注意使用时,需要类名采用驼峰命名形式,字段名下划线形式
2.查询元素多个结果
接口
定义查询方法返回List形式
对查询参数不熟悉的同学可以看我上一篇文章
3.查询元素模糊匹配
这里使用到了like模糊匹配,#{}不能包含在字符串中,
#{}可以使用但存在sql注入风险,
需要使用自带的concat字符串拼接函数