mysql 枚举文件_Java枚举自动转换存入MySQL

本文介绍如何在SpringBoot项目中使用MyBatis的TypeHandler处理枚举类型,通过自定义StatusHandler实现了枚举与数据库之间的转换,并在实体类DemoEntity中应用Status枚举。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

框架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

首先把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 {

@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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值