spring boot mybatis枚舉映射示例代碼
前言
在mybatis和mybatis plus里,如果你的實(shí)體字段是一個(gè)枚舉類型,而在數(shù)據(jù)表里是整型,這時(shí)在存儲(chǔ)時(shí)需要進(jìn)行處理,默認(rèn)情況下,會(huì)把枚舉的元素名稱拼接到SQL語句里,而由于數(shù)據(jù)表是int類型,所以在插入等操作時(shí),就會(huì)出現(xiàn)異常!
添加枚舉處理器
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; } }
在實(shí)體中定義枚舉類型字段
/** * 是否為國民. */ 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), 段會(huì)濤(String), 130523199011111219(String), 1(Integer), 2019-09-05(Date), 130523199011111219(String), 0(Integer)
從上面結(jié)果中看到,我們的natural_born對(duì)應(yīng)的值已經(jīng)是int類型了,表示處理器成功了!
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
- spring boot 枚舉使用的坑整理
- springboot枚舉類型傳遞的步驟
- SpringBoot實(shí)戰(zhàn)之高效使用枚舉參數(shù)(原理篇)案例詳解
- SpringBoot之使用枚舉參數(shù)案例詳解
- SpringBoot 枚舉類型的自動(dòng)轉(zhuǎn)換的實(shí)現(xiàn)
- springboot+mybatis+枚舉處理器的實(shí)現(xiàn)
- SpringBoot Entity中枚舉類型詳細(xì)使用介紹
- SpringBoot枚舉類型參數(shù)認(rèn)證的實(shí)現(xiàn)代碼
- SpringBoot自定義注解驗(yàn)證枚舉的實(shí)現(xiàn)
相關(guān)文章
解決idea?中?SpringBoot?點(diǎn)擊運(yùn)行沒反應(yīng)按鈕成灰色的問題
在使用 Spring Boot 開發(fā)項(xiàng)目時(shí),可能會(huì)遇到一個(gè)問題:點(diǎn)擊運(yùn)行按鈕后,控制臺(tái)沒有任何輸出,項(xiàng)目界面也沒有顯示,這種情況可能是由多種原因?qū)е碌?,本文將介紹一些常見的解決方法,需要的朋友可以參考下2023-08-08解決使用json-lib包實(shí)現(xiàn)xml轉(zhuǎn)json時(shí)空值被轉(zhuǎn)為空中括號(hào)的問題
網(wǎng)上能查到的xml轉(zhuǎn)json的jar包大部分是net.sf.json-lib,但是JSON json =xmlSerializer.read(xml); 方法會(huì)出現(xiàn)將空值轉(zhuǎn)化為[]的問題,下面為大家提供兩種解決方法2018-03-03SpringCloud?Function?SpEL注入漏洞分析及環(huán)境搭建
SpringCloud 是一套分布式系統(tǒng)的解決方案,常見的還有阿里巴巴的Dubbo,F(xiàn)ass的底層實(shí)現(xiàn)就是函數(shù)式編程,SpringCloud Function 就是Spring提供的分布式函數(shù)式編程組件,下面給大家介紹下SpringCloud?Function?SpEL注入漏洞分析,感興趣的朋友一起看看吧2022-04-04Java使用cxf發(fā)布及調(diào)用webservice接口的方法詳解
今天小編就為大家分享一篇關(guān)于Java使用CXF發(fā)布及調(diào)用WebService接口的方法,文中通過代碼示例給大家介紹的非常詳細(xì),具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2023-08-08SpringBoot @RequestParam、@PathVaribale、@RequestBody實(shí)戰(zhàn)案例
這篇文章主要介紹了SpringBoot @RequestParam、@PathVaribale、@RequestBody實(shí)戰(zhàn)案例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11詳解java接口(interface)在不同JDK版本中的變化
這篇文章主要介紹了詳解java接口(interface)在不同JDK版本中的變化,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02spring整合redis緩存并以注解(@Cacheable、@CachePut、@CacheEvict)形式使用
本篇文章主要介紹了spring整合redis緩存并以注解(@Cacheable、@CachePut、@CacheEvict)形式使用,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-04-04SpringCloud_Sleuth分布式鏈路請(qǐng)求跟蹤的示例代碼
Spring Cloud Sleuth是一款針對(duì)Spring Cloud的分布式跟蹤工具,本文通過實(shí)例代碼介紹了SpringCloud_Sleuth分布式鏈路請(qǐng)求跟蹤,感興趣的朋友跟隨小編一起看看吧2023-02-02