现在有个实例,是这样的,如图:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.juhehl.kapu.mapper.TbCardExtraMapper">
<select id="getSelledCardList" resultType="com.juhehl.kapu.rest.vo.SelledCard">
SELECT
tb_card.*, tb_transaction.done_price,
tb_transaction.done_time
FROM
tb_card
LEFT JOIN tb_transaction ON tb_transaction.card_id = tb_card.id
WHERE
`status` = 2
ORDER BY
done_time DESC
</select>
</mapper>
这里使用resultType返回,结果集类型是SelledCard,是自己定义的pojo,说实话,自己有时候用着比较密码,什么时候用resultType,什么时候用resultMap,比较乱,所以我先按resultType这样写,看能否得到自己想要的结果,得到的结果如下:
"auctionMode": null,
"startPrice": null,
"directBuy": null,
"directBuyPrice": null,
"validPrice": null,
"currentPrice": null,
"bidTime": null,
"price": 800,
"bargaining": true,
"autoRefusePrice": null,
"amount": 1,
"auctionTime": null,
"startAuctionTime": null,
"expressInfo": null,
"backup": "",
"crUserId": null,
"status": 2,
"endTime": null,
"createTime": null,
"updateTime": null,
"descCard": null,
"donePrice": null
结果有很多空值,但是有的值又有值,这就比较奇怪了。
通过观察,发现一个特点,如果数据库中的字段名称和这个pojo类中的属性名称一样,比如说,数据库中的是title,属性中也叫title,那么这个值就会正确的赋值。那么另一种情况就是,比如说数据库中叫end_time,但是在pojo类中叫endTime,那么这样的属性就无法正确的赋值,所以得到结论,如果pojo类中的属性名称和字段名称一致,那么就不需要resultMap,反之需要。
所以现在这种情况就需要使用resultMap了,如下:
<result column="direct_buy_price" property="directBuyPrice" jdbcType="DECIMAL" />
<result column="valid_price" property="validPrice" jdbcType="DECIMAL" />
<result column="current_price" property="currentPrice" jdbcType="DECIMAL" />
<result column="bid_time" property="bidTime" jdbcType="INTEGER" />
<result column="price" property="price" jdbcType="DECIMAL" />
<result column="bargaining" property="bargaining" jdbcType="BIT" />
<result column="auto_refuse_price" property="autoRefusePrice" jdbcType="DECIMAL" />
<result column="amount" property="amount" jdbcType="INTEGER" />
<result column="auction_time" property="auctionTime" jdbcType="INTEGER" />
<result column="start_auction_time" property="startAuctionTime" jdbcType="TIMESTAMP" />
<result column="express_info" property="expressInfo" jdbcType="VARCHAR" />
<result column="backup" property="backup" jdbcType="VARCHAR" />
<result column="cr_user_id" property="crUserId" jdbcType="BIGINT" />
<result column="status" property="status" jdbcType="INTEGER" />
<result column="end_time" property="endTime" jdbcType="TIMESTAMP" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP" />
<result column="done_time" property="doneTime" jdbcType="TIMESTAMP" />
把字段从头到尾,进行映射一遍,就可以取到正确的值了。