继续学习自定义映射,今天便是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
解决办法:通过字段别名解决字段名和属性名不一致
将_自动映射为驼峰,emp_name:empName
<settings>
<setting name="mapUnderscoreToCamelCase" value=""/>
</settings>
通过resultMap解决字段名和属性名的映射关系
resultMap:设置自定义映射关系
id:唯一标识,不能重复
type:设置映射关系中的实体类类型
id设置主键映射关系,result设置普通字段映射关系
property:设置映射关系中的属性名,必须是type属性所设置的实体类类型中的属性名
column:设置映射关系中的字段名,必须是sql语句查询出的字段名
通过级联属性赋值解决多对一的映射关系
左连接查询以查询左表为主,右连接查询以查询右表为主
关于mysql级联查询,可参考这篇文章
分步查询的优点:可以实现延迟加载,但必须在核心配置文件中设置全局配置信息
LazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载
aggressiveLazyLoading:当开启时,任何方法的调用都会加载该对象的所有属性。否则,每个属性会按需加载
此时就可以实现按需加载,获取的数据是什么,就只会执行相应的sql。此时可通过association和collection中的fetchType属性设置当前的分步查询是否使用延迟加载,fetchType=“lazy(延迟加载)|eager(立即加载)"
对一对应对象,对多对应集合
因为走神忽视了property=emps
的含义导致报错,解决这个错误花了10分钟左右
collection:处理一对多的映射关系
ofType:表示该属性所对应的集合中存储数据的类型
property:映射关系的属性名(这里对应集合属性)
MyBatis框架的动态SQL技术是一种根据特定条件动态拼接SQL语句的功能,它存在的意义是为了解决拼接SQL语句字符串时的痛点问题
多条件查询(加个恒成立条件1=1)
if
根据标签中test属性所对应的表达式决定标签中的内容是否需要拼接到SQL中
到今天为止,花了4天时间把mybatis给肝完了,当然这里也只是初步完成了mybatis系统学习,总的来说,理解上难度不大,主要是杨博超老师讲的很好,实践起来在刚开始会稍有难度,但还好,接下来就是SpringMVC了,加油,奥里给~
简单回顾