问题
<select id="getUser" parameterType="String"
resultType="User">
select * from user where username=#{username}
</select>
- 这是映射文件的配置,myBatis在查询出结果之后,会帮我们把查询结果一一对应地填充到User对象中
- 但是,它怎么知道如何去对应查询出来的字段和属性呢?只有在实体的属性名和表的字段名相同时,才能自动一一对应。
- 那么,如果属性名和表的字段名不一样怎么办?有两种解决方案
解决方案
现有实体类Order:
数据库表orders:
- 解决方案一
<select id="getOrder" parameterType="int"
resultType="Order">
select order_id id,order_name orderName from orders where order_id=#{id}
</select>
查询的时候使用别名,就可以解决
- 解决方案二:
<!-- 配置一个映射关系 -->
<resultMap type="Order" id="orderResultMap">
<id property="id" column="order_id"/>
<result property="orderName" column="order_name"/>
</resultMap>
<!-- 查询结果集引用配好的映射关系 -->
<select id="getOrder" parameterType="int"
resultMap="orderResultMap">
select order_id ,order_name from orders where order_id=#{id}
</select>
- resultMap中,id标签专门为主键服务,当然,全部都用result
- property为实体类属性
- column为表的列名