mybatis-特殊SQL执行&自定义resultMap
1 特殊SQL
1.1 模糊查询
在SQL语句中,使用like关键字进行查询
推荐使用
${}

concat

“%”#{}”%”

1.2 批量删除
由于#{}会自动添加””,因此在批量删除的时候使用${}

1.3 动态设置表名

1.4 获取自增主键

注:
在标签中,
- 使用userGeneratedKeys表示当前添加功能使用自增的主键
- 使用keyProperty表示将添加的数据自增主键赋值给实体类型对应的属性
2 自定义映射resultMap
若字段名和实体类中的属性名不一致,但是字段名符合数据库字段命名规则,实体类中的属性 名符合Java的规则(使用驼峰)
此时也可通过以下两种方式处理字段名和实体类中的属性的映射关系
a>可以通过为字段起别名的方式,保证和实体类中的属性名保持一致
b>可以在MyBatis的核心配置文件中设置一个全局配置信息mapUnderscoreToCamelCase,可以在查询表中数据时,自动将_类型的字段名转换为驼峰
例如:字段名user_name,设置了mapUnderscoreToCamelCase,此时字段名就会转换为 userName

2.1 别名

2.2 全局配置
将配置文件中设置settings标签,里面将mapUnderscoreToCamelCase设置为true

2.3 resultMap

2.4 多对一映射
例如:多个员工对应一个部门

2.4.1 使用级联方式处理

2.4.2 使用association处理

association就是用来处理多对一的映射关系
property表示需要处理多对一的属性名
javaType表示该属性的类型
2.4.3 分步查询

- 根据多的一方的条件先进行查询,同样使用association处理多对一的关系
- property 设置实体类中dept对象的映射关系
- select 设置分布查询中dept对象的属性从另外哪个sql获取,这里取值是mapper接口中方法的全类名
- column 多表查询中外键字段的字段名
- 根据一的一方进行查询
分步查询的优点:
- 可以实现延迟加载,
- 必须在核心配置文件中设置全局配置信息:
- lazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。
- aggressiveLazyLoading:当开启时,任何方法的调用都会加载该对象的所有属性。 否则,每个属性会按需加载此时就可以实现按需加载,获取的数据是什么,就只会执行相应的sql。
- 此时可通过association和 collection中的fetchType属性设置当前的分步查询是否使用延迟加载,fetchType=“lazy(延迟加 载)|eager(立即加载)”
2.4.3.1 延迟加载
如果当前只查询员工信息,而不需要部门信息,那么就不会查询部门信息,即:不会进行第二步的查询,可以减少内存的消耗。
如果要开启延迟加载,需要开启配置信息
2.4.3.1.1 lazyLoadingEnabled


2.4.3.1.2 aggressiveLazyLoading
当开启时,任何方法的调用都会加载该对象的所有属性。 否则,每个属性会按需加载


此时就可以实现按需加载,获取的数据是什么,就只会执行相应的sql。
此时可通过association和 collection中的fetchType属性设置当前的分步查询是否使用延迟加载,fetchType=”lazy(延迟加 载)|eager(立即加载)”

2.5 一对多映射
例如:查询一个部门下的所有员工
2.5.1 使用collection处理

collection就是用来处理一对多的映射关系
property表示需要处理一对多的属性名
ofType表示该属性的类型
2.5.2 分步查询
