Mybaits配置文件属性typeHandlers
将各种类型的参数设值到sql语句中,从sql查询结果集中获取各种类型的java类型。
mybaits帮助我们完成了一些基本的java与数据库类型之间的转化。
但一些复杂的java类型与数据库数据类型的转化,我们需要自定义转化处理类,并配置到配置文件中,才能实现复杂的类型转化。
比如我们要完成 List<String>
与 vachar
之间的转化
pojo类 User
public class User {
private Integer id;
private String name;
private Integer age;
private List<String> games;
转化处理类ListAndStringTypeHandler
package com.bb.typehandler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
/**
* 类型处理器
* List类型和String类型的相互转换
* @author Administrator
*
*/
@MappedJdbcTypes(JdbcType.VARCHAR)
@MappedTypes(List.class)
public class ListAndStringTypeHandler extends BaseTypeHandler<List<String>>{
/**
* 用来实现 List到varchar的转换
* PreparedStatement ps = conn.prepareStatement(sql);
* ps.setObject(1,2);
* ps.setObject(2,"张三");
* ps.setObject(3,18);
* ps.setObject(4,List集合);
* ps.executeUpdate();
*
* aa bb cc
* aabbcc aa;bb;cc
*/
@Override
public void setNonNullParameter(PreparedStatement ps, int i, List<String> list, JdbcType jdbcType)
throws SQLException {
StringBuilder sb = new StringBuilder();
for (String s : list) {
sb.append(s);
sb.append(";");
}
String msg = sb.toString();
ps.setString(i, msg.substring(0, msg.length()-1));
}
/**
* 根据方法提供的形参 获取到String类型的数据
* 显示的转换为List
*/
@Override
public List<String> getNullableResult(ResultSet rs, String columnName) throws SQLException {
String msg = rs.getString(columnName);
if(msg == null){
return null;
}
String[] games = msg.split(";");
return Arrays.asList(games);
}
@Override
public List<String> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
String msg = rs.getString(columnIndex);
if(msg == null){
return null;
}
String[] games = msg.split(";");
return Arrays.asList(games);
}
/**
* 存储过程的调用
*/
@Override
public List<String> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
// TODO Auto-generated method stub
return null;
}
}
mybatis-cfg.xml 配置
<typeHandlers>
<typeHandler handler="com.bb.typehandler.ListAndStringTypeHandler"/>
</typeHandlers>
测试一下 打印输出
项目打包 提取码:eqyy
环境:eclipse,maven