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. 使用者購買的商品