栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java > SpringBoot

MyBtais整合Spring Boot整合,TypeHandler对枚举类(enum)处理

SpringBoot 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBtais整合Spring Boot整合,TypeHandler对枚举类(enum)处理

概要
  • 问题描述

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


    

那 Spring Boot 整合 MyBatis 呢?

  • 解决方案

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

  type-handlers-package: com.xxx.handlers

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

枚举类
package com.fengwenyi.learn.java.mybatisenum;


public enum Status {

    LOGIN(100, "在线"),
    LOGOUT(200, "不在线")
    ;

    private Integer code;
    private String msg;

    Status(Integer code, String msg) {
 this.code = code;
 this.msg = msg;
    }

    
    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;



@MappedTypes({Status.class})
public class UserStatusTypeHandler implements TypeHandler {

    @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 modelList = userService.findAll();
    for (UserModel model : modelList) {
 System.out.println(model.toString());
    }
}
数据

测试代码

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

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号