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.3k
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的拦截器自己转换。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题