Mybatis Plus使用條件構(gòu)造器增刪改查功能的實(shí)現(xiàn)方法
java后端層級結(jié)構(gòu)
Controller 接口層
接口層比較好理解,它是面向web網(wǎng)絡(luò)的接口,使用http格式去調(diào)用
/**
* 圖文課程管理Controller
*/
@RestController
@RequestMapping("/driver/imageCourse")
public class TImageCourseController extends BaseController {
@Autowired
private ITImageCourseService tImageCourseService;
@Autowired
private TImageCourseMapper tImageCourseMapper;
// 具體接口...
}
Service 業(yè)務(wù)層
在實(shí)際應(yīng)用中,更復(fù)雜的邏輯應(yīng)該寫在 Service 業(yè)務(wù)層方法中,在業(yè)務(wù)方法中再調(diào)用數(shù)據(jù)層方法,實(shí)現(xiàn)從 接口層-業(yè)務(wù)層-數(shù)據(jù)層 的鏈路調(diào)用關(guān)系,提高代碼的可讀性
/**
* 圖文課程管理Service接口
*/
public interface ITImageCourseService extends IService<TImageCourse> {
}
業(yè)務(wù)層實(shí)現(xiàn)
/**
* 圖文課程管理Service業(yè)務(wù)層處理
*/
@Service
public class TImageCourseServiceImpl extends ServiceImpl<TImageCourseMapper, TImageCourse> implements ITImageCourseService {
@Autowired
private TImageCourseMapper tImageCourseMapper;
}
ServiceImpl 類實(shí)現(xiàn)了 IService 接口中的方法;ServiceImpl 中的方法,本質(zhì)上是對 BaseMapper 方法的封裝,同時(shí)也增加了一些 BaseMapper 類中沒有的特性,例如常用的 list() 、count() 方法
// Service方法調(diào)用了Mapper方法 只是將insert()返回轉(zhuǎn)換成了布爾值
@Override
public boolean save(T entity) {
return retBool(baseMapper.insert(entity));
}
Mapper 數(shù)據(jù)層
繼承 BaseMapper 接口后,無需編寫 mapper.xml 文件,即可獲得CRUD功能;例如,insert() 、 deleteById() 、updateById() 、 selectById() 等方法
如果手動編寫數(shù)據(jù)層的sql,BaseMapper實(shí)現(xiàn)者即對應(yīng)xml中的sql方法
/**
* 圖文課程管理Mapper接口
*/
public interface TImageCourseMapper extends BaseMapper<TImageCourse> {
}
**mapper.xml **
xml內(nèi)容例子,該例子自定義了一個(gè)根據(jù)id的查詢方法,無視了刪除標(biāo)志
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.mapper.TRuralInfoMapper">
<resultMap type="TRuralInfo" id="RuralInfoResult">
<id property="id" column="id" />
<result property="cityName" column="city_name" />
<result property="countyName" column="county_name" />
<result property="townName" column="town_name" />
<result property="villageName" column="village_name" />
<result property="checkCode" column="check_code" />
<result property="parentLevel" column="parent_level" />
<result property="parentId" column="parent_id" />
<result property="delFlag" column="del_flag" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
</resultMap>
<sql id="selectRuralInfoVo">
select t_rural_info.id, city_name, county_name, town_name, village_name, check_code, parent_level, parent_id,
t_rural_info.del_flag, t_rural_info.create_by, t_rural_info.create_time, t_rural_info.update_by, t_rural_info.update_time
from t_rural_info
</sql>
<select id="getRuralInfoById" parameterType="Long" resultMap="RuralInfoResult">
<include refid="selectRuralInfoVo"/>
where id = #{id}
</select>
</mapper>
增刪改查
新增(C)
使用 mapper 對象的 insert() 方法新增一條記錄,成果后會將數(shù)據(jù)庫的id返回給實(shí)體
/**
* 新增圖文課程管理
*/
@PostMapping
public AjaxResult add(@RequestBody TImageCourse tImageCourse)
{
...
return toAjax(tImageCourseMapper.insert(tImageCourse));
}
saveBatch
service 類中提供了 saveBatch() 方法,可實(shí)現(xiàn)批量插入,該方法是支持事務(wù)
saveOrUpdate
service 類中提供了 saveOrUpdate() 方法,如果id為空則調(diào)用 save() 方法保存,反之則調(diào)用 updateById() 方法更新
查詢(R)
查詢多數(shù)要借助條件構(gòu)造器使用才有意義,實(shí)現(xiàn)更靈活的查詢;
查詢實(shí)體
常用的方法有 .getOne() ,getById() ;
.getOne() 接收一個(gè)條件構(gòu)造器作為參數(shù)
getById() 根據(jù)id進(jìn)行查詢實(shí)體
查詢集合
常用的查詢方法包括 .list(),
.list() 方法也可以接收一個(gè)條件構(gòu)造器作為參數(shù)
構(gòu)造器的使用
條件構(gòu)造器包含 QueryWrapper 和 LambdaQueryWrapper 兩個(gè)類。
LambdaQueryWrapper 為函數(shù)式編程的書寫習(xí)慣,與 QueryWrapper 表達(dá)的意義相同,優(yōu)點(diǎn)是簡化了代碼。
此處以 LambdaQueryWrapper 的使用為例,常用的三種方法:
// 1、直接用new創(chuàng)建 // 創(chuàng)建對象的方式會更加靈活,可配合 if()...else 達(dá)到更靈活的sql拼接 LambdaQueryWrapper<TCenterPoint> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(TCenterPoint::getPoint, 10.0); // 2、靜態(tài)方法創(chuàng)建 Wrappers.<>lambdaQuery() // 構(gòu)造器方法多為鏈?zhǔn)骄幊?可連寫 Wrappers.<TCenterPoint>lambdaQuery().eq(TCenterPoint::getPoint, 10.0) // 3、靜態(tài)方法創(chuàng)建 Wrappers.query() // query可接受對象 字段不為null則自動拼接.eq()方法 Wrappers.query(tUserDetail)
構(gòu)造器方法
/** * 源碼 * @param condition 執(zhí)行條件 可省略 * @param column 字段 * @param val 值 */ eq(boolean condition, R column, Object val)
| eq | 相等 | = |
|---|---|---|
| ne | 不等于 | != |
| gt | 大于 | > |
| ge | 大于等于 | >= |
| lt | 小于 | < |
| le | 小于等于 | <= |
| between | BETWEEN 值1 AND 值2 | |
| like | LIKE ‘%值%' | |
| notLike | NOT LIKE ‘%值%' | |
| likeLeft | LIKE ‘%值' ; | likeRight同理 |
| isNull | 字段 IS NULL; | |
| orderByAsc | 排序:ORDER BY 字段, … ASC; | orderByDesc同理 |
在sql中使用and和or,邏輯只需寫在where中即可,在ORM框架中較為不好理解,總之,其結(jié)果是實(shí)現(xiàn)一個(gè)查詢條件和多個(gè)條件并列的關(guān)系
OR
or(Consumer<Param> consumer) or(boolean condition, Consumer<Param> consumer)
OR 嵌套,例如
// or (name = '李白' and status <> '活著')
or(i -> i.eq("name", "李白").ne("status", "活著"))
AND
and(Consumer<Param> consumer) and(boolean condition, Consumer<Param> consumer)
AND 嵌套,例如
// and (name = '李白' and status <> '活著')
and(i -> i.eq("name", "李白").ne("status", "活著"))
修改(U)
使用 mapper 對象的 updateById() 方法更新實(shí)體,只有字段內(nèi)容不為空,才會觸發(fā)字段內(nèi)容的修改
/**
* 修改圖文課程管理
*/
@PutMapping
public AjaxResult edit(@RequestBody TImageCourse tImageCourse)
{
return toAjax(tImageCourseMapper.updateById(tImageCourse));
}
刪除(D)
刪除常用的方法是根據(jù)id進(jìn)行刪除,使用 mapper 對象的 deleteById ,框架也支持批量刪除的操作 deleteBatchIds
/**
* 刪除圖文課程管理
*/
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids) {
return toAjax(tImageCourseMapper.deleteBatchIds(Arrays.asList(ids)));
}
到此這篇關(guān)于Mybatis-Plus使用條件構(gòu)造器增刪改查的文章就介紹到這了,更多相關(guān)Mybatis Plus條件構(gòu)造器增刪改查內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用HttpClient調(diào)用接口的實(shí)例講解
下面小編就為大家?guī)硪黄褂肏ttpClient調(diào)用接口的實(shí)例講解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10
如何用java程序(JSch)運(yùn)行遠(yuǎn)程linux主機(jī)上的shell腳本
這篇文章主要介紹了如何用java程序(JSch)運(yùn)行遠(yuǎn)程linux主機(jī)上的shell腳本,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-08-08
Java實(shí)現(xiàn)分頁的幾種方法詳細(xì)解析
這篇文章主要介紹了Java實(shí)現(xiàn)分頁的幾種方法詳細(xì)解析,在Java中想實(shí)現(xiàn)分頁功能有幾種常用的方法,今天我們就來詳細(xì)解析一下,文中提供了解決思路和部分實(shí)現(xiàn)代碼,需要的朋友可以參考下2023-11-11
Springboot死信隊(duì)列?DLX?配置和使用思路分析
死信隊(duì)列簡稱就是DLX,死信交換機(jī)和死信隊(duì)列和普通的沒有區(qū)別,當(dāng)消息成為死信后,如果該隊(duì)列綁定了死信交換機(jī),則消息會被死信交換機(jī)重新路由到死信隊(duì)列,本文給大家介紹Springboot死信隊(duì)列?DLX的相關(guān)知識,感興趣的朋友一起看看吧2022-03-03
Java超詳細(xì)教你寫一個(gè)網(wǎng)絡(luò)購書系統(tǒng)案例
這篇文章主要介紹了怎么用Java來寫一個(gè)購書系統(tǒng),購買書籍主要需要每本書的編號、書名、單價(jià)、庫存屬性,能夠讓客戶通過編號來選書,感興趣的朋友跟隨文章往下看看吧2022-03-03
Spring AOP實(shí)現(xiàn)復(fù)雜的日志記錄操作(自定義注解)
Spring AOP實(shí)現(xiàn)復(fù)雜的日志記錄操作(自定義注解),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Post請求參數(shù)是數(shù)組或者List時(shí)的請求處理方式
這篇文章主要介紹了Post請求參數(shù)是數(shù)組或者List時(shí)的請求處理方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05

