前言
继续学习自定义映射,今天便是mybatis初步学完的最后一天了,加油,奥里给~
搭建MyBatis框架
步骤说明
创建表时把email打成了eamil,导致报了下错
1️⃣在mybatis下创建一个module
2️⃣配置pom.xml文件,导入相关依赖及配置打包类型
3️⃣创建mybatis核心配置文件并配置
4️⃣创建日志文件及properties文件
5️⃣创建工具类
6️⃣创建相关数据库表(不管是多对一还是一对多,都需要在多的一方设置一的主键)
7️⃣ 创建实体类
8️⃣创建mapper接口及映射文件
9️⃣为了保证IDEA快速启动,对于不常用的module设置为不加载也就是打开时对其索引不进行扫描(可做可不做)
步骤实现
映射关系
字段别名
通过字段别名解决字段名和属性名的映射关系
报错:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'mybatis.t_emp' doesn't exist
原因:数据库中表为t__emp而映射文件写的表名为t_emp,粗心导致
发现字段名与属性名不一致查询为null
解决办法:通过字段别名解决字段名和属性名不一致
全局配置mapUnderscoreToCamelCase
将_自动映射为驼峰,emp_name:empName
<settings><setting name="mapUnderscoreToCamelCase" value=""/>
</settings>
resultMap
通过resultMap解决字段名和属性名的映射关系
-
resultMap:设置自定义映射关系
-
id:唯一标识,不能重复
-
type:设置映射关系中的实体类类型
-
id设置主键映射关系,result设置普通字段映射关系
-
property:设置映射关系中的属性名,必须是type属性所设置的实体类类型中的属性名
-
column:设置映射关系中的字段名,必须是sql语句查询出的字段名
多对一映射
级联方式
通过级联属性赋值解决多对一的映射关系
左连接查询以查询左表为主,右连接查询以查询右表为主
关于mysql级联查询,可参考这篇文章
使用association
分步查询
- select:设置分步查询的sql的唯一标识(namespace.SQLId或mapper接口的全类名.方法名)
- column:设置分布查询的条件
延迟加载
-
分步查询的优点:可以实现延迟加载,但必须在核心配置文件中设置全局配置信息
-
LazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载
-
aggressiveLazyLoading:当开启时,任何方法的调用都会加载该对象的所有属性。否则,每个属性会按需加载
-
此时就可以实现按需加载,获取的数据是什么,就只会执行相应的sql。此时可通过association和collection中的fetchType属性设置当前的分步查询是否使用延迟加载,fetchType=“lazy(延迟加载)|eager(立即加载)"
一对多映射
对一对应对象,对多对应集合
因为走神忽视了property=emps
的含义导致报错,解决这个错误花了10分钟左右
collection:处理一对多的映射关系
ofType:表示该属性所对应的集合中存储数据的类型
property:映射关系的属性名(这里对应集合属性)
分步查询
动态SQL
MyBatis框架的动态SQL技术是一种根据特定条件动态拼接SQL语句的功能,它存在的意义是为了解决拼接SQL语句字符串时的痛点问题
if标签
多条件查询(加个恒成立条件1=1)
if
根据标签中test属性所对应的表达式决定标签中的内容是否需要拼接到SQL中
小结
到今天为止,花了4天时间把mybatis给肝完了,当然这里也只是初步完成了mybatis系统学习,总的来说,理解上难度不大,主要是杨博超老师讲的很好,实践起来在刚开始会稍有难度,但还好,接下来就是SpringMVC了,加油,奥里给~
简单回顾
文章目录
- 前言
- 搭建MyBatis框架
- 步骤说明
- 步骤实现
- 映射关系
- 字段别名
- 全局配置mapUnderscoreToCamelCase
- resultMap
- 多对一映射
- 级联方式
- 使用association
- 分步查询
- 延迟加载
- 一对多映射
- 分步查询
- 动态SQL
- if标签
- 小结