【SSM-MyBatis框架】关联查询--一对一查询
2016-04-12 10:49
513 查看
1.ResultType实现:
1.sql语句(mapper.xml):<!-- 关联查询 resultType --> <select id="findOrdersCustom" resultType="cn.edu.hpu.ssm.po.OrdersCustom"> SELECT orders.*, user.username, user.sex, user.address FROM orders, USER WHERE orders.user_id = user.id </select>
2.pojo类:
创建pojo类,完成上面sql的映射,将查询出来的列不存在的创建出来。原始的order类不能完成映射,需要建立order的扩展类去添加不存在的列。
/** * 关联查询例子 使用resulttype * * @author * */ public class OrdersCustom extends Orders{ /** * user.username, user.sex, user.address 将关联查询结果中没有的值,添加 */ private String username; private String sex; private String address;
3.mapper.java接口
/** * 通过reslutType进行一对一查询 */ public List<OrdersCustom> findOrdersCustom();
4.小结:
定义专门的po类作为输出类型,其中定义了sql查询结果集所有的字段。此方法较为简单,企业中使用普遍。
2.ResultMap的实现:
1.sql语句(mapper.xml):<!-- 关联查询 resultMap --> <select id="findOrdersCustomResultMap" resultMap="ordersMap"> SELECT orders.*, user.username, user.sex, user.address FROM orders, USER WHERE orders.user_id = user.id </select> <!-- 配置关联查询orders表的resultmap --> <resultMap type="cn.edu.hpu.ssm.po.Orders" id="ordersMap"> <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="cn.edu.hpu.ssm.po.User"> <id column="user_id" property="id"/> <result column="username" property="username"/> <result column="sex" property="sex"/> <result column="address" property="address"/> </association> </resultMap>
需要关联查询的是用户的信息,是通过association将用户信息映射到订单对象的用户属性中。
association:表示需要关联查询的单条记录
property:表示关联查询的结果存储在Order类中的User属性中。
javaType: 表示关联查询的结果映射类型。
2.pojo类:
在订单order类中添加用户user的属性,user属性中存储用于关联查询的用户信息,因为订单与用户是一对一关系,所以这里直接使用单个User对象存储关联查询的用户信息。
public class Orders { private Integer id; private Integer userId; private String number; private Date createtime; private String note; //用户信息 private User user;
3.mapper.java接口
/** * 通过resultMap进行一对一查询 */ public List<Orders> findOrdersCustomResultMap();
4.小结
使用association完成关联查询,将结果映射到pojo属性对象中。
3.ResultType与ResultMap:
resultType:使用resultType实现较为简单,如果pojo中不包含查询出来的列名,需要增加类名对应的属性。即可完成映射。如果没有特殊要求,建议使用resultType。
resultMap:需要单独定义ResultMap,实现较为麻烦。如果对查询结果有特殊要求,使用ResultMap可以实现将关联查询映射到pojo的属性对象中。
resultMap可以实现延迟加载,ResultType不能实现延迟加载。
相关文章推荐
- usb无法链接手机,adb devices显示一堆问号 ???????????? no permissions
- 利用vitamio Mediaplayer 自定义了一个播放器
- 图的深度优先搜索
- DatabaseMetaData 获取mysql表和字段注释
- mysql触发
- Qt事件处理机制
- 插值查找法
- C++ 向量 Vector 高级数组(三~二)
- 将Eclipse代码导入到AndroidStudio的两种方式
- [深入浅出Cocoa]iOS网络编程之CFNetwork
- IO复用
- java毕向东听课笔记12(线程1)
- 有关U启,你不得不了解的知识
- javascript设计模式--简单工厂模式
- Invalid use of group function解决办法
- 摇杆捕鱼游戏按键值对应表
- 话不能说太多,不能说太透
- malloc/free和new/delete的区别
- 关于Spring中的引入
- idea properties文件编码修改