为了方便 MyBatis 的使用,整理编写了一个 MyBatis 的例子,各种映射器、动态 SQL 的使用都可以在例子中找到,接下来我们详细描述项目的情况。
MyBatis 官网文档:http://www.mybatis.org/mybatis-3/zh/index.html
项目地址:https://gitee.com/yin_jw/demo.git
数据库表的模型关系:https://www.processon.com/view/link/5baf4a2ce4b0d4d65c1ca52a
结论
- resultMap 的级联操作不要使用
- 二级缓存不要使用
这两个功能只是看起来美好,实际使用起来很多坑。虽然 resultMap 的级联操作很坑,但是例子中还是简单实现了一下。
如何让实例跑起来
- 在数据库中建表,建表语句在的 db 目录
- 修改 application.yml 配置,通过 Application.java 类启动项目
配置
项目中没有使用 MyBatis 配置文件(mybatis-config.xml),项目使用了 Spring Boot 框架,简化了 MyBatis 的配置。下面介绍一下项目中各处的 MyBatis 配置内容。
- Spring Boot 配置文件(application-dev.yml)中的 MyBatis 配置,这些配置在项目启动的时候由 spring-boot-autoconfigure-1.5.9.RELEASE.jar、mybatis-spring-boot-autoconfigure-1.3.1.jar 负责加载,这就是 Spring Boot 的方便之处。
- Spring Boot 启动类(Application)中配置 dao 类的包名
- 增加了一个性别枚举的类型处理器(SexEnumTypeHandler),该类型处理器会在配置在 Mapper 映射文件(StudentMapper.xml)中,处理学生的性别数据。
映射器
参考 StudentMapper.xml 文件,各种元素的使用在里面都有详细的例子。简单的元素使用这里就不做详细介绍了,具体内容可以直接参考该 xml 文件。
- SQL映射文件的几个顶级元素
cache 和 cache-ref 有坑,不适合分布式服务,这里就不做介绍了,其实单节点服务也不建议使用,二级缓存是坑。
元素名称 | 描述 | 备注 |
---|---|---|
select | 查询语句 | 可以自定义参数,返回结果集等 |
insert | 插入语句 | 执行后返回一个整数,代表插入的条数 |
update | 更新语句 | 执行后返回一个整数,代表更新的条数 |
delete | 删除语句 | 执行后返回一个整数,代表删除的条数 |
parameterMap | 定义参数映射关系 | 即将被删除的元素,不建议大家使用 |
sql | 允许定义一部分的SQL,然后在各个地方引用它 | 例如,一张表列名,我们可以一次定义,在多个SQL语句中使用 |
resultMap | 用来描述从数据库结果集中来加载对象 | 它将提供映射规则 |
cache | 给定命名空间的缓存配置 | |
insert | 其他命名空间缓存配置的引用 |
- 级联和延迟加载
在 application-dev.yml 配置文件中开启了全局延迟加载功能,例如我们取出学生信息,不会级联取出学生成绩和学生证信息,只有在访问学生成绩属性的时候 MyBatis 才会去发送 SQL 去取出学生成绩的信息。
注意:在代码中有两种级联方式,具体使用参考StudentMapper.xml
动态SQL
- MyBatis 的动态 SQL 包括以下几种元素
元素名称 | 描述 | 备注 |
---|---|---|
if | 判断语句 | 单条件分支判断 |
choose(when、otherwise) | 相当于Java中的case when语句 | 多条件分支判断 |
trim(where、set) | 辅助元素 | 用于处理一些SQL拼装问题 |
foreach | 循环语句 | 在in语句等列举条件常用 |
具体元素的使用在StudentMapper.xml都有体现,大家一看就明白。如果对元素描述的不到位的,可以参考MyBatis的官网文档,链接在文档的最上方。
- 新增数据返回主键ID
这里提一下吧,也便于大家了解这方面的写法,我觉得框架的使用不需要记忆,只需要有个使用例子方便我们 Ctrl + c、Ctrl + v
最后
MyBatis 的插件使用属于高级篇没有在这里描述,后面有时间了,我再去了解一下 罒ω罒 罒ω罒 罒ω罒