Mybatis-plus操作json字段實(shí)戰(zhàn)教程
后端動態(tài)列設(shè)計(jì)與實(shí)現(xiàn)三部曲,這是最后一步,使用java語言,結(jié)合mybatis-plus神技操作json字段。
簡單介紹下mybatis-plus,大廠中mybatis使用的非常多,而mybatis-plus是基于mybatis做了擴(kuò)展,進(jìn)一步增強(qiáng),在不影響數(shù)據(jù)存儲的情況下,簡化操作方式。有興趣的朋友可以去官網(wǎng)了解:https://www.baomidou.com/
1、架構(gòu)圖
2、功能
3、表結(jié)構(gòu)
DROP TABLE IF EXISTS user; CREATE TABLE user( id BIGINT(20) NOT NULL COMMENT '主鍵ID', name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', age INT(11) NULL DEFAULT NULL COMMENT '年齡', email VARCHAR(50) NULL DEFAULT NULL COMMENT '郵箱', wallet VARCHAR(3000) NULL DEFAULT NULL COMMENT '錢包', other_info VARCHAR(3000) NULL DEFAULT NULL COMMENT '其他信息', PRIMARY KEY (id) ); INSERT INTO user (id, name, age, email, wallet, other_info) VALUES (1, 'Jone', 18, 'test1@baomidou.com', '{"name": "支付寶錢包","currencyList": [{"type": "USD","amount": 999.19},{"type": "RMB","amount": 1000.19}]}', '{"sex": "男","city": "南昌"}'), (2, 'Jack', 20, 'test2@baomidou.com', '{"name": "微信錢包","currencyList": [{"type": "USD","amount": 888.18},{"type": "RMB","amount": 1000.18}]}', '{"sex": "男","city": "青島"}');
INSERT INTO user (id, name, age, email, wallet, other_info) VALUES (1, 'Jone', 18, 'test1@baomidou.com', '{"name": "支付寶錢包","currencyList": [{"type": "USD","amount": 999.19},{"type": "RMB
(2, 'Jack', 20, 'test2@baomidou.com', '{"name": "微信錢包","currencyList": [{"type": "USD","amount": 888.18},{"type": "RMB","amount": 1000.18}]}', '{"sex": "男","city": "青島"}');
4、實(shí)體定義
package com.baomidou.mybatisplus.samples.typehandler.entity;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler; import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import lombok.Data; import lombok.experimental.Accessors; /**用戶實(shí)體對應(yīng)表 user * @author hubin * @since 2018-08-11 */ @Data @Accessors(chain = true) @TableName(autoResultMap = true) public class User { private Long id; private String name; private Integer age; private String email; /** * 注意?。”仨氶_啟映射注解 * * @TableName(autoResultMap = true) * * 以下兩種類型處理器,二選一 也可以同時存在 * * 注意??!選擇對應(yīng)的 JSON 處理器也必須存在對應(yīng)依賴包 */ @TableField(typeHandler = JacksonTypeHandler.class) private Wallet wallet; @TableField(typeHandler = FastjsonTypeHandler.class) private OtherInfo otherInfo; }
package com.baomidou.mybatisplus.samples.typehandler.entity; import java.util.List; import lombok.Data; /** * 錢包 */ @Data public class Wallet { /** * 名稱 */ private String name; /** * 各種貨幣 */ private List<Currency> currencyList; }
package com.baomidou.mybatisplus.samples.typehandler.entity; import lombok.Data; /** * 貨幣 */ @Data public class Currency { /** * 類型: 人民幣 RMB , 美元 USD */ private String type; /** * 金額 */ private Double amount; }
package com.baomidou.mybatisplus.samples.typehandler.entity; import lombok.Data; /** * 其他信息 */ @Data public class OtherInfo { /** * 性別 */ private String sex; /** * 居住城市 */ private String city; }
5、Dao定義
package com.baomidou.mybatisplus.samples.typehandler.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.samples.typehandler.entity.User; /** * <p> * MP 支持不需要 UserMapper.xml 這個模塊演示內(nèi)置 CRUD 咱們就不要 XML 部分了 * </p> * * @author hubin * @since 2018-08-11 */ public interface UserMapper extends BaseMapper<User> { }
6、類型轉(zhuǎn)換器
package com.baomidou.mybatisplus.samples.typehandler.config; import com.baomidou.mybatisplus.extension.handlers.GsonTypeHandler; import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; /** * @author miemie * @since 2019-11-28 */ @Component public class MpJsonConfig implements CommandLineRunner { /** * 可以set進(jìn)去自己的 */ @Override public void run(String... args) throws Exception { JacksonTypeHandler.setObjectMapper(new ObjectMapper()); GsonTypeHandler.setGson(new Gson()); } }
7、測試
package com.baomidou.mybatisplus.samples.typehandler; import javax.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import com.baomidou.mybatisplus.samples.typehandler.entity.User; import com.baomidou.mybatisplus.samples.typehandler.mapper.UserMapper; /** * <p> * 內(nèi)置 類型處理器 演示 * </p> * * @author hubin * @since 2018-08-11 */ @RunWith(SpringRunner.class) @SpringBootTest public class SampleTest { @Resource private UserMapper userMapper; /** * 自定義類型處理器演示參考 mybatis-plus-sample-deluxe 模塊 */ @Test public void test() { User Jone = userMapper.selectById(1); System.out.println(Jone); System.err.println(Jone.getName()); User Jack = userMapper.selectById(1); System.err.println(Jack.getName()); } }?????
結(jié)果如下:
2020-11-22 12:46:58.164 INFO 3168 --- [ main] c.b.m.samples.typehandler.SampleTest : Started SampleTest in 4.125 seconds (JVM running for 5.707)
2020-11-22 12:46:58.477 DEBUG 3168 --- [ main] c.b.m.s.t.mapper.UserMapper.selectById : ==> Preparing: SELECT id,name,age,email,wallet,other_info FROM user WHERE id=?
2020-11-22 12:46:58.509 DEBUG 3168 --- [ main] c.b.m.s.t.mapper.UserMapper.selectById : ==> Parameters: 1(Integer)
2020-11-22 12:46:58.713 DEBUG 3168 --- [ main] c.b.m.s.t.mapper.UserMapper.selectById : <== Total: 1
User(id=1, name=Jone, age=18, email=test1@baomidou.com, wallet=Wallet(name=支付寶錢包, currencyList=[Currency(type=USD, amount=999.19), Currency(type=RMB, amount=1000.19)]), otherInfo=OtherInfo(sex=男, city=南昌))
2020-11-22 12:46:58.715 DEBUG 3168 --- [ main] c.b.m.s.t.mapper.UserMapper.selectById : ==> Preparing: SELECT id,name,age,email,wallet,other_info FROM user WHERE id=?
2020-11-22 12:46:58.715 DEBUG 3168 --- [ main] c.b.m.s.t.mapper.UserMapper.selectById : ==> Parameters: 2(Integer)
2020-11-22 12:46:58.716 DEBUG 3168 --- [ main] c.b.m.s.t.mapper.UserMapper.selectById : <== Total: 1
User(id=2, name=Jack, age=20, email=test2@baomidou.com, wallet=Wallet(name=微信錢包, currencyList=[Currency(type=USD, amount=888.18), Currency(type=RMB, amount=1000.18)]), otherInfo=OtherInfo(sex=男, city=青島))
2020-11-22 12:46:58.736 INFO 3168 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2020-11-22 12:46:58.747 INFO 3168 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown c
總結(jié),使用mybatis-plus可以提高應(yīng)用程序操作數(shù)據(jù)庫的效率,讓開發(fā)人員專注于業(yè)務(wù)邏輯實(shí)現(xiàn)。在使用mybatis-plus操作json字段的要點(diǎn)主要有:
1、在需要處理的字段上使用@TableField(typeHandler = JacksonTypeHandler.class),同時實(shí)體開啟@TableName(autoResultMap = true)
2、注冊工具類,MpJsonConfig.
mybatis-plus 還有許多很好用的功能,感興趣的朋友可以自己去官網(wǎng)上下看,也可能從github或者gitee上拉取最新代碼,了解它的工作原理,結(jié)合自己的業(yè)務(wù)做一些增強(qiáng)。
到此這篇關(guān)于Mybatis-plus操作json字段實(shí)戰(zhàn)教程的文章就介紹到這了,更多相關(guān)Mybatis-plus操作json字段內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot集成Swagger2項(xiàng)目實(shí)戰(zhàn)
在日常的工作中,我們往往需要給前端(WEB端、IOS、Android)或者第三方提供接口,這個時候我們就需要給他們提供一份詳細(xì)的API說明文檔。這篇文章我們就來分享一種API文檔維護(hù)的方式,即通過Swagger來自動生成Restuful API文檔2018-01-01SpringBoot3+ShardingJDBC5.5.0 讀寫分離配置的實(shí)現(xiàn)
本文主要介紹了SpringBoot3+ShardingJDBC5.5.0 讀寫分離配置的實(shí)現(xiàn),最新版5.5.0支持SpringBoot3x現(xiàn)分享給大家,具有一定的參考價值,感興趣的可以了解一下2024-08-08Java Web程序中利用Spring框架返回JSON格式的日期
這里我們來介紹一下Java Web程序中利用Spring框架返回JSON格式的日期的方法,前提注意使用@DatetimeFormat時要引入一個類庫joda-time-版本.jar,否則會無法訪問相應(yīng)路徑2016-05-05Spring HandlerInterceptor實(shí)現(xiàn)原理代碼解析
這篇文章主要介紹了Spring HandlerInterceptor實(shí)現(xiàn)原理代碼解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10SpringBoot中實(shí)現(xiàn)定時任務(wù)的幾種方式
定時任務(wù)在我們項(xiàng)目開發(fā)中也是很重要的,對于某些場景必須要用定時任務(wù)?,如定時發(fā)送郵件啊,定時統(tǒng)計(jì)數(shù)據(jù)等,這篇文章主要講講項(xiàng)目中實(shí)現(xiàn)定時任務(wù)的幾種方式,需要的朋友可以參考下2023-05-05Spring?cloud?OpenFeign中動態(tài)URl、動態(tài)傳遞接口地址代碼示例
openFeign是作為微服務(wù)之間調(diào)用的解決方案,每個微服務(wù)項(xiàng)目是必不可少的,下面這篇文章主要給大家介紹了關(guān)于Spring?cloud?OpenFeign中動態(tài)URl、動態(tài)傳遞接口地址的相關(guān)資料,需要的朋友可以參考下2024-02-02drools規(guī)則動態(tài)化實(shí)踐解析
這篇文章主要為大家介紹了drools規(guī)則動態(tài)化實(shí)踐解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02