一、使用條件構造器的自定義SQL
1、使用注解的方式
public interface UserMapper extends BaseMapper<User> { @Select("select * from user ${ew.customSqlSegment}") List<User> selectAll(@Param("ew") Wrapper<User> queryWrapper); }
寫法就是參照源碼:@Param("ew") 也就是 @Param(Constants.WRAPPER)

測試
@Test public void selectMy() { LambdaQueryWrapper<User> lambdaQuery = Wrappers.<User>lambdaQuery(); lambdaQuery.likeRight(User::getName, "王") .and(lqw -> lqw.lt(User::getAge, 40).or().isNotNull(User::getEmail)); List<User> list = userMapper.selectAll(lambdaQuery); list.forEach(System.out::println); }
控制台輸出
DEBUG==> Preparing: select * from user WHERE name LIKE ? AND ( age < ? OR email IS NOT NULL ) DEBUG==> Parameters: 王%(String), 40(Integer) TRACE<== Columns: id, name, age, email, manager_id, create_time TRACE<== Row: 1088248166370832385, 王天風, 25, wtf@baomidou.com, 1087982257332887553, 2019-02-05 11:12:22 DEBUG<== Total: 1 User(id=1088248166370832385, name=王天風, age=25, email=wtf@baomidou.com, managerId=1087982257332887553, createTime=Tue Feb 05 11:12:22 CST 2019, remark=null)
2、使用xml文件的方式
public interface UserMapper extends BaseMapper<User> { List<User> selectAll(@Param(Constants.WRAPPER) Wrapper<User> queryWrapper); }
xml文件內容,這里沒有where
<?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 user ${ew.customSqlSegment} </select> </mapper>
注意需要掃描xml文件
# Mybatis Plus配置
mybatis-plus:
mapper-locations: classpath*:mapper/**/*.xml
二、分頁插件
1、配置分頁插件
package com.mp.config; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } }
2、使用Page類進行分頁
@Test public void selectPage() { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.ge("age", 20); Page page = new Page(1, 2); IPage iPage = userMapper.selectPage(page, queryWrapper); System.out.println("總頁數:" + iPage.getPages()); System.out.println("總記錄數:" + iPage.getTotal()); List<User> list = (List<User>)iPage.getRecords(); list.forEach(System.out::println); } @Test public void selectPage2() { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.ge("age", 20); Page page = new Page(1, 2); IPage iPage = userMapper.selectMapsPage(page, queryWrapper); System.out.println("總頁數:" + iPage.getPages()); System.out.println("總記錄數:" + iPage.getTotal()); List<Map<String, Object>> list = (List<Map<String, Object>>) iPage.getRecords(); list.forEach(System.out::println); }
控制台輸出:
DEBUG==> Preparing: SELECT COUNT(1) FROM user WHERE age >= ? DEBUG==> Parameters: 20(Integer) TRACE<== Columns: COUNT(1) TRACE<== Row: 6 DEBUG==> Preparing: SELECT id,name,age,email,manager_id,create_time FROM user WHERE age >= ? LIMIT ?,? DEBUG==> Parameters: 20(Integer), 0(Long), 2(Long) TRACE<== Columns: id, name, age, email, manager_id, create_time TRACE<== Row: 1087982257332887553, 大boss, 40, boss@baomidou.com, null, 2019-01-11 14:20:20 TRACE<== Row: 1088248166370832385, 王天風, 25, wtf@baomidou.com, 1087982257332887553, 2019-02-05 11:12:22 DEBUG<== Total: 2 總頁數:3 總記錄數:6 User(id=1087982257332887553, name=大boss, age=40, email=boss@baomidou.com, managerId=null, createTime=Fri Jan 11 14:20:20 CST 2019, remark=null) User(id=1088248166370832385, name=王天風, age=25, email=wtf@baomidou.com, managerId=1087982257332887553, createTime=Tue Feb 05 11:12:22 CST 2019, remark=null)
不查記錄數的分頁方式:new Page(1, 2, false);
@Test public void selectPage() { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.ge("age", 20); Page page = new Page(1, 2, false); IPage iPage = userMapper.selectPage(page, queryWrapper); System.out.println("總頁數:" + iPage.getPages()); System.out.println("總記錄數:" + iPage.getTotal()); List<User> list = (List<User>)iPage.getRecords(); list.forEach(System.out::println); }
控制台輸出:
DEBUG==> Preparing: SELECT id,name,age,email,manager_id,create_time FROM user WHERE age >= ? LIMIT ?,? DEBUG==> Parameters: 20(Integer), 0(Long), 2(Long) TRACE<== Columns: id, name, age, email, manager_id, create_time TRACE<== Row: 1087982257332887553, 大boss, 40, boss@baomidou.com, null, 2019-01-11 14:20:20 TRACE<== Row: 1088248166370832385, 王天風, 25, wtf@baomidou.com, 1087982257332887553, 2019-02-05 11:12:22 DEBUG<== Total: 2 總頁數:0 總記錄數:0 User(id=1087982257332887553, name=大boss, age=40, email=boss@baomidou.com, managerId=null, createTime=Fri Jan 11 14:20:20 CST 2019, remark=null) User(id=1088248166370832385, name=王天風, age=25, email=wtf@baomidou.com, managerId=1087982257332887553, createTime=Tue Feb 05 11:12:22 CST 2019, remark=null)
3、多表聯查的分頁
演示的單表但多表聯查也是一樣
public interface UserMapper extends BaseMapper<User> { IPage<User> selectUserPage(Page<User> page, @Param(Constants.WRAPPER) Wrapper<User> queryWrapper); }
xml文件
<?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="selectUserPage" resultType="com.mp.entity.User"> select * from user ${ew.customSqlSegment} </select> </mapper>
測試
@Test public void selectMyPage() { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.ge("age", 20); Page page = new Page(1, 2); IPage iPage = userMapper.selectUserPage(page, queryWrapper); System.out.println("總頁數:" + iPage.getPages()); System.out.println("總記錄數:" + iPage.getTotal()); List<User> list = (List<User>) iPage.getRecords(); list.forEach(System.out::println); }
