您的位置:首页 > 其它

【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不能实现延迟加载。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: