1.resultMap
如果查询出来的列名和pojo的属性名不一致时,可以通过resultMap对列名和属性名做映射关系;
<resultMap type="com.wuhao.onetoone.resultMap.Orders" id="findOrdersAndUserReM">
<id column="oid" property="id"/>
<result column="number" property="number"/>
<result column="user_id" property="userId"/>
<result column="createtime" property="createtime"/>
<!-- 用户信息,
association:一对一映射
property:把关联查询的一对一的信息封装到哪个对象属性上
javaType:property属性的类型
其他的什么id,result标签都跟上面的一样。
-->
<association property="user" javaType="com.wuhao.onetoone.resultMap.User">
<id column="uid" property="id"/>
<result column="username" property="username"/>
<result column="sex" property="sex"/>
</association>
</resultMap>
使用resultMap就能够解决这种麻烦,因为resultMap能进行高级映射,说是高级映射,其实就是可以将查询出来的列表映射到特定
的属性上去。
使用resultMap之后,就会知道resultType的区别在哪里了
resultType:简单一些,是一种平铺式的映射,不用层级式映射用这个比较好。需要什么查什么
resultMap:比较繁琐,是一种层级式的映射,在企业中如果没有特殊要求,建议使用resultType来完成一对一映射,
-->
<select id="findOrdersAndUserByOid" parameterType="int" resultMap="findOrdersAndUserReM">
SELECT
orders.id oid,
orders.number,
orders.user_id,
orders.createtime,
user.id uid,
user.username,
user.sex
FROM orders,user WHERE orders.id = #{id} AND orders.user_id = user.id
</select>
2.resultType
只有查询出来的列名和pojo的属性一致时才会映射成功;
<select id="findOrdersAndUserByOid" resultMap="com.wuhao.onetoone.resultMap.Orders">
SELECT
orders.id oid,
orders.number,
orders.user_id,
orders.createtime,
user.id uid,
user.username,
user.sex
FROM orders,user WHERE orders.id = #{id} AND orders.user_id = user.id
</select>
3.类型使用不同
1、resultmap:mybatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap。
2、resulttype:resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。如果你要用resulttype返回一个复杂对象的话,就必须返回这个对象的所有属性.
说白了就是resultmap和resulttype都是作为sql的返回结果集,但是resultmap适用于pojo类和表字段不匹配以及复杂表的关联查询,不可以直接返回返回类型必须是外部自己定义的resultmap的引用但是resultType可以直接返回返回类型.
但是实体类对应关系一定要名字完全对应。当然resulttype也可以实现关联查询的只是这需要思考出方法来实现。