今天在工作中遇到一个问题,公司使用了一个自定义的类型:Money,而数据库是没有这种类型的,对应的数据库字段的类型为BigDecimal. 开始时,我没在意这个问题,按照一般的作法写好SQLMAP,运行,发现出了问题,后来仔细一想,发现了这个自定义类型Money的问题,在Ibatis 里,是没有默认的方法可以解析或映射我们的自定义类型的.
那怎么办呢,经常一番Google,以及我的聪明才智,最后完美了解决了一个问题.
在Ibatis中,已经提供了解决方案,就是使用Ibatis的TypeHandler , 这种方法呢,其实应该说是有点繁琐,但是,没办法,只能这么做了.
具体办法如下:(本文原创文章,转载时请注明文章来源:巴士飞扬技术博客:原文地址: http://www.busfly.cn/post/Ibatis-java-sql-sqlmap-class.html )
第一步:添加自定义类型Money的TypeHandler类.................................
好了,这个类就写好了,如果还不熟悉的,可以再去看看Ibatis自带的常用类型映射到SqlMap的类(全部在Ibatis包 的:com.ibatis.sqlmap.engine.type包下),如 BigDecimalTypeHandler,BooleanTypeHandler,ByteArrayTypeHandler,ByteTypeHandler,DoubleTypeHandler 等等,里面很多的.
当然也不只能按照上面这么方法写,在看了Ibatis包的:com.ibatis.sqlmap.engine.type包下的类时,发现还有其它的写法,这里就不详细介绍了,但是其写法的麻烦程度不在这个方法之下,有兴趣的朋友可以去看看.
第二步:在你的SQLMAP映射文件里,在相应的映射字段后面都加上 typeHandler="com.*.*.*.util.MoneyTypeHandler" , 如下:................................
好了,这样两步走就OK了,思路很清晰,说麻烦也不麻烦,说不麻烦,其实也还是很麻烦的,在SQL映射文件里,每个用到这个类型的地方都要进行上面的写法,但是,不管怎样,目前来说,只能这么做了.
Tags:
ibatis JAVA SQL