MyBatis进阶(一)—映射
来源:互联网 发布:linux怎么发送arp请求 编辑:程序博客网 时间:2024/05/17 00:05
- 一对一查询
- resultType实现
- resultMap实现
- 一对多查询
- 延迟加载
- 配置mybatis支持延迟加载
- 一对一延迟加载
- 一对多延迟加载
- resultTyperesultMap延迟加载使用场景总结
一对一查询
resultType实现
Orders类中添加关联用户信息
public class Orders implements Serializable { private Integer id; private Integer userId; private String number; private Date createtime; private String note; //关联用户信息 private User user; //省略getter和setter}
xml中配置:
<!-- 一对一查询使用reusltType完成 查询订单关联查询用户信息 --> <select id="findOrderUserList" resultType="orderCustom"> SELECT orders.*, USER .username, USER .sex FROM orders, USER WHERE orders.user_id = USER .id </select>
只要在查询的类中关联需要的信息即可。
resultMap实现
xml中配置:
<!-- 一对一查询resultMap 查询订单关联查询用户信息--> <resultMap type="orders" id="ordersUserResultMap"> <id column="id" property="id"/> <result column="user_id" property="userId"/> <result column="number" property="number"/> <result column="createtime" property="createtime"/> <result column="note" property="note"/> <association property="user" javaType="user"> <id column="user_id" property="id"/> <result column="username" property="username"/> <result column="sex" property="sex"/> </association> </resultMap><!-- 一对一查询使用reusltMap完成 查询订单关联查询用户信息 --> <select id="findOrderUserListResultMap" resultMap="ordersUserResultMap" > SELECT orders.*, user.username, user.sex FROM orders, USER WHERE orders.user_id = user.id </select>
association:用于对关联信息映射到单个pojo
property:要将关联信息映射到orders的哪个属性中
javaType:关联信息映射到orders的属性的类型,是user的类型
一对多查询
xml中配置
<!-- 一对多 查询订单、用户及订单明细 --> <resultMap type="orders" id="orderAndOrderDetails" extends="ordersUserResultMap"> <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail"> <id column="orderdetail_id" property="id"/> <result column="items_num" property="itemsNum"/> <result column="items_id" property="itemsId"/> </collection> </resultMap>
映射订单信息,和用户信息,这里使用继承ordersUserResultMap
映射订单明细信息
property:要将关联信息映射到orders的哪个属性中
ofType:集合中pojo的类型
复杂一对多
<!-- 一对多查询 查询用户及订单明细和商品信息 --> <resultMap type="user" id="userOrderDetailResultMap"> <!-- 用户信息映射 --> <id column="user_id" property="id"/> <result column="username" property="username"/> <result column="sex" property="sex"/> <!-- 订单信息 --> <collection property="orderlist" ofType="cn.itcast.mybatis.po.Orders"> <id column="id" property="id"/> <result column="user_id" property="userId"/> <result column="number" property="number"/> <result column="createtime" property="createtime"/> <result column="note" property="note"/> <!-- 订单明细映射 --> <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail"> <id column="orderdetail_id" property="id"/> <result column="items_num" property="itemsNum"/> <result column="items_id" property="itemsId"/> <!-- 商品信息 --> <association property="items" javaType="cn.itcast.mybatis.po.Items"> <id column="item_id" property="id"/> <result column="items_name" property="name"/> <result column="items_detail" property="detail"/> </association> </collection> </collection> </resultMap>
延迟加载
配置mybatis支持延迟加载
<!-- 全局配置参数 --> <settings> <!-- 延迟加载总开关 --> <setting name="lazyLoadingEnabled" value="true" /> <!-- 设置按需加载 --> <setting name="aggressiveLazyLoading" value="false" /> </settings>
一对一延迟加载
<!-- 一对一查询延迟加载 的配置 --> <resultMap type="orders" id="orderCustomLazyLoading"> <!-- 完成了订单信息的映射配置 --> <!-- id:订单关联用户查询的唯 一 标识 --> <id column="id" property="id" /> <result column="user_id" property="userId" /> <result column="number" property="number" /> <result column="createtime" property="createtime" /> <result column="note" property="note" /> <association property="user" select="cn.itcast.mybatis.mapper.UserMapper.findUserById" column="user_id"> </association> </resultMap><!-- 一对一查询延迟加载 开始只查询订单,对用户信息进行延迟加载 --> <select id="findOrderUserListLazyLoading" resultMap="orderCustomLazyLoading"> SELECT orders.* FROM orders </select>
一对多延迟加载
一对多延迟加载的方法同一对一延迟加载,在collection标签中配置select内容。
resultType、resultMap、延迟加载使用场景总结
延迟加载:
延迟加载实现的方法多种多样,在只查询单表就可以满足需求,为了提高数据库查询性能使用延迟加载,再查询关联信息。
mybatis提供延迟加载的功能用于service层。
resultType:
作用:
将查询结果按照SQL列名POJO属性名一致性映射到POJO中。
场合:
常见一些明细记录的展示,将关联查询信息全部展示在页面时,此时可直接使用resultType将每一条记录映射到pojo中,在前端页面遍历list(list中是pojo)即可。resultMap:
使用association和collection完成一对一和一对多高级映射。
association:
作用:
将关联查询信息映射到一个pojo类中。
场合:
为了方便获取关联信息可以使用association将关联订单映射为pojo,比如:查询订单及关联用户信息。
collection:
作用:
将关联查询信息映射到一个list集合中。
场合:
为了方便获取关联信息可以使用collection将关联信息映射到list集合中,比如:查询用户权限范围模块和功能,可使用collection将模块和功能列表映射到list中。
- MyBatis进阶(一)—映射
- mybatis进阶--输入映射和输出映射
- Mybatis步步进阶(五)——Mybatis输入输出映射及动态SQL Review
- Mybatis步步进阶(七)——Mybatis实体关联映射
- mybatis进阶--mapper输入映射和输出映射
- MyBatis进阶(一)运行原理
- Mybatis映射关系-多对一映射
- 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)
- 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)
- 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)
- 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)
- 【SSH快速进阶】——Hibernate 多对一映射 和 一对多映射
- 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)
- 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)
- 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)
- mybatis进阶(1)--高级映射之数据模型分析
- SSM框架-MyBatis进阶篇(一)
- mybatis高级映射一对多查询(一)
- 自学C之递归理解
- JAVA WebService开发入门引入
- Discrete Logging
- size_t和size_type
- mysql中修改表字段名/字段长度/字段类型详解
- MyBatis进阶(一)—映射
- SIP初步
- spring学习之@ModelAttribute运用详解
- java 操作pdf模板(向指定域添加文本内容和图片)
- Android Guide
- MYSQL中常用数据类型介绍
- Dutch national flag problem
- ButterKnife详解
- 19. Remove Nth Node From End of List [easy] (Python)