MybatisPlus如何處理Mysql的json類型_第1頁
MybatisPlus如何處理Mysql的json類型_第2頁
MybatisPlus如何處理Mysql的json類型_第3頁
MybatisPlus如何處理Mysql的json類型_第4頁
MybatisPlus如何處理Mysql的json類型_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第MybatisPlus如何處理Mysql的json類型目錄MybatisPlus處理Mysql的json類型MyBatisPlus-xml中如何使用autoResultMap構造的ResultMapMyBatis-Plus-JacksonTypeHandlerVSFastjsonTypeHandlerMybatisPlus讀寫Mysql的json字段前置條件一、新建mysql表增加json字段二、pojo類三、測試類

MybatisPlus處理Mysql的json類型

1、在數據庫表定義JSON字段;

2、在實體類加上@TableName(autoResultMap=true)、在JSON字段映射的屬性加上@TableField(typeHandler=JacksonTypeHandler.class);

1.實體類中有個屬性是其他對象,或者是List;在數據庫中存儲時使用的是mysql的json格式,此時可以用mybatisplus的一個注解@TableField(typeHandler=JacksonTypeHandler.class)

@TableField(typeHandler=JacksonTypeHandler.class)

這樣在存入是就可以把對象自動轉換為json格式

2.那么取出時怎么進行映射呢,有分為兩種情況

a:當沒有使用到xml時:

@Data

@TableName(value="person",autoResultMap=true)

b:當使用了xml文件時:

resultproperty="advance"column="advance"typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/

MyBatisPlus-xml中如何使用autoResultMap構造的ResultMap

MyBatisPlus有一個很大的缺陷,就是insert和select的時候使用的ResultMap是不同的,修復的辦法就是在實體類上增加注解@TableName(autoResultMap=true)。但是這個autoResultMap并不能使用在自定義的方法上,只在MyBatisPlus內置方法上生效。

展示autoResultMap存在的問題

實體類Person

該實體類中有自定義的typehandler:IntegerListTypeHandler,StringListTypeHandler

@TableName(autoResultMap=true)

publicclassPerson{

privateIntegerid;

privateStringname;

privateIntegerage;

@TableField(typeHandler=IntegerListTypeHandler.class)

privateListIntegerorgIds;

@TableField(typeHandler=StringListTypeHandler.class)

privateListStringhobbies;

}

@Mapper

publicinterfacePersonMapperextendsBaseMapperPerson{

/**

*自定義的根據Id獲取Person的方法,與MyBatis-Plus中的selectById相同的功能(但是不能使用autoResultMap生成的ResultMap).

*/

@Select("SELECT*FROMpersonWHEREid=#{id}")

PersonselectOneById(intid);

}

自定義方法拿不到一些字段

因為Person中的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()));

改進

設置@ResultMap(mybatis-plus_Person)

/**

*設置了ResultMap為`mybatis-plus_Person`后就可以拿到正確的值.

@ResultMap("mybatis-plus_Person")

@Select("SELECT*FROMpersonWHEREid=#{id}")

PersonselectOneById(intid);

命名規(guī)則就是:mybatis-plus_{實體類名}

MyBatisPlus本身并不是一個動態(tài)的ORM,而只是在mybatis初始化的時候,為mybatis提供常用的SQL語句,resultMap設置,并不會改變MyBatis本身的行為

@TableField(typeHandler=IntegerListTypeHandler.class)沒有生效:自定義的方法上沒有配置resultType

MyBatis-Plus-JacksonTypeHandlerVSFastjsonTypeHandler

JacksonTypeHandler

支持MVCJSON解析支持MySQLJSON解析

傳統(tǒng)的方法是通過XMLSQL的resultMap來做typeHandler映射處理,但是這樣會影響MP的功能,所以JacksonTypeHandler正好可以兼容MP的功能和滿足支持MySQLJSON解析。

FastjsonTypeHandler

支持MVCJSON解析不支持MySQLJSON解析

可以通過XML支持,只是會失去MP特性。

resultMapid="rxApiVO"type="RxApiVO"

resultcolumn="api_dataway"property="apiDataway"typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/

/resultMap

注意事項:

MVCJSON解析時,可以不用加@TableName(value=t_test,autoResultMap=true)【高亮部分】,但是MySQLJSON解析查詢的時候,如果不加,查出來為null

MySQLJSON解析查詢時,只支持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;

三、測試類

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("計算機安全技術與方法");

data.setPublisher("計算機技術編輯部出版");

JSONObjectjb=newJSONObject();

jb.put("searchKey","

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論