mybatis plus 自定义分页,mybatisplus怎么分页
目录
简介建库建表依赖配置代码EntityMapperServiceController测试
简介
本文介绍MyBatis-Plus的分页的方法。
包括:
不传参数时的默认结果查询不存在的数据手动包装页,面,张,版自定义结构化查询语言
建库建表
如果存在mp,删除数据库;创建数据库国会议员默认字符集utf8使用MP;如果存在" t _用户",则删除表;设置名称utf8mb4创建表` t _ user `(` id ` BIGINT(0)NOT NULL AUTO _ INCREMENT,` user _ name ` VARCHAR(64)NOT NULL COMMENT 用户名(不能重复), nick _ name VARCHAR(64)空注释昵称(可以重复), email` VARCHAR(64) COMMENT 邮箱, create _ time DATETIME(0)NULL默认当前时间戳注释创建时间,` UPDATE _ time ` DATETIME(0)NULL更新当前时间戳注释上的默认当前时间戳修改时间, deleted _ flag BIGINT(0)不为空默认0注释 0:未删除其他:已删除,使用索引的存储类型目前只有两种的主键(` id `),唯一键` index _ user _ name _ deleted_flag `(` user _ name `,` deleted _ flag `),键` index _ create _ time `(` create _ time `))ENGINE=InnoDB COMMENT=用户;插入 t _用户值(1,刀,刀刃、abc@qq.com、2021-01-23 093:33:36、2021-01-23 09:36、0);插入 t _用户值(2,“天空”天蓝、123@qq.com、2021-01-24 18:12:21、2021-01-24 18:12:21、0);
依赖
?可扩展标记语言版本=1.0 编码=UTF八号?项目xmlns= http://maven。阿帕奇。org/POM/4。0 .0 xmlns : xsi= http://www。w3。org/2001/XML schema-instance xsi :架构位置= http://maven。阿帕奇。org/POM/4。0 .0 https://maven.apache.org/xsd/maven-4.0.0.xsd模型版本4 .0 .0/模型版本父groupIdorg.springframework.boot/groupId人工弹簧-启动-母公司/version2.3.12.RELEASE/version人工弹簧相对路径/。-从存储库-/父groupIdcom.example/groupId artifactId mybatis-Plus _ Simple/artifactId版本0 .0 .1-快照/版本名称mybatis-Plus _ Simple/名称描述Spring Boot的演示项目/描述属性java.ve
rsion>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>3.0.3</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
配置
application.yml
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/mp?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai username: root password: 222333 #mybatis-plus配置控制台打印完整带参数SQL语句mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
分页插件配置(必须)
package com.example.demo.config; import com.baomidou.mybatisplus.annotation.DbType;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; @Configurationpublic class MyBatisPlusConfig { /** * 分页插件 */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; }}
代码
Entity
package com.example.demo.user.entity; import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.annotation.TableId;import com.baomidou.mybatisplus.annotation.TableLogic;import com.baomidou.mybatisplus.annotation.TableName;import com.baomidou.mybatisplus.extension.activerecord.Model;import lombok.Data; import java.time.LocalDateTime; @Data@TableName(value = "t_user")public class User { @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 用户名(不能重复) */ private String userName; /** * 昵称(可以重复) */ private String nickName; /** * 邮箱 */ private String email; /** * 创建时间 */ private LocalDateTime createTime; /** * 修改时间 */ private LocalDateTime updateTime; /** * 0:未删除 其他:已删除 */ @TableLogic(delval = "id") private Long deletedFlag;}
Mapper
package com.example.demo.user.mapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.baomidou.mybatisplus.core.metadata.IPage;import com.baomidou.mybatisplus.core.toolkit.Constants;import com.example.demo.user.entity.User;import org.apache.ibatis.annotations.Param;import org.apache.ibatis.annotations.Select;import org.springframework.stereotype.Repository; @Repositorypublic interface UserMapper extends BaseMapper<User> { @Select("SELECT * FROM t_user ${ew.customSqlSegment}") IPage<User> findUser(IPage<User> page, @Param(Constants.WRAPPER) Wrapper wrapper);}
Service
接口
package com.example.demo.user.service; import com.baomidou.mybatisplus.extension.service.IService;import com.example.demo.user.entity.User; public interface UserService extends IService<User> {}
实现
package com.example.demo.user.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import com.example.demo.user.entity.User;import com.example.demo.user.mapper.UserMapper;import com.example.demo.user.service.UserService;import org.springframework.stereotype.Service; @Servicepublic class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {}
Controller
package com.example.demo.user.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;import com.baomidou.mybatisplus.core.metadata.IPage;import com.baomidou.mybatisplus.core.toolkit.Wrappers;import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;import com.example.demo.user.entity.User;import com.example.demo.user.mapper.UserMapper;import com.example.demo.user.service.UserService;import io.swagger.annotations.Api;import io.swagger.annotations.ApiOperation;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController; import java.util.List; @Api(tags = "分页")@RestController@RequestMapping("page")public class PageController { @Autowired private UserService userService; // 我为了简单直接注入mapper,项目中controller要通过service调mapper @Autowired private UserMapper userMapper; @ApiOperation("不传参数") @GetMapping("noParam") public IPage<User> noParam(Page<User> page) { return userService.page(page); } @ApiOperation("查不存在的数据") @GetMapping("notExist") public IPage<User> notExist(Page<User> page) { // 如果查出来为空,会返回入参page里边的数据,比如:current,size等。不需要自己判空。 return userService.lambdaQuery() .eq(User::getUserName, "abcd") .page(page); } @ApiOperation("手动包装") @GetMapping("manualPack") public IPage<User> manualPack(Page<User> page) { List<User> skyList = userService.lambdaQuery() .eq(User::getUserName, "sky") .list(); // 因为Page是IPage的实现类,所以可以直接返回page // 也可以自己new 一个Page,然后设置值,不过这样就麻烦了 return page.setRecords(skyList); } @ApiOperation("自定义SQL") @GetMapping("customSQL") public IPage<User> customSQLPage(Page<User> page) { LambdaQueryWrapper<User> wrapper = Wrappers.lambdaQuery(); wrapper.eq(User::getUserName, "sky"); // 这样写会报错:MybatisPlusException: can not use this method for "getCustomSqlSegment" // LambdaQueryChainWrapper<User> wrapper = userService.lambdaQuery() // .eq(User::getUserName, "sky"); return userMapper.findUser(page, wrapper); }}
测试
访问knife4j:http://localhost:8080/doc.html
1. 不传参数
2. 查不存在的数据
3. 手动包装
4. 自定义SQL
以上就是MyBatis-Plus实现分页的方法使用详解的详细内容,更多关于MyBatis-Plus分页的资料请关注盛行IT其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。