一反浓、MyBatis-Plus 主要特性
二萌丈、常用的CRUD接口
三赞哗、條件構(gòu)造器
四、MyBatis-Plus 實現(xiàn)表的增刪改查操作示例
一辆雾、MyBatis-Plus 主要特性
(1) MyBatis-Plus 內(nèi)置通用的Mapper和Service肪笋,還有強(qiáng)大的條件構(gòu)造器,支撐起強(qiáng)大的CRUD操作
(2)使用Lamdba表達(dá)式調(diào)用實體類的字段度迂,不需要擔(dān)心字段名寫錯
(3)內(nèi)置代碼生成器藤乙,采用代碼或者 Maven 插件就可以快速生成 Mapper 、 Model 惭墓、 Service 坛梁、 Controller 層代碼
二、常用的CRUD接口
包括Service層和Mapper層的CRUD接口腊凶,可查看官網(wǎng)的詳細(xì)描述
轉(zhuǎn)官網(wǎng)介紹:https://baomidou.com/guide/crud-interface.html#service-crud-%E6%8E%A5%E5%8F%A3
Service層CRUD操作主要是封裝在IService接口里划咐,包括get查詢單行,list查詢集合钧萍,remove刪除褐缠,page分頁等。
Service層CRUD操作的這些前綴命名與Mapper層的CRUD操作有所區(qū)別风瘦,分別對應(yīng)Mapper層CRUD操作:select查詢單行队魏、集合和分頁,delete刪除万搔,封裝在BaseMapper中胡桨。
三、條件構(gòu)造器
MyBatis-Plus提供了Wrapper抽象類瞬雹,支持很多sql語法昧谊,比如查詢,比較挖炬,分組查詢揽浙,排序,子查詢等意敛,方便我們用面向?qū)ο蟮姆绞饺崿F(xiàn)sql語句馅巷。
1、條件構(gòu)造器Wrapper類
Wrapper: 條件構(gòu)造抽象類草姻,最頂端父類
AbstractWrapper: 用于封裝查詢條件钓猬,生成 Sql 的 Where 條件
QueryWrapper: Entity 對象封裝查詢操作類
UpdateWrapper: Update 條件封裝,用于Entity對象更新操作
AbstractLambdaWrapper: Lambda 語法使用 Wrapper 統(tǒng)一處理解析 Lambda 獲取的 Column撩独。
LambdaQueryWrapper:用Lambda語法來使用查詢Wrapper
LambdaUpdateWrapper:用Lambda語法來使用更新Wrapper
2敞曹、條件構(gòu)造器和SQL的對應(yīng)關(guān)系
四账月、MyBatis-Plus 實現(xiàn)表的增刪改查操作示例
準(zhǔn)備工作:先添加MyBatis-Plus 依賴
<!-- SpringBoot集成mybatis框架 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.spring.boot.starter.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.0.7.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.1.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.1</version>
</dependency>
1、查詢操作
(1)單行查詢
@Autowired
private SysDeptMapper sysDeptMapper;
@Test
public void selectOne(){
//1-構(gòu)造LambdaQueryWrapper構(gòu)造器
LambdaQueryWrapper<SysDept> lambdaQueryWrapper = new LambdaQueryWrapper<>();
//2-查詢部門名稱=研發(fā)部門的記錄
lambdaQueryWrapper.eq(SysDept::getDeptName,"研發(fā)部門" );
//3-查詢一條記錄
SysDept sysDept = sysDeptMapper.selectOne(lambdaQueryWrapper);
System.out.println("查詢一條記錄:"+sysDept);
}
(2)集合查詢
@Autowired
private SysDeptMapper sysDeptMapper;
@Test
public void selectList(){
//1-構(gòu)造LambdaQueryWrapper構(gòu)造器
LambdaQueryWrapper<SysDept> lambdaQueryWrapper = new LambdaQueryWrapper<>();
//2-查詢部門名稱like "%部門" 并且部門電話號碼不為空
lambdaQueryWrapper.likeLeft(SysDept::getDeptName,"部門" ).isNotNull(SysDept::getPhone);
//3-查詢集合
List<SysDept> sysDeptList = sysDeptMapper.selectList(lambdaQueryWrapper);
sysDeptList.forEach(System.out::println);
}
(3)分頁查詢
@Autowired
private SysDeptMapper sysDeptMapper;
@Test
public void select(){
//1-構(gòu)造LambdaQueryWrapper構(gòu)造器
LambdaQueryWrapper<SysDept> lambdaQueryWrapper = new LambdaQueryWrapper<>();
//2- id 降序排列
lambdaQueryWrapper.orderByDesc(SysDept::getDeptId);
//2.1-分頁 curpage當(dāng)前頁澳迫,pageSize每頁條數(shù)
Integer curpage = 0;
Integer pageSize = 10;
Page<SysDept> page = new Page<>(curpage,pageSize);
//3-分頁查詢
IPage<SysDept> sysDeptIPage = sysDeptMapper.selectPage(page, lambdaQueryWrapper);
List<SysDept> sysDeptList = sysDeptIPage.getRecords();
sysDeptList.forEach(System.out::println);
}
2局齿、插入操作
(1) 插入一條記錄
@Autowired
private SysDeptMapper sysDeptMapper;
@Autowired
private SysDeptService sysDeptService;
@Test
public void createOne(){
//1-構(gòu)造添加的實體
SysDept sysDept = new SysDept();
sysDept.setDeptName("測試創(chuàng)建部門");
sysDept.setPhone("12312123131");
sysDept.setEmail("1214@qq.com");
//2-新增一條記錄
LambdaQueryWrapper<SysDept> lambdaQueryWrapper = new LambdaQueryWrapper<>();
int result = sysDeptMapper.insert(sysDept);
//或者使用Service的新增接口
SysDept sysDept1 = new SysDept();
sysDept1.setDeptName("測試創(chuàng)建部門1");
sysDept1.setPhone("12312123131");
sysDept1.setEmail("1214@qq.com");
LambdaQueryWrapper<SysDept> lambdaQueryWrapper1 = new LambdaQueryWrapper<>();
Boolean result1 = sysDeptService.save(sysDept1);
}
(3) 插入多條記錄
Mapper層沒有批量插入的接口,但Service層有批量插入的接口:
//Service層的批量插入
boolean saveBatch(Collection<T> entityList);
boolean saveBatch(Collection<T> entityList, int batchSize);
3橄登、修改操作
(1) 使用LambdaUpdateWrapper構(gòu)造器的修改操作
@Test
public void update(){
//1-構(gòu)造LambdaUpdateWrapper構(gòu)造器
LambdaUpdateWrapper<SysDept> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
//2-修改 id=110的記錄抓歼,將名稱修改
lambdaUpdateWrapper.eq(SysDept::getDeptId, 110);
lambdaUpdateWrapper.set(SysDept::getDeptName ,"部門名稱222");
//3-修改操作
sysDeptMapper.update(null,lambdaUpdateWrapper);
}
4、刪除操作
Mapper層常用接口:
// 根據(jù) entity 條件拢锹,刪除記錄
int delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper);
// 刪除(根據(jù)ID 批量刪除)
int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
// 根據(jù) ID 刪除
int deleteById(Serializable id);
Service層常用接口:
// 根據(jù) entity 條件谣妻,刪除記錄
boolean remove(Wrapper<T> queryWrapper);
// 根據(jù) ID 刪除
boolean removeById(Serializable id);
// 刪除(根據(jù)ID 批量刪除)
boolean removeByIds(Collection<? extends Serializable> idList);
具體想要使用什么增刪改查操作,去參考官網(wǎng)的詳細(xì)介紹卒稳。
參考:
Mybatis-Plus官網(wǎng):https://baomidou.com/guide/crud-interface.html#service-crud-%E6%8E%A5%E5%8F%A3
Mybatis-Plus使用條件構(gòu)造器(QueryWrapper)進(jìn)行條件查詢的9個小例子:http://www.reibang.com/p/70468959b1c3