Mybatis中使用select查询时返回值的类型可以为resultType和resultMap两种类型,其中resultType表示返回类型,映射成我们的model对象中的实体,而resultMap需要提前定义好数据库db和model实体类对应关系,然后在引用定义好的外部resultMap,当然resultMap和resultType是不能同时存在的。
具体内容:
①当返回类型是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动 的给把对应的值赋给resultType所指定对象的属性。
②当返回类型是resultMap时,因为Map不能很好明确的指向对象的某个属性,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。
<mapper namespace="clark">
<typeAliases>
<typeAlias alias="goods" type="com.clark.model.Goods"></typeAlias>
</typeAliases>
<resultMap type="com.clark.model.Goods" id="t_good">
<!-- 定db和model的映射关系 -->
<id column="id" property="id"/>
<result column="cate_id" property="cateId"/>
<result column="name" property="name"/>
<result column="price" property="price"/>
<result column="description" property="description"/>
<result column="order_no" property="orderNo"/>
<result column="update_time" property="updateTime"/>
</resultMap>
<!--resultMap 和 resultType的使用区别-->
<select id="selectGoodById" parameterType="int" resultType="goods">
select id,cate_id,name,price,description,order_no,update_time
from goods where id = #{id}
</select>
<select id="selectAllGoods" resultMap="t_good">
select id,cate_id,name,price,description,order_no,update_time from goods
</select>
<insert id="insertGood" parameterType="goods">
insert into goods(id,cate_id,name,price,description,order_no,update_time)
values(#{id},#{cateId},#{name},#{price},#{description},#{orderNo},#{updateTime})
</insert>
</mapper>