一.typeHandler简介
在JDBC中,需要在PreparedStatement对象中设置那些已经编译过的SQL语句的参数.执行sql后,会通过ResultSet对象获取得到数据库的数据,而这些Mybatis是根据数据的类型通过typeHandler来实现的.在typeHandler中,分为jdbcType和javaType,其中jdbcType用于定义数据库类型,而javaType用于定义java类型,那么typeHandler的作用就是承担jdbcType和javaType之间的相互转换.
在mybtis中存在系统定义typeHandler和自定义typeHandler.mybatis会根据JavaType和数据库的jdbcType来决定采用哪个typeHandler处理这些转换规则.系统提供的typeHandler能覆盖大部分场景的要求,但是有些情况下是不够的,比如我们有特殊的转换规则.枚举类型就是这样.
二.系统自定义的typeHandler
Mybatis内部定义了许多有用的typeHandler.,这些转换器都在TypeHandlerRegistry类中注册
我们可以在这个类的构造函数中看到内置的typeHandler
三.自定义typeHandler
1.定义一个枚举类型
首先我们需要一个枚举类型
public enum SexEnum {
MALE(1, "男"),
FEMALE(0, "女");
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
SexEnum(int id, String name) {
this.id = id;
this.name = name;
}
public static SexEnum getSexById(int id) {
for (SexEnum sex : SexEnum.values()) {
if (sex.getId() == id) {
return sex;
}
}
return null;
}
}
2.实现typeHandler接口(第一种实现自定义typeHandler的方法)
在mybatis中要自定义typeHandler,其中一种方法是实现org.apache.ibatis.type.TypeHandler接口