Java枚举自动转换存入MySQL

首发于:http://www.meibug.net/service/105.html

框架SpringBoot MyBatis TypeHandler

主要使用mybatis中的TypeHandler接口

在java中使用如下枚举:

public enum Status {
	DELETED(-1, "已删除"),
    NORMAL(1, "正常");
	
	private final int code;
    private final String text;
    
    public int code() {
        return code;
    }

    public String text() {
        return text;
    }

}

java中的entity:

public class DemoEntity{
	private Long id;
	private String name;
	private Integer status;
}

如果我在java中使用枚举不用处理的情况下,存入到数据之前需要手动使用Status.code()获取到枚举的code,然后放入entity,才能获取通过mybatis存入数据库
如果我想在DemoEntity 中直接使用Status枚举,而且mybaits还能够正常存入,这个时候就需要用的TypeHandler

mybaits的相关资料:
http://www.mybatis.org/mybatis-3/zh/configuration.html#typeHandlers

首先把entity修改为:

public class DemoEntity{
	private Long id;
	private String name;
	private Status status;
}

然后创建一个handler实现TypeHandler接口,注意类上方的注解

@MappedTypes(value = Status.class) 这个一定要加

@MappedTypes(value = Status.class)
public class StatusHandler implements TypeHandler<Status> {

    @Override
    public Status getResult(ResultSet rs, String column) throws SQLException {
        return Status.codeOf(rs.getInt(column));
    }

    @Override
    public Status getResult(ResultSet rs, int i) throws SQLException {
        return Status.codeOf(rs.getInt(i));
    }

    @Override
    public Status getResult(CallableStatement cs, int i) throws SQLException {
        return Status.codeOf(cs.getInt(i));
    }

    @Override
    public void setParameter(PreparedStatement ps, int i, Status param, JdbcType jdbcType) throws SQLException {
        ps.setByte(i, (byte)param.code());
    }

}

因为我使用的是SpringBoot 所有我在springboot 中的properties文件中添加mybatis.type-handlers-package属性

mybatis.type-handlers-package=你的handler所在的包

测试一下:插入和查找都OK

参考文章:
https://blog.csdn.net/u014044812/article/details/78258730?ticket=ST-37407-ue2hxKqa95tBi6Xdoayo-passport.csdn.net

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的枚类型可以通过以下步骤将其存储到MySQL中: 1. 在MySQL数据库中创建一个包含枚常量的列,例如: ``` CREATE TABLE example ( id INT NOT NULL AUTO_INCREMENT, enum_col ENUM('VALUE1', 'VALUE2', 'VALUE3'), PRIMARY KEY (id) ); ``` 2. 在Java中定义一个枚类型,并添加一个字段来保存枚常量的值: ``` public enum ExampleEnum { VALUE1("VALUE1"), VALUE2("VALUE2"), VALUE3("VALUE3"); private final String value; ExampleEnum(String value) { this.value = value; } public String getValue() { return value; } } ``` 3. 在Java中使用JDBC将枚类型转换为字符串类型,并将其保存到MySQL中: ``` // 获取数据库连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/example_db", "username", "password"); // 准备SQL语句 String sql = "INSERT INTO example (enum_col) VALUES (?)"; PreparedStatement stmt = conn.prepareStatement(sql); // 将枚类型转换为字符串类型 ExampleEnum exampleEnum = ExampleEnum.VALUE1; String enumValue = exampleEnum.getValue(); // 设置参数并执行SQL语句 stmt.setString(1, enumValue); stmt.executeUpdate(); ``` 4. 在Java中从MySQL中读取枚类型,并将其转换Java中的枚类型: ``` // 准备SQL语句 String sql = "SELECT enum_col FROM example WHERE id = ?"; PreparedStatement stmt = conn.prepareStatement(sql); // 设置参数并执行SQL语句 stmt.setInt(1, 1); ResultSet rs = stmt.executeQuery(); // 读取结果集并将其转换Java中的枚类型 if (rs.next()) { String enumValue = rs.getString("enum_col"); ExampleEnum exampleEnum = ExampleEnum.valueOf(enumValue); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值