美文网首页
MyBtais整合Spring Boot整合,TypeHandl

MyBtais整合Spring Boot整合,TypeHandl

作者: 冯文议 | 来源:发表于2018-06-24 17:52 被阅读903次

    概要

    • 问题描述

    我想用枚举类来表示用户当前状态,枚举类由 codemsg 组成,但我只想把 code 保存到数据库,查询处理,能知道用户当前状态,这应该怎么做呢?在 Spring 整合MyBatis 的时候,我们有一个MyBatis的配置文件,我们可以用下面的标签样式指定

    <typeHandlers>
        <typeHandler handler="com.xxx.XxxTypeHandler" javaType="com.xxx.XxxEnum"/>
    </typeHandlers>
    

    Spring Boot 整合 MyBatis 呢?

    • 解决方案

    MyBatis为我们提供了解决方案:你可以集成 BaseTypeHandler,或者实现 TypeHandler。我们需要在应用配置文件中指定handler的路径

      type-handlers-package: com.xxx.handlers
    

    另外,我们需要在Handler上添加注解,指明枚举类(enum)。

    枚举类

    package com.fengwenyi.learn.java.mybatisenum;
    
    /**
     * @author Wenyi Feng
     */
    public enum Status {
    
        LOGIN(100, "在线"),
        LOGOUT(200, "不在线")
        ;
    
        private Integer code;
        private String msg;
    
        Status(Integer code, String msg) {
            this.code = code;
            this.msg = msg;
        }
    
        /**
         * 通过 code 获取 Status
         * @param code
         * @return
         */
        public static Status getStatusByCode(Integer code) {
            switch (code) {
                case 100:
                    return LOGIN;
                case 200:
                    return LOGOUT;
                default:
                    return LOGOUT;
            }
        }
    
        // getter
    }
    

    TypeHandler

    package com.fengwenyi.learn.java.mybatisenum.handlers;
    
    import com.fengwenyi.learn.java.mybatisenum.Status;
    import org.apache.ibatis.type.JdbcType;
    import org.apache.ibatis.type.MappedTypes;
    import org.apache.ibatis.type.TypeHandler;
    
    import java.sql.CallableStatement;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    /**
     * @author Wenyi Feng
     */
    
    @MappedTypes({Status.class})
    public class UserStatusTypeHandler implements TypeHandler<Status> {
    
        @Override
        public void setParameter(PreparedStatement preparedStatement, int i, Status status, JdbcType jdbcType) throws SQLException {
            preparedStatement.setInt(i, status.getCode());
        }
    
        @Override
        public Status getResult(ResultSet resultSet, String s) throws SQLException {
            Integer code = resultSet.getInt(s);
            return Status.getStatusByCode(code);
        }
    
        @Override
        public Status getResult(ResultSet resultSet, int i) throws SQLException {
            Integer code = resultSet.getInt(i);
            return Status.getStatusByCode(code);
        }
    
        @Override
        public Status getResult(CallableStatement callableStatement, int i) throws SQLException {
            Integer code = callableStatement.getInt(i);
            return Status.getStatusByCode(code);
        }
    }
    

    application.yml

    spring:
      datasource:
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/learn
        username: root
        password: xfsy2018
    mybatis:
      type-aliases-package: com.fengwenyi.learn.java.mybatisenum.model
      mapper-locations: classpath:mapper/*.xml
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
      type-handlers-package: com.fengwenyi.learn.java.mybatisenum.handlers
    

    测试

    @Autowired
    private IUserService userService;
    
    @Test
    public void contextLoads() {
    
        // find();
        insert();
    }
    
    private void insert() {
        UserModel model = new UserModel();
        model.setStatus(Status.LOGIN);
        boolean rs = userService.save(model);
        System.out.println(rs);
    }
    
    private void find() {
        List<UserModel> modelList = userService.findAll();
        for (UserModel model : modelList) {
            System.out.println(model.toString());
        }
    }
    

    数据

    查询结果 数据库

    测试代码

    https://github.com/fengwenyi/JavaLearnProject/tree/master/mybatis-enum

    相关文章

      网友评论

          本文标题:MyBtais整合Spring Boot整合,TypeHandl

          本文链接:https://www.haomeiwen.com/subject/udlsyftx.html