




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第MybatisPlus如何處理Mysql的json類型目錄MybatisPlus處理Mysql的json類型MyBatisPlus-xml中如何使用autoResultMap構(gòu)造的ResultMapMyBatis-Plus-JacksonTypeHandlerVSFastjsonTypeHandlerMybatisPlus讀寫Mysql的json字段前置條件一、新建mysql表增加json字段二、pojo類三、測(cè)試類
MybatisPlus處理Mysql的json類型
1、在數(shù)據(jù)庫(kù)表定義JSON字段;
2、在實(shí)體類加上@TableName(autoResultMap=true)、在JSON字段映射的屬性加上@TableField(typeHandler=JacksonTypeHandler.class);
1.實(shí)體類中有個(gè)屬性是其他對(duì)象,或者是List;在數(shù)據(jù)庫(kù)中存儲(chǔ)時(shí)使用的是mysql的json格式,此時(shí)可以用mybatisplus的一個(gè)注解@TableField(typeHandler=JacksonTypeHandler.class)
@TableField(typeHandler=JacksonTypeHandler.class)
這樣在存入是就可以把對(duì)象自動(dòng)轉(zhuǎn)換為json格式
2.那么取出時(shí)怎么進(jìn)行映射呢,有分為兩種情況
a:當(dāng)沒有使用到xml時(shí):
@Data
@TableName(value="person",autoResultMap=true)
b:當(dāng)使用了xml文件時(shí):
resultproperty="advance"column="advance"typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/
MyBatisPlus-xml中如何使用autoResultMap構(gòu)造的ResultMap
MyBatisPlus有一個(gè)很大的缺陷,就是insert和select的時(shí)候使用的ResultMap是不同的,修復(fù)的辦法就是在實(shí)體類上增加注解@TableName(autoResultMap=true)。但是這個(gè)autoResultMap并不能使用在自定義的方法上,只在MyBatisPlus內(nèi)置方法上生效。
展示autoResultMap存在的問(wèn)題
實(shí)體類Person
該實(shí)體類中有自定義的typehandler:IntegerListTypeHandler,StringListTypeHandler
@TableName(autoResultMap=true)
publicclassPerson{
privateIntegerid;
privateStringname;
privateIntegerage;
@TableField(typeHandler=IntegerListTypeHandler.class)
privateListIntegerorgIds;
@TableField(typeHandler=StringListTypeHandler.class)
privateListStringhobbies;
}
@Mapper
publicinterfacePersonMapperextendsBaseMapperPerson{
/**
*自定義的根據(jù)Id獲取Person的方法,與MyBatis-Plus中的selectById相同的功能(但是不能使用autoResultMap生成的ResultMap).
*/
@Select("SELECT*FROMpersonWHEREid=#{id}")
PersonselectOneById(intid);
}
自定義方法拿不到一些字段
因?yàn)镻erson中的orgIds和hobbies需要自定義的typeHandler,自定義的方法使用的是resultType=Person,而不是生成的ResultMap,所以都是null
Personperson=newPerson();
person.setAge(1);
person.setName("tim");
person.setOrgIds(Lists.newArrayList(1,2,3));
person.setHobbies(Lists.newArrayList("basketball","pingpong"));
personMapper.insert(person);
#可以得到正確的字段值
PersonpersonInDb=personMapper.selectById(person.getId());
#orgIds和hobbies都為null
personInDb=personMapper.selectOneById(person.getId());
Preconditions.checkArgument(personInDb.getHobbies().equals(person.getHobbies()));
Preconditions.checkArgument(personInDb.getName().equals(person.getName()));
Preconditions.checkArgument(personInDb.getAge().equals(person.getAge()));
Preconditions.checkArgument(personInDb.getOrgIds().equals(person.getOrgIds()));
改進(jìn)
設(shè)置@ResultMap(mybatis-plus_Person)
/**
*設(shè)置了ResultMap為`mybatis-plus_Person`后就可以拿到正確的值.
@ResultMap("mybatis-plus_Person")
@Select("SELECT*FROMpersonWHEREid=#{id}")
PersonselectOneById(intid);
命名規(guī)則就是:mybatis-plus_{實(shí)體類名}
MyBatisPlus本身并不是一個(gè)動(dòng)態(tài)的ORM,而只是在mybatis初始化的時(shí)候,為mybatis提供常用的SQL語(yǔ)句,resultMap設(shè)置,并不會(huì)改變MyBatis本身的行為
@TableField(typeHandler=IntegerListTypeHandler.class)沒有生效:自定義的方法上沒有配置resultType
MyBatis-Plus-JacksonTypeHandlerVSFastjsonTypeHandler
JacksonTypeHandler
支持MVCJSON解析支持MySQLJSON解析
傳統(tǒng)的方法是通過(guò)XMLSQL的resultMap來(lái)做typeHandler映射處理,但是這樣會(huì)影響MP的功能,所以JacksonTypeHandler正好可以兼容MP的功能和滿足支持MySQLJSON解析。
FastjsonTypeHandler
支持MVCJSON解析不支持MySQLJSON解析
可以通過(guò)XML支持,只是會(huì)失去MP特性。
resultMapid="rxApiVO"type="RxApiVO"
resultcolumn="api_dataway"property="apiDataway"typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/
/resultMap
注意事項(xiàng):
MVCJSON解析時(shí),可以不用加@TableName(value=t_test,autoResultMap=true)【高亮部分】,但是MySQLJSON解析查詢的時(shí)候,如果不加,查出來(lái)為null
MySQLJSON解析查詢時(shí),只支持JSON格式:{name:Tom,age:12},不支持:{name:Tom,age:12}和{name:Tom,age:12}
MybatisPlus讀寫Mysql的json字段
前置條件
確保mysql的版本是5.7+
一、新建mysql表增加json字段
二、pojo類
packagecom.cxstar.domain;
importcom.alibaba.fastjson.JSONObject;
importcom.baomidou.mybatisplus.annotation.IdType;
importcom.baomidou.mybatisplus.annotation.TableField;
importcom.baomidou.mybatisplus.annotation.TableId;
importcom.baomidou.mybatisplus.annotation.TableName;
importcom.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
importjava.io.Serializable;
importjava.util.Date;
@lombok.Data
@TableName(autoResultMap=true)
publicclassDataimplementsSerializable{
@TableId(value="id",type=IdType.AUTO)
privateIntegerid;
//部分字段省略
privateStringtitle;
privateStringauthor;
privateStringpublisher;
//
@TableField(typeHandler=FastjsonTypeHandler.class)
privateJSONObjectaggJson;
三、測(cè)試類
packagecom.cxstar;
importcom.alibaba.fastjson.JSONArray;
importcom.alibaba.fastjson.JSONObject;
importcom.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
importcom.cxstar.domain.Data;
importcom.cxstar.domain.SearchMsg;
importcom.cxstar.mapper.DataMapper;
importcom.cxstar.service.OrderService;
importcom.cxstar.service.spider.impl.*;
importcom.cxstar.service.utils.ExecutorThread;
importcom.cxstar.service.utils.SpiderThread;
importcom.cxstar.service.utils.SynContainer;
importorg.junit.jupiter.api.Test;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.boot.test.context.SpringBootTest;
importjava.util.ArrayList;
importjava.util.Date;
importjava.util.UUID;
@SpringBootTest
classOrderApplicationTests{
@Autowired
DataMapperdataMapper;
@Test
voidtestJson(){
//insert
Datadata=newData();
data.setTitle("計(jì)算機(jī)安全技術(shù)與方法");
data.setPublisher("計(jì)算機(jī)技術(shù)編輯部出版");
JSONObjectjb=newJSONObject();
jb.put("searchKey","
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《神經(jīng)影像學(xué)教程》課件
- 《保險(xiǎn)行業(yè)初級(jí)知識(shí)培訓(xùn)》課件
- 2025年井下探放水鉆工技能競(jìng)賽理論考試題庫(kù)(含答案)
- 《路面工程概覽》課件
- 《環(huán)境監(jiān)測(cè)與風(fēng)險(xiǎn)控制》課件
- 《管理者決策實(shí)施》課件
- 《川菜與法式菜》課件
- 智能化標(biāo)準(zhǔn)化廠房建設(shè)商業(yè)計(jì)劃書
- 新型城鎮(zhèn)化戰(zhàn)略實(shí)施路徑與策略探討
- 外向型高技能人才培養(yǎng)策略與實(shí)施路徑
- 2025屆浙江省學(xué)軍、鎮(zhèn)海等名校高考英語(yǔ)二模試卷含解析
- 韋氏測(cè)試題及答案
- 歷年貴州特崗試題及答案
- 2025怎樣正確理解全過(guò)程人民民主的歷史邏輯、實(shí)踐邏輯與理論邏輯?(答案3份)
- 國(guó)家開放大學(xué)《工具書與文獻(xiàn)檢索》形考任務(wù)1-4參考答案及作業(yè)1
- GB/T 45501-2025工業(yè)機(jī)器人三維視覺引導(dǎo)系統(tǒng)通用技術(shù)要求
- 財(cái)務(wù)英文詞匯大全
- 培訓(xùn)課件 -溝通的方法 -溝通訓(xùn)練營(yíng) 脫不花
- 工廠如何消除靜電與防止靜電實(shí)踐篇
- 我學(xué)會(huì)了洗碗作文
- 武漢市住宅專項(xiàng)維修資金使用申請(qǐng)表
評(píng)論
0/150
提交評(píng)論