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. 用户购买的商品