七、spring boot开发web应用--mybatis-plus框架实现分页和枚举转换
列表查询分页和枚举转换都是很常用的一个功能,既然项目使用了mybatis-plus,那得聊聊mybatis-plus是如何实现分页和枚举转换的。mybatis-plus的框架简单使用可以查看第六节《
1.实现分页
(1).添加Bean配置
在项目启动类中添加@Bean配置
package com.kinglead.demo; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; @SpringBootApplication @MapperScan("com.kinglead.demo.mapper") public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } /** * mybatis-plus分页配置 */ @Bean public PaginationInterceptor paginationInterceptor() { PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false // paginationInterceptor.setOverflow(false); // 设置最大单页限制数量,默认 500 条,-1 不受限制 // paginationInterceptor.setLimit(500); // 开启 count 的 join 优化,只针对部分 left join paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true)); return paginationInterceptor; } }
(2).在ServiceImpl实现方法中加入分页实现Page
package com.kinglead.demo.service.impl; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.kinglead.demo.domain.User; import com.kinglead.demo.mapper.UserMapper; import com.kinglead.demo.service.UserService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; @Service public class UserServiceImpl implements UserService { @Resource private UserMapper userMapper; @Override public List<User> queryUserList() { //new分页模型:这里硬编码,第一页,每页5条 //current:当前页 //size:每页显示条数 Page<User> page = new Page<User>(1,5); //使用mybatis-plus公共查询接口完成列表查询 Page<User> userPage = userMapper.selectPage(page, null); return userPage.getRecords(); } }
(3).测试:第一页5条数据
数据库数据
查询列表
2.枚举转换
(1).创建枚举
主要用到2个注解@EnumValue和@JsonValue。@EnumValue注明写入数据库字段值;@JsonValue是Jackson方式带的注解,注明response返回值。
package com.kinglead.demo.enums; import com.baomidou.mybatisplus.annotation.EnumValue; import com.fasterxml.jackson.annotation.JsonValue; public enum GenderEnum { MALE("男","MALE"), FEMALE("女","FEMALE"); private final String code; //@EnumValue注明写入数据库字段值 @EnumValue private final String value; GenderEnum(String code, String value) { this.code = code; this.value = value; } //Jackson方式:@JsonValue注明response返回值 @JsonValue public String getDescription() { return this.code; } }
(2).实体类User
package com.kinglead.demo.domain; import com.baomidou.mybatisplus.annotation.TableName; import com.kinglead.demo.enums.GenderEnum; import lombok.Data; @Data @TableName(value = "t_user") //指明数据库表名 public class User { private Long id; private String name; private Integer age; private String email; private GenderEnum gender; }
(3).测试:性别字段在数据库里存的是“MALE”和“FEMALE”,查询出来的是“男”和“女”
数据库数据
查询列表
源码github地址:https://github.com/kinglead2012/myblog