typeHandlers
typeHandlers称做类型处理器。就是实现Java类型和数据库类型之间转换的。 除了系统提供的类型转换器之外,开发者也可以自定义类型转换,如下:
例如List<—>VARCHAR之间的类型转换:
1、创建一个bean
public class Student {
private Integer id;
private String name;
private List<String> game;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getGame() {
return game;
}
public void setGame(List<String> game) {
this.game = game;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", game=" + game + "]";
}
}
2、自定义类型转换器:
@MappedJdbcTypes(JdbcType.VARCHAR)
@MappedTypes(List.class)
public class MyTypeHandler extends BaseTypeHandler<List<String>> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType jdbcType)
throws SQLException {
StringBuilder sb = new StringBuilder();
for (String s : parameter) {
sb.append(s).append(";");
}
String msg = sb.toString();
if (msg.contains(";")) {
msg = sb.toString().substring(0, sb.lastIndexOf(";"));
}
//给占位符设值
ps.setString(i, msg);
}
@Override
public List<String> getNullableResult(ResultSet rs, String columnName) throws SQLException {
String msg = rs.getString(columnName);
return Arrays.asList(msg.split(";"));
}
@Override
public List<String> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
String msg = rs.getString(columnIndex);
return Arrays.asList(msg.split(";"));
}
@Override
public List<String> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
// TODO Auto-generated method stub
return null;
}
}
3、在mybatis-conf.xml配置文件中配置:
<typeHandlers>
<typeHandler handler="com.sxt.typehandler.MyTypeHandler"/>
</typeHandlers>
4、测试:
public class Main {
SqlSession session;
@Before
public void before() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-conf.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
session = sessionFactory.openSession();
}
/**
* 添加一条数据
*/
@Test
public void test() {
StudentMapper mapper = session.getMapper(StudentMapper.class);
Student student = new Student();
student.setName("夯昊");
List<String> list = new ArrayList<String>();
list.add("CF");
list.add("CSGO");
list.add("LOL");
list.add("CS");
student.setGame(list);
int i = mapper.insert(student);
System.out.println(i);
}
/**
* 查询数据
*/
@Test
public void query() {
StudentMapper mapper = session.getMapper(StudentMapper.class);
List<Student> list = mapper.query();
for (Student student : list) {
System.out.println(student);
}
}
@After
public void after() {
session.commit();
session.close();
}
}
5、结果:
添加结果:
查询结果: