前置说明
本文章是基于 tk.mybatis 和 mybatis 的整合,不打算说基本的增删改操作,因为这些已经被 tk.mybatis 实现了,我们继承它的接口就可以直接调用。
关于如何整合 springboot + mybatis + tk.mybatis 可直接参考我的例子项目,只有这三项的整合,非常适合于专项研究。
gitee:https://gitee.com/sanri/example/tree/master/test-mybatis
使用数据库为 mysql5.6 版本,sql 脚本可以在这里找到
https://gitee.com/sanri/example/tree/master/test-mybatis/sql/test.sql
mybatis 参数传递
- 单个参数时,非集合类型占位符是可以任意写的像这样
List dateParam(Date birthday);
注意:大于号和小于号需要写转义形式,不然会报错,要不就整个语句用 CDATA 包起来
- 多个参数时,在Mapper 中拼装sql可以使用#{0} 或者#{param1}获取第一个参数,#{1}或#{param2} 获取第二个参数,以此类推
也可以在接口方法中使用@param注解给参数取别名像这样:
// 集合类型也需要用 @Param 来标记
void batchUpdateUseInsert(@Param("batchSubList") List batchSubList);
- 使用实体传参数时,不加 @Param 注解可以直接拿实体中的属性来拼接 sql ,像这样
List selectEmpsUseParam(Emp emp);
- 可以使用 map 来传递参数,这样是最方便的,可以做到参数的统一。
List selectEmpsUseMap(Map map);
${} 和 #{} 的区别
#{} 和 ${} 在预编译中的处理是不一样的。#{} 在预处理时,会把参数部分用一个占位符 ? 代替
主要是为了防止 SQL 注入 ,建议使用 #{}
一对一关联查询
实体类
/**
* mybatis 一对一关联查询
*/
@Data
@ToString(callSuper = true)
public class EmpDept extends Emp{
private Dept dept;
}
xml 配置
一对多关联查询
实体类
@Data
@ToString(callSuper = true)
public class DeptEmps extends Dept{
private List emps;
}
xml 配置
mybatis 常用标签
参考文章 : https://blog.csdn.net/abc997995674/article/details/80885591
常用 springboot 配置项
使用 mybatis-spring-boot-starter
后,除了数据库驱动、用户名、密码需要配置一下之外,几乎不需要任何配置就可以运行 mybatis 应用。但有几个配置项是需要注意的。
这个持续更新
# 不需要自动下划线转驼峰 ,默认是 false ;就怕别人配置了
mybatis.configuration.mapUnderscoreToCamelCase=false
# 配置 mapper 级别的缓存,默认打开
mybatis.configuration.cacheEnabled=true
完整代码
github:https://gitee.com/sanri/example/tree/master/test-mybatis
sanri-tools 工具
创作不易,希望可以推广下我的小工具,很实用的解决项目中的一些麻烦的事情,欢迎来 github 点星,fork
gitee 地址:https://gitee.com/sanri/sanri-tools-maven
博客地址:https://blog.csdn.net/sanri1993/article/details/98664034