mybatis3
分享mybatis3 基础知识, 源码分析等
Java 程序源
微信公众号: Java 程序源,敬请关注!
展开
-
01. Mybatis 简介
1. Mybatis 简介Mybatis 是一款优秀的持久层框架, 支持定制化sql , 存储过程以及结果集映射. 笔者认为Mybatis有三大核心特性:sql分离: sql 写在xml文件中, 与java 代码分离, 降低了sql 与java 代码的耦合度, 便于维护和升级结果集映射: Mybatis 的结果集映射是非常强大的, 可以将sql查询结果自动解析为任意对象, 而不仅仅局限于p...原创 2019-08-27 17:04:26 · 239 阅读 · 0 评论 -
15.Mybatis 更新操作-update
1. update 标签update 标签是用于定义更新 语句的.1.1 常用属性update 有几个常用的属性, 但是通常只需要设置id 即可.id: sql 片段在命名空间内的唯一标识. 和mapper 中方法名保持一致parameterType: 参数类型, 通常都可以省略.flushCache: 是否刷新(清空)一级缓存和二级缓存, 默认为true. 笔者尝试设置为false...原创 2019-08-27 17:05:29 · 77676 阅读 · 6 评论 -
16. Mybatis 插入操作-insert
1. insert 标签insert 标签是用于定义插入语句的.1.1 常用属性insert 有几个常用的属性:id: sql 片段在命名空间内的唯一标识. 和mapper 中方法名保持一致useGeneratedKeys: 是否回填自动生成的主键keyProperty: 主键回填到哪个属性keyColumn: 主键回填的字段名, 可省略parameterType: 参数类型, ...原创 2019-08-27 17:05:32 · 31836 阅读 · 0 评论 -
17. Mybatis 查询操作-select
1. select 标签select 标签是用于定义插入语句的, select 标签是Mybatis 中最复杂的标签了.1.1 常用属性select 的属性和子标签比较多, 常用属性有:id: sql 片段在命名空间内的唯一标识. 和mapper 中方法名保持一致useGeneratedKeys: 是否回填自动生成的主键keyProperty: 主键回填到哪个属性keyColumn...原创 2019-08-27 17:05:36 · 436 阅读 · 0 评论 -
18. Mybatis 查询结果集映射
Mybatis 最强大的特性大概就是结果集映射了吧. 相比Hibernate, Mybatis 的结果集映射不局限于PO, Mybatis可以将结果集映射为任意的java 对象.笔者之前的博客中, 多次使用resultType, 这里就不赘述了. 这里主要介绍resultType 和resultMap 的适用场景, 以及resultMap的基本用法.1. resultType 与 result...原创 2019-08-27 17:05:40 · 1235 阅读 · 0 评论 -
19. Mybatis 自定义结果集映射-一对一
Mybatis 并没有像Hibernate 那样严格的一对一, 一对多映射关系, Mybatis 中的一对一映射,一对多映射指的是将结果集封装为复杂结构的Java 对象. Mybatis 的一对一映射, 实现方式有三种.1. 一对一对象结构一对一映射,指的是目标对象中有非基本类型的属性. 笔者给出两种一对一模式.1.1 示例一EmpAndDeptVO 其实就是EmployeePO, 只是...原创 2019-08-27 17:05:43 · 686 阅读 · 0 评论 -
20. Mybatis 自定义结果集映射-一对多
Mybatis 的一对多映射和一对一映射类似, 可以采用联表查询方式, 也可以采用分步查询方式. 分步查询时, 默认为立即查询, 支持延迟加载策略.1. 联表查询联表查询指的时, 使用联表查询sql 查询出一对多关系中多的记录. 然后采用collection 标签对查询结果集进行封装. collection 标签必要属性:property: 要封装的属性ofType: 每个元素的类型...原创 2019-08-27 17:05:47 · 842 阅读 · 0 评论 -
21. Mybatis 的三种执行器
在企业开发中, 对数据库的批量操作, 是一个非常常见的操作, Mybatis提供了批量执行器, 来支持批量操作.1. Mybatis sql执行器Mybatis 支持全局修改执行器, 参数名为: defaultExecutorType. 但是笔者并不推荐这种方式,笔者建议在获取sqlSession对象时设置. Mybatis 共有三种执行器:SIMPLE: 默认的执行器, 对每条sql进行...原创 2019-08-27 17:05:52 · 14186 阅读 · 8 评论 -
22. Mybatis 分页插件-PageHelper
Mybatis 本身并没有提供分页插件的相关实现方案, 如果使用原生的sql 进行分页, 那么开发起来会麻烦. 但是, Mybatis 扩展性很好, 可以自定义插件开发, 可以自己开发插件实现分页. 当然了, 网上也哟很多比较优秀的分页插件, Mybatis PageHelper 就是一个使用比较广泛的插件. 但是, 笔者认为PageHelper API 并不是太好用.1. PageHelper...原创 2019-08-27 17:05:55 · 245 阅读 · 0 评论 -
23. Mybatis 分页插件-PageHelperPlus
对于PageHelper, 笔者认为其API 设计有些不够友好, 导致写出的代码不够优雅. 所以, 笔者基于PageHelper 开发了一个PageHelperPlus 插件, 以实现更优雅地方式使用PageHelper. 笔者期望实现的是, 当接口参数中包含分页参数时, 自动进行分页, 并将结果集封装为PageResult 对象, 而无须手动封装为PageInfo 对象.1. 集成方式由于...原创 2019-08-27 17:05:58 · 255 阅读 · 0 评论 -
24. Mybatis 分页插件-PageHelperPlus 源码
为提供Mybatis PageHelper 更优雅地调用方式, 笔者开发了Mybatis PageHelper Plus 插件.1. 引入依赖笔者基于Mybatis 3.4.6 和 pageheler 5.1.10 开发的此插件<properties> <mybatis.version>3.4.6</mybatis.version> <...原创 2019-08-27 17:06:02 · 678 阅读 · 0 评论 -
25. Mybatis 分页插件-paginator
Mybatis 分页查看Mybatis 并没有提供分页功能,需要自己写拦截器来实现.网上也有很多开源的分页插件可以使用,笔者使用的是github 提供的mybatis-paginator.1. 集成方式1.1 添加pom 依赖<!-- https://mvnrepository.com/artifact/com.github.miemiedev/mybatis-paginator...原创 2019-08-27 17:06:06 · 876 阅读 · 0 评论 -
14. Mybatis 删除操作-delete
1. delete 标签delete 标签是用于定义delete 语句的.1.1 常用属性delete 有几个常用的属性, 但是通常只需要设置id 即可.id: sql 片段在命名空间内的唯一标识. 和mapper 中方法名保持一致parameterType: 参数类型, 通常都可以省略.flushCache: 是否刷新(清空)一级缓存和二级缓存, 默认为true. 笔者尝试设置为f...原创 2019-08-27 17:05:25 · 49898 阅读 · 0 评论 -
13. Mybatis 整合Spring boot 2
SpringBoot 框架是目前java 领域最火的框架之一, Mybatis 也提供了与它整合的子项目. 项目地址: https://github.com/mybatis/spring-boot-starter1. 整合核心配置1.1 引入依赖引入Mybatis提供了与springboot 整合的适配器包引入Mybatis的核心包, 虽然适配器包会级联引入Mybatis包, 但是笔者还...原创 2019-08-27 17:05:21 · 783 阅读 · 1 评论 -
02. Mybatis 环境搭建
Mybatis 是一个持久层的半自动化ORM框架, 所以Mybatis的基础环境搭建一个JavaSE 环境即可. 而已笔者认为, 搭建一个JavaSE 环境, 更利于深入学习和研究Mybatis 的特性. 在此基础之上, 应该细读Mybatis 官方文档, 多动手实践. 笔者使用Maven 构建工具, 因此搭建一个基于Maven 的JavaSE 环境.1. 创建表mybatis 是操作关系型...原创 2019-08-27 17:04:31 · 228 阅读 · 0 评论 -
03. Mybatis 环境搭建-完善单表的CRUD
笔者认为, 数据库的最基础的操作, 应该是单表的增删改查了吧. 让我们来完善一下对Employee 表的增删改查操作.1. 完善Mapper接口 和 sql映射文件1.1 完善Mapper 接口Mybatis 对于增删改操作, 支持自动封装成int, long, boolean 以及包装类型在xml文件中通过${}引用参数时, 接口中必须使用@Param 注解定义参数public i...原创 2019-08-27 17:04:35 · 211 阅读 · 1 评论 -
04. Mybatis 动态sql
Mybatis 的第三个强大特性便是它的动态SQL, 允许根据传入参数不同, 动态拼接sql. Mybatis 动态sql 功能很强大, 但是标签却很少, 这主要得益于Mybatis 动态表达式使用了Apache 的OGNL 表达式.1. 动态sql相关标签Mybatis 的动态sql 功能很强大, 但是标签却比较少. 大致可以分为以下四类:判断类标签: if, choose, when,...原创 2019-08-27 17:04:40 · 382 阅读 · 0 评论 -
05.Mybatis sql 片段重用
1. sql 重用标签Mybatis 提供了sql 标签和include 标签, 用于sql 片段的重用1.1 sql 标签sql 标签中不能通过#{}来引用参数, 因为#{} 是处理占位符参数的sql 标签中只能使用${} 接收引用时传入的参数, ${} 表示的是字符串替换${} 可获取接口传入的或自定义的参数(include 标签中定义的参数)sql 标签中可以使用if, cho...原创 2019-08-27 17:04:48 · 996 阅读 · 0 评论 -
06. Mybatis 缓存-一级缓存
和其它ORM 框架类似, Mybatis也提供了一级缓存和二级缓存机制. 但是Mybatis 毕竟不是专业做缓存的, 提供的缓存实现比较简单, 所以Mybatis 提供了缓存的通用接口, 可以自己进行扩展.1. 一级缓存1.1 一级缓存特性一级缓存是sqlSession 级别的, 也称会话级别的. 也就是说, 一个sqlSession 拥有一个缓存Map对象.一级缓存默认开启, 而且不可...原创 2019-08-27 17:04:53 · 264 阅读 · 0 评论 -
07. Mybatis 缓存-二级缓存
Mybatis 除了一级缓存外, 还支持二级缓存, 二级缓存是namespace级别的.1. 二级缓存1.1 二级缓存特点二级缓存是namespace 级别的, 凌驾于sqlSession 之上, 可实现sqlSession 之间的共享二级缓存全局配置模式是开启的, 可进行关闭二级缓存是事务性的, 当sqlSession正常关闭或提交事务时, 会将sqlSession中的一级缓存刷新到...原创 2019-08-27 17:04:57 · 180 阅读 · 0 评论 -
08. Mybatis 核心配置文件
Mybatis 核心配置文件用于设置Mybatis 的特性, 如支持驼峰命名, 定义插件等.1. 配置文件概览Mybatis 的核心配置文件中, 配置项并不太多. 而且当整合spring 之后, 很多配置项都将交由spring处理, 不再通过Mybatis进行配置.Mybatis 核心配置文件中, 标签项可以没有, 但是顺序一定不能乱. 配置顺序如下:properties: 引用外部p...原创 2019-08-27 17:05:01 · 199 阅读 · 0 评论 -
09. Mybatis 核心配置-别名配置
在映射文件中, 对于parameterType 和 resultType 默认需要写类的全限定名称, 设置别名之后, 可以使用类的简单类名.1. 别名配置全局别名配置, 在Mybatis 核心配置文件中进行配置. 配置标签为typeAlias.typeAlias 中子标签typeAlias 和package 的配置顺序是有要求的, 必须typeAlias 在前Mybatis 别名不区分大...原创 2019-08-27 17:05:05 · 406 阅读 · 0 评论 -
10. Mybatis 逆向工程-MBG
Mybatis Generator 简称MBG, 是Mybatis 专门用于自动化生产Mapper 接口类, PO 类, sql 映射文件的工具. MBG 是Mybatis 官方提供的一个子项目, 但是笔者并不觉得有多好用, 笔者更倾向于自己开发Mybatis 自动化生产代码工具. 因为没有任何一款开源的工具, 能完全适应你的项目编码规范. 因此, 笔者在这里只简单地介绍一下MBG 的环境搭建. ...原创 2019-08-27 17:05:09 · 141 阅读 · 0 评论 -
11. Mybatis 参数传递与引用
Mybatis 的参数传递与引用, 指的是在sql 映射文件中如何引用java 中传递的参数. Mybatis 支持命名参数和位置参数两种方式, 也可以自动从pojo中获取属性值.1. 参数传递方式和jdbc 类似, Mybatis 的参数传递也包含位置参数和命名参数.1.1 位置参数位置参数是Mybatis 默认管理的, Mybatis会将参数列表转换为两种位置参数, 一组下标从0开始,...原创 2019-08-27 17:05:13 · 1423 阅读 · 0 评论 -
12. Mybatis 参数引用-${}与#{}的差异
Mybatis sql 映射文件中, 可以通过#{} 或 KaTeX parse error: Expected 'EOF', got '#' at position 34: …参数. 通常情况下, 优先使用#̲{}, 对于#{} 不能解决的…{}.1. ${} 与 #{} 的区别#{} 采用的是预编译sql, 使用的是JDBC的PrepareStatment, 可防止sql注入. 但是占...原创 2019-08-27 17:05:17 · 505 阅读 · 0 评论 -
26. Mybatis idea 插件
MybatisX 是idea 的一款辅助Mybatis 快速开发的软件.1. MybatisX插件功能实现Mapper方法于xml 中sql片段, 快速跳转检测Mapper 方法和xml 中sql片段, 是否一一映射. 没有映射会提示报错基于Mapper方法, 快速生产xml 片段格式. 报错之后, 直接Alt+Enter 即可.2. 插件安装File -> Setting...原创 2019-08-27 17:02:23 · 185 阅读 · 0 评论