學(xué)習(xí)視頻:【編程不良人】Mybatis-Plus整合SpringBoot實戰(zhàn)教程,提高的你開發(fā)效率,后端人員必備!
自定義SQL
自定義mapper文件是為了應(yīng)對一些更復(fù)雜的查詢場景,首先先配置映射路徑
mybatis-plus:
mapper-locations: com/mp/dao/xml/*
由于這里的mapper文件放在java文件夾中,所以要在pom.xml里進行配置
<build>
<resources>
<resource>
<!-- xml放在java目錄下-->
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<!--指定資源的位置(xml放在resources下,可以不用指定)-->
<resource>
<directory>src/main/java</directory>
</resource>
</resources>
</build>
-
mapper
public interface UserMapper extends BaseMapper<User> { List<User> selectAll(@Param(Constants.WRAPPER) Wrapper<User> wrapper); }
<?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.mp.dao.UserMapper"> <select id="selectAll" resultType="com.mp.entity.User"> select * FROM `mp_user` ${ew.customSqlSegment} </select> </mapper>
-
測試
@Test public void selectMy() { LambdaQueryWrapper<User> lambda= Wrappers.<User>lambdaQuery(); lambda.likeRight(User::getName,"劉") .and(lqw->lqw.lt(User::getAge,30) .or().isNotNull(User::getEmail)); List<User> userList = userMapper.selectAll(lambda); userList.forEach(System.out::println); }
分頁
在MyBatis Plus中,物理分頁和內(nèi)存分頁是兩種不同的分頁方式。
物理分頁【推薦】是在數(shù)據(jù)庫層面進行分頁操作,通過SQL語句的LIMIT
和OFFSET
關(guān)鍵字來實現(xiàn)。這種分頁方式直接在數(shù)據(jù)庫中進行數(shù)據(jù)的截取和返回,因此適用于大數(shù)據(jù)量的分頁查詢。
內(nèi)存分頁【了解】是在應(yīng)用程序內(nèi)存中進行分頁操作,即先將所有數(shù)據(jù)查詢出來,然后在內(nèi)存中進行分頁處理。這種分頁方式適用于數(shù)據(jù)量較小的情況,因為需要將所有數(shù)據(jù)加載到內(nèi)存中,可能會導(dǎo)致內(nèi)存占用過高。
-
配置插件
@Configuration public class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } }
-
分頁實現(xiàn)
@Test public void selectPage() { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.ge("age", 30); Page<User> page = new Page<User>(1, 2,false);// fasle指的是不查詢總記錄數(shù),提高性能 // IPage<User> iPage = userMapper.selectPage(page, queryWrapper); // List<User> userList = iPage.getRecords(); // selectMapsPage IPage<Map<String, Object>> iPage = userMapper.selectMapsPage(page, queryWrapper); System.out.println("總頁數(shù) = " + iPage.getPages()); System.out.println("總記錄數(shù) = " + iPage.getTotal()); List<Map<String, Object>> userList = iPage.getRecords(); userList.forEach(System.out::println); }
-
自定義分頁
-
UserMapper
IPage<User> selectUserPage(Page<User> page, @Param(Constants.WRAPPER) Wrapper<User> wrapper); }
-
UserMapper.xml文章來源:http://www.zghlxwxcb.cn/news/detail-773724.html
<select id="selectUserPage" resultType="com.mp.entity.User"> select * from mp_user ${ew.customSqlSegment} </select>
-
測試文章來源地址http://www.zghlxwxcb.cn/news/detail-773724.html
@Test public void selectMyPage() { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.ge("age", 30); Page<User> page = new Page<User>(1, 2); IPage<User> iPage = userMapper.selectUserPage(page, queryWrapper); System.out.println("總頁數(shù) = " + iPage.getPages()); System.out.println("總記錄數(shù) = " + iPage.getTotal()); List<User> userList = iPage.getRecords(); userList.forEach(System.out::println); }
-
Update,更新方法詳解
@Test
public void updateById() {
User user = new User();
user.setUserId(3L);
user.setAge(28);
user.setEmail("xiao@163.com");
// 傳入實體對象作為參數(shù),自動根據(jù)id字段定位對應(yīng)的記錄,根據(jù)其他set的值進行更新
int rows = userMapper.updateById(user);
System.out.println("rows = " + rows);
}
/**
* 條件構(gòu)造器更新
*/
@Test
public void updateByWrapper() {
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("name", "小剛").eq("age", 18); // where條件
// set更新條件
User user = new User();
user.setAge(28);
user.setEmail("xiao@163.com");
// 傳入實體對象作為參數(shù),自動根據(jù)id字段定位對應(yīng)的記錄,根據(jù)其他set的值進行更新
int rows = userMapper.update(user, updateWrapper);
System.out.println("rows = " + rows);
}
/**
* 快速更新少量字段
*/
@Test
public void updateByWrapper2() {
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("name", "李剛").eq("age", 29).set("age", 30);
int rows = userMapper.update(null,updateWrapper);
System.out.println("rows = " + rows);
}
/**
* lambda表達式
*/
@Test
public void updateByWrapper3() {
LambdaUpdateWrapper<User> lambdaUpdate = Wrappers.lambdaUpdate();
lambdaUpdate.eq(User::getName, "小剛").eq(User::getAge, 28).set(User::getAge, 31);
int rows = userMapper.update(null,lambdaUpdate);
System.out.println("rows = " + rows);
}
/**
* lambda表達式鏈式調(diào)用
*/
@Test
public void updateByWrapper4() {
boolean update = new LambdaUpdateChainWrapper<User>(userMapper)
.eq(User::getName, "小剛").eq(User::getAge, 31).set(User::getAge,28).update();
System.out.println("update = " + update);
}
Delete 刪除
@Test
public void deleteById() {
int rows = userMapper.deleteById(1739970502337392641L);
System.out.println("rows = " + rows);
}
@Test
public void deleteByMap() {
Map<String,Object> map = new HashMap<>();
map.put("name", "小剛");
map.put("age", "25");
// DELETE FROM mp_user WHERE name = ? AND age = ?
int rows = userMapper.deleteByMap(map);
System.out.println("rows = " + rows);
}
@Test
public void deleteBatchIds() {
int rows = userMapper.deleteBatchIds(Arrays.asList(121111123010L, 126372731123L, 127381787813L));
// 相當(dāng)于 where id in(?,?,?)
System.out.println("rows = " + rows);
}
@Test
public void deleteByWrapper() {
LambdaQueryWrapper<User> lambdaQuery = Wrappers.lambdaQuery();
lambdaQuery.eq(User::getAge, 28)
.or().gt(User::getAge, 41);
int rows = userMapper.delete(lambdaQuery);
System.out.println("rows = " + rows);
}
到了這里,關(guān)于Spring Boot學(xué)習(xí)隨筆- 集成MyBatis-Plus(三)自定義SQL、分頁實現(xiàn)(PaginationInterceptor )、更新和刪除詳細方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!