项目中用到了ibatis,具体情况如下:
在select元素中配置了它的resultMap属性,这个resultMap对应的class是OrderSearchResultModel,也就是说我的查询结果将用OrderSearchResultModel这个类的实例来进行封装。在我的ibatis的查询中有一个字段叫LEAVEDATE,它在数据库中是DATE型的,我的数据库库是Oracle。OrderSearchResultModel中与它对应的属性叫做arrivedate,那么如何对日期型进行映射呢?arrivedate定义成什么类型好呢?映射片段如下:
………………………………………………………………………………
<result property ="arrivedate" column="arrivedate"/>
………………………………………………………………………………
我尝试了四种情况:
1. arrivedate定义为String,直接查询LEAVEDATE字段
此时在ibatis在对结果进行封装时,相当于直接把LEAVEDATE的值转化成了字符串,就像在java中调用了toString方法一样。
2.arrivedate定义为Date,直接查询LEAVEDATE字段
此时在对结果进行封装时得到的是一个DATE对象,注意此时将arrivedate输出时,它的日期格式是java里面的日期格式,而不是它存放在数据库里面的格式
3.arrivedate定义为String,查询使用to_char(LEAVEDATE,’yyyymmdd’)
此时封装的时候就相当于从字符串映射到字符串,输出arrivedate的格式取决于我们在to_char中设置的格式
4.Arrivedate定义为Date,查询使用to_char(LEAVEDATE,’yyyymmdd’)
这个时候系统会报错,大意就是说从字符串转化为DATE时错误,要求字符串是如下的格式:yyyy-mm-dd hh24:mi:ss。就如同我们在使用SimpleDateFormat的parse方法时,要求所要解析的字符串符合特定的格式。
另外,我想,Ibatis在对数据进行封装的时候可能是把所查询的某个字段的结果作为参数传递给了它对应的属性的set方法。比方说arrivedate属性对应LEAVEDATE字段,那么它就会把LEAVEDATE的值作为作为参数传递给setArrivedate方法