天天看點

JavaEE_Mybatis_SpringMVC_Mybatis_ResultMap 與 ResultType應用場合選擇

Mybatis中  ResultType與ResultMap有一定的不同,不同的場景選擇不同

ResultType

示例:

<sql id="query_user_where">
		<if test="userCustom!=null">
			<if test="userCustom.sex!=null and userCustom.sex!=''">
				AND user.sex = #{userCustom.sex}
			</if>
			<if test="userCustom.username!=null and userCustom.username!=''">
				AND user.username like'%${userCustom.username}%'
			</if>
		</if>
	</sql>
           
<select id="findUserCount" parameterType="cn.itcast.mybatis.po.UserQueryVo"
		resultType="int">
		SELECT COUNT(*) FROM user WHERE user.sex = #{userCustom.sex} AND
		user.username like'%${userCustom.username}%'
		<!-- where 可以自動去掉第一個and -->
		<where>
			<include refid="query_user_where"></include>
		</where>
	</select>
           

使用注意

1.在資料庫SQL查詢出來的字段必須與java對象的屬性名完全一緻,否則取不到資料

作用:

 将查詢結果按照 sql列名和 pojo屬性名一緻性映射到Pojo中。

場合:

 常見一些明細記錄的展示

ResultMap

示例:

<collection property="orderlist" ofType="cn.itcast.mybatis.po.Orders">
		<!--
			private Integer id;
			private Integer userId;
			private String number;
			private Date createtime;
			private String note; 
		 -->
		 	<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">
		 	<!--
		 		private Integer id;
				private Integer ordersId;
				private Integer itemsId;
				private Integer itemsNum;
				// 商品的Items資訊
				private Items items; 
		 	 -->
		 	 	<id column="orderdetail_id" property="id"/>
		 	 	<result column="items_id" property="itemsId"/>
		 	 	<result column="items_num" property="itemsNum"/>
		 	 	
		 	 	<association property="items" javaType="cn.itcast.mybatis.po.Items">
		 	 	<!-- 
		 	 	  private Integer id;
    			  private String name;
    			  private Float price;
    			  private String pic;
    			  private Date createtime;
     			  private String detail;
		 	 	 -->
		 	 	 <id column="items_id" property="id"/>
		 	 	 <result column="items_name" property="name"/>
		 	 	 <result column="items_detail" property="detail"/>
		 	 	 <result column="items_price" property="price"/>
		 	 	</association>
		 	</collection>
		</collection> 	
	</resultMap>
           
<select id="findUsersAndItemsResultMap" resultMap="UsersAndItemsResultMap">
		SELECT
			orders.*,
			user.username,
			user.sex,
			user.address,
			orderdetail.id orderdetail_id,
			orderdetail.items_id,
			orderdetail.items_num,
			orderdetail.orders_id,
			items.name items_name,
			items.detail items_detail,
			items.price items_price
		FROM
			user,
			orders,
			orderdetail,
			items
		WHERE
			orders.user_id = user.id
			AND orderdetail.orders_id = orders.id
			AND orderdetail.items_id = items.id
	</select>
           

使用注意

1.可以利用 column(資料庫查詢出來的字段) 與 property (Java對象中的字段)進行映射。

 2.association , collection 

 association 将關聯查詢資訊映射到一個pojo 對象中。

 collection 将關聯查詢的資訊映射到一個list 集合中。

場合:

1. 與訂單關聯的使用者 一起的資訊

2. 使用者購買的商品

繼續閱讀