1. 程式人生 > >Mybatis之關聯查詢

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`