自定义类型转换器的有个细节 转化的类记得添加空构造器!
使用枚举类型来自定义一个类型转换器
用到的表
关于性别一列 在数据库存的是数字 查到的时候变为SexEnum的枚举类
两个javabean
package pojo;
public class People {
private int id;
private String name;
private SexEnum sex;
public People() {
//记得写上空构造
}
public People(int id, String name, SexEnum sex) {
super();
this.id = id;
this.name = name;
this.sex = sex;
}
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;
}
public SexEnum getSex() {
return sex;
}
public void setSex(SexEnum sex) {
this.sex = sex;
}
}
package pojo;
/**
* 性别的枚举类
* @author http://blog.csdn.net/thewaiting
*
*/
public enum SexEnum {
MAN(1,"男"), FEMALE(2,"女");
private int value;
private String note;
private SexEnum(int value, String note) {
this.value = value;
this.note = note;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
public static SexEnum getSexEnumById(int sex) {
for(SexEnum sexEnum : SexEnum.values()){
if (sexEnum.getValue() == sex) {
return sexEnum;
}
}
return null;
}
}
建立handler来进行类型转换
package handler;
/**
* 类型转换器
*/
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
import pojo.SexEnum;
public class SexEnumHander implements TypeHandler<SexEnum> {
/**
* 像JDBC一样进行占位并且 当传入SexEnum实例时 使用setInt方法进行类型转换,实现当传入数据库时写的是SexEnum但存的是一个整数
*/
@Override
public void setParameter(PreparedStatement arg0, int arg1, SexEnum arg2, JdbcType arg3) throws SQLException {
arg0.setInt(arg1, arg2.getValue());
}
/**
* 查取的时候如果是列名就用getInt(String column)
*/
@Override
public SexEnum getResult(ResultSet arg0, String arg1) throws SQLException {
return SexEnum.getSexEnumById(arg0.getInt(arg1));
}
/**
* 查取的时候如果是列数就用getInt(int column)
*/
@Override
public SexEnum getResult(ResultSet arg0, int arg1) throws SQLException {
return SexEnum.getSexEnumById(arg0.getInt(arg1));
}
/**
* 查询过程同理
*/
@Override
public SexEnum getResult(CallableStatement arg0, int arg1) throws SQLException {
return SexEnum.getSexEnumById(arg0.getInt(arg1));
}
}
在mybatis-config.xml中进行配置
<typeAliases>
<typeAlias type="pojo.People" alias="people" />
<typeAlias type="pojo.SexEnum" alias="sex" />
<typeAlias type="handler.SexEnumHander" alias="seh"/>
</typeAliases>
<!-- 转换器 -->
<typeHandlers>
<typeHandler handler="seh" javaType = "sex" jdbcType = "INTEGER"/>
</typeHandlers>
控制台输出
1===tom===MAN
2===amy===FEMALE
3===jack===MAN