Mybatisplus如何存儲List、Map
一、前提概要
1.1 支持環(huán)境
數(shù)據(jù)庫支持:MySql版本要求 5.7+
1.2 需求場景
使用MySQL數(shù)據(jù)庫存儲時,由于業(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ù)庫表名",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ù)庫表名", autoResultMap = true) @TableField(typeHandler = ObjectToJacksonHandler.class)
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
java poi設(shè)置生成的word的圖片為上下型環(huán)繞以及其位置的實(shí)現(xiàn)
這篇文章主要介紹了java poi設(shè)置生成的word的圖片為上下型環(huán)繞以及其位置的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
SpringBoot+Netty實(shí)現(xiàn)簡單聊天室的示例代碼
這篇文章主要介紹了如何利用SpringBoot Netty實(shí)現(xiàn)簡單聊天室,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)SpringBoot有一定幫助,感興趣的同學(xué)可以了解一下2022-02-02
Mybatis分頁P(yáng)ageHelper插件代碼實(shí)例
這篇文章主要介紹了Mybatis分頁P(yáng)ageHelper插件代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-12-12
Spring + Mybatis 項目實(shí)現(xiàn)動態(tài)切換數(shù)據(jù)源實(shí)例詳解
這篇文章主要介紹了Spring + Mybatis 項目實(shí)現(xiàn)動態(tài)切換數(shù)據(jù)源的相關(guān)資料,需要的朋友參考下吧2017-04-04
Java Swing實(shí)現(xiàn)讓窗體居中顯示的方法示例
這篇文章主要介紹了Java Swing實(shí)現(xiàn)讓窗體居中顯示的方法,結(jié)合實(shí)例形式分析了swing使用setBounds方法控制窗口布局的相關(guān)操作技巧,需要的朋友可以參考下2017-11-11
Java Synchronize下的volatile關(guān)鍵字詳解
這篇文章主要介紹了Java Synchronize下的volatile關(guān)鍵字詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
Java對象池pool2分析PooledObjectFactory過程
文章介紹了Java中對象池化技術(shù)的背景,以Apache的Pool2庫為例,詳細(xì)講解了GenericObjectPool的構(gòu)造函數(shù)參數(shù)和PooledObjectFactory接口的實(shí)現(xiàn),通過商場里的共享充電寶的比喻,說明了池化思維的應(yīng)用2025-02-02

