MyBatis怎么把datetime类型中的年份映射成int

MySQL中的类型是datetime, POJO中一个属性是int 类型的year。
我有一个SQL语句像这样select * from xxx where posttime=#{year}
请问怎么映射,SQL语句要怎么改改。

更新:
我谷歌了一下,然后现在这样写的SQL,问题可以解决。但一个SQL语句里用2个YEAR函数,感觉还是怪怪的,也不知道会不会影响效率。请问有更好的办法吗?

<select id="getByYear" resultMap="classmap2">
        SELECT
          cid,
          tid,
          name,
          YEAR(year) as year
        FROM class
        WHERE YEAR(year) = #{year}
</select>
阅读 5.4k
2 个回答

where中尽量不要去对列进行转换,这样会用不到该列的索引,正常的做法是在比较符的右边处理,比如下面这句↓
select * from tb where val/100>1
对应的改法是↓
select * from tb where val>100
说这么多,不知道你是否知道你那个怎么改了没。

`select cid,tid,name,YEAR(year) as year
FROM class
WHERE year >= concat(#{year},'-01-01') and year <= concat(#{year},'-12-31')
`
这样也可以取到#{year}这年的所有数据,又可以用到year列的索引

最简单的是用mysql的的year函数,或者使用mybatis的拦截器自己转换。

推荐问题