【SSM】Mybatis 系列——多对一和一对多的处理、动态 SQL
10 多对一处理
多个学生,对应老师
对于这边而言,关联 多个学生,关联一个老师【多对一】
对于老师而言,集合 一个老师,有很多学生 【一对多】
10.1 测试环境搭建
导入 lombok
新建实体类 Teacher、Student
建立 Mapper 接口
建立 Mapper.xml 文件
在核心配置文件中绑定注册我们的 Mapper 接口或者文件!!【方式很多 随意挑选】
测试查询成功与否
10.2 按照查询嵌套处理(子查询)
10.3 按照结果嵌套 处理(联表查询 )
10.4 Mysql 多对一查询方式:
子查询 (按照查询嵌套)
联表查询 (按照结果嵌套)
11 一对多处理
比如:一个老师有多个学生!
对于老师而言,就是一对多的关系!
1、环境搭建
环境搭建,和刚才一样实体类
2、按照结果嵌套查询
3、按照查询嵌套处理
小结:
关联 - association 【多对一】
集合 - collection 【对多】
JavaType & ofType
JavaType 用来指定实体类中属性的类型
ofType 用来指定映射到 List 或者集合中的 pojo 类型,泛型中的约束类型
注意点:
尽量保证 SQL 的可读性,尽量保证通俗易懂
注意一对多、多对一中,属性名和字段问题!!
如果问题不好排除,可以使用日志~ 建议 Log4j 【其实默认的也够用了】
避免慢 SQL
面试:
Mysql 引擎
InnoDB 底层原理
引擎
索引优化!
@[toc]
12 动态 SQL
什么是动态 SQL:动态 SQL 就是指根据不同的条件生成不同的 SQL 语句
利用动态 SQL 这一特性可以摆脱这种痛苦。
动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似。在 Mybatis 之前的版本中,有很多元素需要花时间了解。Mybatis 3 大大精简了元素种类,现在只需要学习原来的一半的元素便可以了。Mybatis 采用功能强大的基于 OGNL 的表达式来淘汰其他大部分元素
if
choose (when,otherwise)
trim (where, set)
foreach
12.1 搭建环境
创建一个基础工程
导包
编写配置文件
编写实体类
编写实体类对应的 Mapper 接口和 Mapper.xml 文件
12.2 IF
12.3 choose (when,otherwise)
12.4 trim (where, set)
所谓的动态 SQL,本质还是 SQL 语句,只是我们可以在 SQL 层面,去执行一个逻辑代码
if where set choose when
12.5 SQL 片段
有的时候,我们可能会将一些功能的部分抽取出来,方便复用
使用 SQL 标签抽取公共部分
在需要使用的地方使用 Include 标签引用即可
注意事项:
最好基于单表定义 SQL 片段!!sql 标签不要存在 where 标签 因为他是动态的
12.6 Foreach
相当于遍历一个数组
动态 SQL 就是拼接 SQL 语句,我们只要保证 SQL 的正确性,按照 SQL 的格式,去排列组合就可以了
建议:
现在 Mybatis 中写出完整的 SQL,再对应的去修改成为我们的动态 SQL 实现通用即可
版权声明: 本文为 InfoQ 作者【胖虎不秃头】的原创文章。
原文链接:【http://xie.infoq.cn/article/7d60289600a9b81d09eab3ce1】。文章转载请联系作者。
评论