最近在项目中出现两种情况(因为项目比较早,经历各个版本的改动,所有设计不一致),第一种:数据库中某一字段为Date类型,对应的bean中的类型为java.util.Date,所有在对应的映射中会出现字段和属性类型不匹配为题;第二种情况为数据库中为Date类型,对应的字符串为String类型,这样在映射时也会出现字符类型不匹配的问题。
后来查看了相关资料,对于第一种解决办法是:在对于的属性后面加:Date,使其可以映射为数据库的Date类型。如:#last_date:Date#;第二种的解决办法是在第一种的基础上自己考虑得出应用数据库的转换函数,将String类型转为Date类型;如:to_date(#last_date#,"yyyy-mm-dd")。试想一下,如果出现数据库中为字符类型而 bean为Date类型,也可以用to_char()进行转换,不过这种情况应该比较少。
下面对ibatis中日期和字符串之间的映射做一下总结:
1. bean中定义为String,数据库字段类型为String,直接查询字段
此时在ibatis在对结果进行封装时,相当于直接把值转化成了字符串,就像在java中调用了toString方法一样。
2.bean定义为Date,数据库字段类型为Date,查询使用#last_date:Date#。
此时在对结果进行封装时得到的是一个DATE对象,注意此时将输出时,它的日期格式是java里面的日期格式,而不是它存放在数据库里面的格式。所有要在字段后面加:Date,如:#last_date:Date#。
3.bean定义为Date,数据库字段类型为String,查询使用to_char(#last_date#,’yyyy-mm-dd’)
此时封装的时候就相当于从字符串映射到字符串,输出last_date的格式取决于我们在to_char中设置的格式。
4.bean定义为String,数据库字段类型为Date,查询使用to_date(#last_date#,’yyyy-mm-dd’)
此时封装的时候就相当于日期映射到日期,输出last_date的格式取决于我们在to_date中设置的格式。