spring boot mybatis枚举映射示例代码
2019-10-18 18:06
2763 查看
前言
在mybatis和mybatis plus里,如果你的实体字段是一个枚举类型,而在数据表里是整型,这时在存储时需要进行处理,默认情况下,会把枚举的元素名称拼接到SQL语句里,而由于数据表是int类型,所以在插入等操作时,就会出现异常!
添加枚举处理器
MappedTypes(value = {YesOrNo.class}) public class UniversalEnumHandler<E extends Enum<E> & BaseEnum> extends BaseTypeHandler<E> { private final Class<E> type; /** * construct with parameter. */ public UniversalEnumHandler(Class<E> type) { if (type == null) { throw new IllegalArgumentException("Type argument cannot be null"); } this.type = type; } @Override public void setNonNullParameter(PreparedStatement ps, int i, E parameter, JdbcType jdbcType) throws SQLException { ps.setInt(i, parameter.getCode()); } @Override public E getNullableResult(ResultSet rs, String columnName) throws SQLException { int code = rs.getInt(columnName); return rs.wasNull() ? null : EnumUtils.codeOf(this.type, code); } @Override public E getNullableResult(ResultSet rs, int columnIndex) throws SQLException { int code = rs.getInt(columnIndex); return rs.wasNull() ? null : EnumUtils.codeOf(this.type, code); } @Override public E getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { int code = cs.getInt(columnIndex); return cs.wasNull() ? null : EnumUtils.codeOf(this.type, code); } }
在配置文件指定处理器
mybatis-plus: typeHandlersPackage: cn.pilipa.account.cerebrum.client.enums #处理器所在包,我是把枚举处理器放在枚举包里
定义代表枚举键值的接口
public interface BaseEnum<E extends Enum<?>, T> { public Integer getCode(); public String getText(); }
定义一下枚举
public enum YesOrNo implements BaseEnum { Yes(1, "是"), No(0, "否"); private Integer code; private String text; YesOrNo(Integer code, String text) { this.code = code; this.text = text; } @JsonCreator public static YesOrNo jsonCreate(Integer code) { return EnumUtils.codeOf(YesOrNo.class, code); } @Override public Integer getCode() { return this.code; } @Override public String getText() { return this.text; } @JsonValue public Integer getCodeStr() { return this.code; } }
在实体中定义枚举类型字段
/** * 是否为国民. */ private YesOrNo naturalBorn;
生成的SQL语句
==> Preparing: INSERT INTO employee_info ( id, name, credit_number, status, first_time, tax_code, natural_born ) VALUES ( ?, ?, ?, ?, ?, ?, ? ) 2019-09-05 16:56:38.991 DEBUG [accounting-client,,,] 92833 --- [ main] c.p.a.c.c.m.EmployeeInfoMapper.insert : ==> Parameters: 1169534796253630466(Long), 段会涛(String), 130523199011111219(String), 1(Integer), 2019-09-05(Date), 130523199011111219(String), 0(Integer)
从上面结果中看到,我们的natural_born对应的值已经是int类型了,表示处理器成功了!
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。
您可能感兴趣的文章:
相关文章推荐
- java注解演示 映射生成表 示例 来自thinking in java 4 20章部分代码
- struts2静态资源映射代码示例
- mybatis中注解映射SQL示例代码
- Java8Map示例:一个略复杂的数据映射聚合例子及代码重构
- 内存映射文件详解及代码示例
- Mybatis自动生成映射文件和PO对象和调用示例代码工
- Spring Boot利用Lombok减少Java中样板代码的方法示例
- java调用c程序通信示例代码
- ASP.NET 2.0 HttpHandler实现对某种文件类型权限保护(示例代码下载)
- C#实现使用HTTP管道的.NET远程代码示例
- Mybatis结果集自动映射的实例代码
- 使用事务管理抽象API进行事务界定的代码示例
- Vuex完整示例代码
- JS中把字符转成ASCII值的函数示例代码
- iphone开发之通过代理模式实现自定义控件——代码示例图片库的处理
- 本地化中文示例代码需求调查
- ADO.net Entity Framework 示例代码
- Android实现自定义加载框的代码示例
- Qt QFileSystemModel QDirModel 示例代码, 使用方法
- JS 去除Array中的null值示例代码