首页 > 其他 > 详细

mybatis类型处理器TypeHandler(自定义类型处理器)

时间:2021-02-24 23:46:54      阅读:29      评论:0      收藏:0      [点我收藏+]

一  概述

   对于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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!