欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Mybatis类型转换器使用

发布时间:2024/3/7 编程问答 40 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Mybatis类型转换器使用 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1、mybatis类型转换器,就是Java类型与数据库的类型之间转换的一个中介,由这个转换器可以对类型进行映射,mybatis对于基础类型都有默认类型转换器,你可以自定义类型转换器替代默认的转换器,大多数情况下你无需替代它,但是对于Java中的复杂类型,比如对象想要映射成数据库的json字符串,那么你就可以自定义类型转换器。
mybatis自定义类型转换器可以继承TypeHandler或BaseTypeHandler两个接口,并实现其中的方法。
BaseTypeHandler继承TypeHandler,它们之间的关系使用了设计模式模板方法。

2、下面就以Java中为对象,数据库中为JSON串相互转换作为例子,来对类型转换器进行一个简单的学习。

2.1 数据库有用户表,用户表中每个用户有自己的账号account,account作为JSON串存储。

2.2 在Java中我们定义一个UserVO对象,其中account为一个对象,其他字段都是基础数据类型:

2.3 编写自定义类型转换器,实现Java Accound对象 <---->数据库account字符串 相互转换,即新增时 Java Account Object --> varchar,查询时 varchar —>Java Account Object

@MappedTypes({Account.class}) //指定java中的类型 @MappedJdbcTypes({JdbcType.VARCHAR}) //指定数据库中的数据类型 public class MyTypeHandler<E extends Object> extends BaseTypeHandler<E> {private Class<E> type;public MyTypeHandler(Class<E> type) {if (type == null) {throw new IllegalArgumentException("Type argument cannot be null");}this.type = type;}@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, E parameter, JdbcType jdbcType) throws SQLException {String jsonStr = JSON.toJSONString(parameter);ps.setString(i, jsonStr);}@Overridepublic E getNullableResult(ResultSet rs, String columnName) throws SQLException {String accountStr = rs.getString(columnName);Account account = JSON.parseObject(accountStr, Account.class);return (E) account;}@Overridepublic E getNullableResult(ResultSet rs, int columnIndex) throws SQLException {String accountStr = rs.getString(columnIndex);Account account = JSON.parseObject(accountStr, Account.class);return (E) account;}@Overridepublic E getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {String accountStr = cs.getString(columnIndex);Account account = JSON.parseObject(accountStr, Account.class);return (E) account;} }

2.4 编写完自定义类型处理器,那么编写查询与新增sql,并指定类型处理器即可。

总结

以上是生活随笔为你收集整理的Mybatis类型转换器使用的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。