1.动态sql-where条件
1.1业务需求
需求:根据对象中不为null的数据,充当where条件,进行查询
用<where></where>标签去除语句中多余的and
2.动态sql-set条件
2.1用<set></set>标签去除语句中多余的逗号
3.动态Sql-choose(不想使用所有条件查询)、when(相当于if)、otherwise(相当于else)
3.1 业务需求说明
说明: 如果不想使用所有的条件可以使用choose 类似于java中的switch 语法
如果name有值,则按照name查询,否则按照sex查询数据.
4.resultMap介绍
4.1需求说明
4.2当表中的字段与POJO中的属性不能完全匹配时, 则需要使用resultMap映射.
4.3一张表对应一个pojo
4.4表中字段的名称与对象中的属性不一致,结果:数据不能映射.
4.5关于返回值属性说明
1.reusltType:只能支持字段名称与属性的名称一致才能自动映射
2.resultMap: 可以支持 任意类型的映射
5. Mybatis 关联关系
5.1. 常见关联关系
1.一对一 一个员工对应一个部门
2.一对多 一个部门对应多个员工
3.多对多 一个学生对应多个老师, 一个老师对应多个学生
5.2 一对一封装
5.2.1 表结构封装
规则:
标签:<association>一对一关联封装
必须指定属性的类型 javaType属性
autoMapping="true" 自动映射
1.如果进行单表关联操作: 一般使用resultType
2.如果进行多表关联操作:一般使用resultMap
3.如果是多表关联操作,则不允许出现重名字段.否则映射失败.
关于自动映射规则:
1.没有关联映射时: 如果属性和字段同名,则可以省略不写.
2.如果有关联映射: 则需要添加自动映射的开关autoMapping="true"
该注解只对当前对象有效 如果有多个对象,则需要添加多次
准则:涉及到关联封装,必须添加autoMapping="true"
知识点:
1.一对一关联封装 association标签
2.必须指定属性的类型 javaType属性
3.autoMapping="true" 自动映射
6.一对多封装
标签: <conllection> 一对多关联封装标签
ofType:一对多封装,固定搭配 ofType=" "
1.一个部门下对应多个员工,主对象是Dept
7.
8. 总结
思想: 面向对象方式!!!
1.动态Sql: 不清楚用户到底传递了什么数据!!!
1.动态查询 2.动态更新 3.分支结构
关联关系
一对一/一对多/多对多(双向一对多)
resultMap 万能的数据封装的结构体系
一对一: association property=“dept” javaType=“Dept”
一对多: collection property=“emps” ofType=“Emp”