Mybatis之关联查询

一、一对一关联

1.使用resultType

(1)新建OrderUser的pojo,继承自Order

//关联用户信息的POJO
public class OrderUser extends Order {
	
	private String username;
	private String address;
    //get,set
}

(2)修改order的映射文件,新增查询方法getOrderUser

<!-- 一对一关联查询,使用resultType -->
	<select id="getOrderUser" resultType="orderuser">
		SELECT
		  o.`id`,
		  o.`user_id` userId,
		  o.`number`,
		  o.`createtime`,
		  o.`note`,
		  u.`username`,
		  u.`address`
		FROM `order` o
		LEFT JOIN `user` u
		ON u.id = o.`user_id`
	</select>

2.使用resultMap

 (1)改造order的pojo

public class Order {
	private Integer id;
	private Integer userId;
	private String number;
	private Date createtime;
	private String note;

	//引用User类
	private User user;
	//get,set
}

(2) 修改order的映射文件

<!-- 一对一关联查询-resultMap -->
	<resultMap type="order" id="order_user_map">
		<!-- id标签用于绑定主键 -->
		<id property="id" column="id"/>
		<!-- 使用result绑定普通字段 -->
		<result property="userId" column="user_id"/>
		<result property="number" column="number"/>
		<result property="createtime" column="createtime"/>
		<result property="note" column="note"/>
		
		<!-- association:配置一对一关联
			 property:绑定的用户属性
			 javaType:属性数据类型,支持别名
		-->
		<association property="user" javaType="com.mark.pojo.User">
			<id property="id" column="user_id"/>
			
			<result property="username" column="username"/>
			<result property="address" column="address"/>
			<result property="sex" column="sex"/>
		</association>
	</resultMap>
	<!-- 一对一关联查询-使用resultMap -->
	<select id="getOrderUser" resultMap="order_user_map">
		SELECT
		  o.`id`,
		  o.`user_id`,
		  o.`number`,
		  o.`createtime`,
		  o.`note`,
		  u.`username`,
		  u.`address`,
		  u.`sex`
		FROM `order` o
		LEFT JOIN `user` u
		ON u.id = o.`user_id`
	</select>

二、一对多关联

使用resultMap

(1)改造user的pojo

public class User {
	private Integer id;
	private String username;// 用户姓名
	private String sex;// 性别
	private Date birthday;// 生日
	private String address;// 地址

	//加入Order引用
	private List<Order> orders;
	//get,set
}

(2)修改user的映射文件

<!-- 一对多关联查询 -->
	<resultMap type="user" id="user_order_map">
		<id property="id" column="id" />
		<result property="username" column="username" />
		<result property="birthday" column="birthday" />
		<result property="address" column="address" />
		<result property="sex" column="sex" />
		<result property="uuid2" column="uuid2" />
		
		<!-- collection:配置一对多关系
			 property:用户下的order属性名
			 ofType:property的数据类型,支持别名
		-->
		<collection property="orders" ofType="order">
			<!-- id标签用于绑定订单主键 -->
			<id property="id" column="oid"/>
			<!-- 使用result绑定普通字段 -->
			<result property="userId" column="id"/>
			<result property="number" column="number"/>
			<result property="createtime" column="createtime"/>
		</collection>

	</resultMap>
	<!-- 一对多关联查询 -->
	<select id="getUserOrder" resultMap="user_order_map">
		SELECT
		u.`id`,
		u.`username`,
		u.`birthday`,
		u.`sex`,
		u.`address`,
		u.`uuid2`,
		o.`id` oid,
		o.`number`,
		o.`createtime`
		FROM `user` u
		LEFT JOIN `order` o
		ON o.`user_id` = u.`id`

猜你喜欢

转载自blog.csdn.net/mmake1994/article/details/85488424