一 概述
对于jdbc 中PrepareStatement ResultSet都需要对数据库类型和java中数据类型进行转换,mybatis启动时已经加载了我们所需类型处理器如下:
二 自定义类型处理器
现在有个需求把文档状态(是枚举类型)中的code存入数据库(枚举类型和数据类型的转换)
自定义类型处理器有两种方式:
a 实现TypeHandler接口
b 继承BaseTypeHandler抽象类
(1)文档实体类:
@Data @AllArgsConstructor @NoArgsConstructor public class Document { private String title; private DocStatus status; }
(2)枚举类,插入操作时候将文档状态code存入数据库,列如Ok中的1
public enum DocStatus { OK(1), ERROR(2); int code; DocStatus(int code) { this.code=code; } public int getCode() { return code; } public void setCode(int code) { this.code = code; } }
(3)TypeHandler实现类的编写
public class DocumentTypeHandler implements TypeHandler<DocStatus> { @Override public void setParameter(PreparedStatement ps, int i, DocStatus parameter, JdbcType jdbcType) throws SQLException {
//做了处理 ps.setInt(i, parameter.getCode()); } @Override public DocStatus getResult(ResultSet rs, String columnName) throws SQLException {
return null; } @Override public DocStatus getResult(ResultSet rs, int columnIndex) throws SQLException { return null; } @Override public DocStatus getResult(CallableStatement cs, int columnIndex) throws SQLException { return null; } }
(4)xml文件中使用上面的类型处理器
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dp.ssm.dao.DocumentDao"> <insert id="saveDocument" parameterType="com.dp.ssm.entity.Document"> insert into document (title,status) values (#{title},#{status,typeHandler=com.dp.ssm.config.DocumentTypeHandler}) </insert> </mapper>
测试:
@Test public void test2() throws IOException { SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml")); SqlSession sqlSession=sqlSessionFactory.openSession(); Document document=new Document("test",DocStatus.OK); DocumentDao documentDao=sqlSession.getMapper(DocumentDao.class); documentDao.saveDocument(document); sqlSession.commit(); }
测试结果如下:
mybatis类型处理器TypeHandler(自定义类型处理器)
原文:https://www.cnblogs.com/kjcc/p/14441538.html