Mybatis-plus操作json字段實(shí)戰(zhàn)教程
后端動(dòng)態(tài)列設(shè)計(jì)與實(shí)現(xiàn)三部曲,這是最后一步,使用java語(yǔ)言,結(jié)合mybatis-plus神技操作json字段。
簡(jiǎn)單介紹下mybatis-plus,大廠中mybatis使用的非常多,而mybatis-plus是基于mybatis做了擴(kuò)展,進(jìn)一步增強(qiáng),在不影響數(shù)據(jù)存儲(chǔ)的情況下,簡(jiǎn)化操作方式。有興趣的朋友可以去官網(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 '錢(qián)包', 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": "支付寶錢(qián)包","currencyList": [{"type": "USD","amount": 999.19},{"type": "RMB","amount": 1000.19}]}', '{"sex": "男","city": "南昌"}'), (2, 'Jack', 20, 'test2@baomidou.com', '{"name": "微信錢(qián)包","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": "支付寶錢(qián)包","currencyList": [{"type": "USD","amount": 999.19},{"type": "RMB
(2, 'Jack', 20, 'test2@baomidou.com', '{"name": "微信錢(qián)包","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í)體對(duì)應(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; /** * 注意!!必須開(kāi)啟映射注解 * * @TableName(autoResultMap = true) * * 以下兩種類型處理器,二選一 也可以同時(shí)存在 * * 注意?。∵x擇對(duì)應(yīng)的 JSON 處理器也必須存在對(duì)應(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; /** * 錢(qián)包 */ @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 這個(gè)模塊演示內(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、測(cè)試
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=支付寶錢(qián)包, 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=微信錢(qián)包, 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ù)庫(kù)的效率,讓開(kāi)發(fā)人員專注于業(yè)務(wù)邏輯實(shí)現(xiàn)。在使用mybatis-plus操作json字段的要點(diǎn)主要有:
1、在需要處理的字段上使用@TableField(typeHandler = JacksonTypeHandler.class),同時(shí)實(shí)體開(kāi)啟@TableName(autoResultMap = true)
2、注冊(cè)工具類,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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot集成Swagger2項(xiàng)目實(shí)戰(zhàn)
在日常的工作中,我們往往需要給前端(WEB端、IOS、Android)或者第三方提供接口,這個(gè)時(shí)候我們就需要給他們提供一份詳細(xì)的API說(shuō)明文檔。這篇文章我們就來(lái)分享一種API文檔維護(hù)的方式,即通過(guò)Swagger來(lái)自動(dòng)生成Restuful API文檔2018-01-01SpringBoot3+ShardingJDBC5.5.0 讀寫(xiě)分離配置的實(shí)現(xiàn)
本文主要介紹了SpringBoot3+ShardingJDBC5.5.0 讀寫(xiě)分離配置的實(shí)現(xiàn),最新版5.5.0支持SpringBoot3x現(xiàn)分享給大家,具有一定的參考價(jià)值,感興趣的可以了解一下2024-08-08Java Web程序中利用Spring框架返回JSON格式的日期
這里我們來(lái)介紹一下Java Web程序中利用Spring框架返回JSON格式的日期的方法,前提注意使用@DatetimeFormat時(shí)要引入一個(gè)類庫(kù)joda-time-版本.jar,否則會(huì)無(wú)法訪問(wèn)相應(yīng)路徑2016-05-05Spring HandlerInterceptor實(shí)現(xiàn)原理代碼解析
這篇文章主要介紹了Spring HandlerInterceptor實(shí)現(xiàn)原理代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10SpringBoot中實(shí)現(xiàn)定時(shí)任務(wù)的幾種方式
定時(shí)任務(wù)在我們項(xiàng)目開(kāi)發(fā)中也是很重要的,對(duì)于某些場(chǎng)景必須要用定時(shí)任務(wù)?,如定時(shí)發(fā)送郵件啊,定時(shí)統(tǒng)計(jì)數(shù)據(jù)等,這篇文章主要講講項(xiàng)目中實(shí)現(xiàn)定時(shí)任務(wù)的幾種方式,需要的朋友可以參考下2023-05-05Spring?cloud?OpenFeign中動(dòng)態(tài)URl、動(dòng)態(tài)傳遞接口地址代碼示例
openFeign是作為微服務(wù)之間調(diào)用的解決方案,每個(gè)微服務(wù)項(xiàng)目是必不可少的,下面這篇文章主要給大家介紹了關(guān)于Spring?cloud?OpenFeign中動(dòng)態(tài)URl、動(dòng)態(tài)傳遞接口地址的相關(guān)資料,需要的朋友可以參考下2024-02-02drools規(guī)則動(dòng)態(tài)化實(shí)踐解析
這篇文章主要為大家介紹了drools規(guī)則動(dòng)態(tài)化實(shí)踐解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02