Mybatisplus如何存儲(chǔ)List、Map
一、前提概要
1.1 支持環(huán)境
數(shù)據(jù)庫(kù)支持:MySql版本要求 5.7+
1.2 需求場(chǎng)景
使用MySQL數(shù)據(jù)庫(kù)存儲(chǔ)時(shí),由于業(yè)務(wù)要求實(shí)體類中特定字段需要使用 自定義類型或者List、Map類型。
二、需求實(shí)現(xiàn)
2.1 非自定義數(shù)據(jù)類型,List、Map
首先:在需要轉(zhuǎn)換的實(shí)體類字段上加上:
@TableField(typeHandler = JacksonTypeHandler.class)
接著:在該實(shí)體類上修改 @TableName
@TableName(value = "數(shù)據(jù)庫(kù)表名",autoResultMap = true)
2.2 自定義類型數(shù)據(jù)類型
引入依賴:
<properties> <jackson-core.version>2.12.6</jackson-core.version> <jackson-databind.version>2.12.7.1</jackson-databind.version> <jackson-annotations.version>2.15.2</jackson-annotations.version> </properties> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${jackson-core.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson-databind.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>${jackson-annotations.version}</version> </dependency>
首先定義數(shù)據(jù)處理工具類:
@Component public class ObjectToJackson { private static ObjectMapper mapper; @Resource public void setMapper(ObjectMapper mapper) { ObjectToJackson.mapper = mapper; } public static <T> String objectToJson(T o) { try { return ObjectToJackson.mapper.writeValueAsString(o); } catch (Exception e) { e.printStackTrace(); throw new ServerException(500); } } public static <T> T jsonToObject(String s, TypeReference<T> typeReference) { if (s == null) { return null; } try { return ObjectToJackson.mapper.readValue(s, typeReference); } catch (JsonProcessingException e) { e.printStackTrace(); throw new ServerException(500); } } }
接著定義自己的轉(zhuǎn)化規(guī)則:
public class ObjectToJacksonHandler extends BaseTypeHandler<Object> { @Override public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException { String json = ObjectToJackson.objectToJson(parameter); ps.setString(i, json); } @Override public Object getNullableResult(ResultSet rs, String columnName) throws SQLException { String string = rs.getString(columnName); return ObjectToJackson.jsonToObject(string, new TypeReference<>() { }); } @Override public Object getNullableResult(ResultSet rs, int columnIndex) throws SQLException { String string = rs.getString(columnIndex); return ObjectToJackson.jsonToObject(string, new TypeReference<>() { }); } @Override public Object getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { String string = cs.getString(columnIndex); return ObjectToJackson.jsonToObject(string, new TypeReference<>() { }); } }
使用:
@TableName(value = "數(shù)據(jù)庫(kù)表名", autoResultMap = true) @TableField(typeHandler = ObjectToJacksonHandler.class)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)PIFrame窗體效果的示例代碼
在很多現(xiàn)代應(yīng)用中,常常需要使用個(gè)性化的窗體外觀,擺脫傳統(tǒng)窗口邊框的限制,無(wú)邊框、透明、圓角和陰影效果使得窗體顯得更輕巧、更具視覺吸引力,同時(shí)允許用戶自由拖拽和停靠窗體,所以本文給大家介紹了如何使用Java實(shí)現(xiàn)PIFrame窗體效果,需要的朋友可以參考下2025-03-03SpringBoot實(shí)現(xiàn)國(guó)際化的操作步驟
國(guó)際化(Internationalization) 是指為了適應(yīng)不同語(yǔ)言、文化和地區(qū)的用戶,使軟件能夠方便地進(jìn)行本地化修改的過程,本文介紹了SpringBoot 國(guó)際化功能的簡(jiǎn)單使用,感興趣的朋友可以參考下2024-02-02MyBatis中${}?和?#{}?有什么區(qū)別小結(jié)
${}?和?#{}?都是?MyBatis?中用來替換參數(shù)的,它們都可以將用戶傳遞過來的參數(shù),替換到?MyBatis?最終生成的?SQL?中,但它們區(qū)別卻是很大的,今天通過本文介紹下MyBatis中${}?和?#{}?有什么區(qū)別,感興趣的朋友跟隨小編一起看看吧2022-11-11Java實(shí)現(xiàn)md5和base64加密解密的示例代碼
這篇文章主要介紹了Java實(shí)現(xiàn)md5和base64加密解密的示例代碼,幫助大家更好的利用Java加密解密文件,感興趣的朋友可以了解下2020-09-09