输入映射
Mybatis映射文件通过parameterType指定输入参数的类型,类型可以是
- 简单类型
- hashmap
- pojo的包装类型
在xml映射文件中sql语句会根据OGNL自动获取传入类型中的属性值。
如果传入类型中没有相应的属性值,就会报找不到对应属性的错。
即使传入类型的具体对象中的相应属性为null,也并不会报错。因为Mybatis使用的是动态sql,如果没有设置某个值,条件就不会拼接在sql中去。
输出映射
输入映射主要有两种方式:
- resultType
- resultMap
resultType
- 使用resultType进行输出映射时,只有查询出来的列名和pojo中的属性名一致,才能映射成功。
- 列名与pojo的属性名只要有一个不一致就不会创建pojo对象,此时会报错。
- 列名与pojo的属性名只要有一个一致就会创建一个pojo对象并返回。
resultMap
如果查询出来的列名和pojo的属性名不一致,可以通过定义一个resultMap对列名和属性名之间进行映射。
1.定义resultMap
1 | <resultMap type="user" id="userResultMap"> |
2.使用resultMap作为statement的输出映射类型
1 | <!-- 使用resultMap进行输出映射 |
扩展
使用resultMap多表查询时,可能会导致重复字段赋值错误。
解决方法:在查询时定义别名。resultMap中根据别名列来映射
resultType和resultMap区别:
- resultType:使用resultType实现较为简单,如果pojo中没有包括查询出来的列名,需要增加列名对应的属性,即可完成映射。如果没有查询结果的特殊要求建议使用resultType。
- resultMap:需要单独定义resultMap,实现有点麻烦,如果对查询结果有特殊的要求,使用resultMap可以完成将关联查询映射pojo的属性中。
- resultMap可以实现延迟加载,resultType无法实现延迟加载。
association:
- 作用:将关联查询信息映射到一个pojo对象中。
- 场合:为了方便查询关联信息可以使用association将关联订单信息映射为用户对象的pojo属性中,比如:查询订单及关联用户信息。
collection:
- 作用:将关联查询信息映射到一个list集合中。
- 场合:为了方便查询遍历关联信息可以使用collection将关联信息映射到list集合中,比如:查询用户权限范围模块及模块下的菜单,可使用collection将模块映射到模块list中,将菜单列表映射到模块对象的菜单list属性中,这样的作的目的也是方便对查询结果集进行遍历查询。如果使用resultType无法将查询结果映射到list集合中。