相比JDBC,为什么MyBatis需要TypeHandler接口所提供的功能?
MyBatis中的TypeHandler的作用是用于Java与数据库的数据类型转换;
但在JDBC中,貌似并没有涉及到Java和数据库之间的类型转换啊.它们之间的类型转换指的是
什么时间发生的转换?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
数据库类型也有涯, 而Java类型也无涯, 以有涯对无涯, TypeHandler来也.
如果你有一个自己的类型,比如叫MyVersionClass 对应地要存到数据的一个MyVersion(varchar(100))字段里:
保存时, 你想存成这个样子
1.2.3
, 取出来后再还原成MyVersionClass, 这时你就可以定义一个MyVersionTypeHandler帮你在存储和取出时自动完成转换.TypeHandler
一般用于复杂类型的装换,比如你的字段是 JSON 格式,自动转化成 POJO。JDBC 的 API 提供了 Java 与 数据库类型装换,比如
ResultSet
,本人的SF直播中,有详细讲解:
JDBC : https://segmentfault.com/l/15...
MyBatis : https://segmentfault.com/l/15...
正因为JDBC没有涉及到java与数据库之间的类型转化,所以需要TypeHandler.
举个例子吧 IntegerTypeHandler
rs.getInt(columnName);
// rs为ResultSet, 从int转化为Integer。ps.setInt(i, parameter);
// ps为PreparedStatement, 从Integer转化为int。 parameter为Integer类型给你个Date类型好了。
DateOnlyTypeHandler