MybatisPlus学习的第二天(1)

举报
多米诺的古牌 发表于 2021/02/21 16:23:06 2021/02/21
【摘要】 2.4 分页查询  官方文档://Spring boot方式 @Configuration @MapperScan("com.baomidou.cloud.service.*.mapper*") public class MybatisPlusConfig { // 旧版 @Bean public PaginationInterceptor paginationInterceptor(...

2.4 分页查询
  官方文档:

//Spring boot方式
	@Configuration
	@MapperScan("com.baomidou.cloud.service.*.mapper*")
	public class MybatisPlusConfig {

		// 旧版
		@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;
		}
		
		// 最新版
		@Bean
		public MybatisPlusInterceptor mybatisPlusInterceptor() {
			MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
			interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
			return interceptor;
		}
		
	}
	
	public interface UserMapper {//可以继承或者不继承BaseMapper
		/**
		 * <p>
		 * 查询 : 根据state状态查询用户列表,分页显示
		 * </p>
		 *
		 * @param page 分页对象,xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位(你可以继承Page实现自己的分页对象)
		 * @param state 状态
		 * @return 分页对象
		 */
		IPage<User> selectPageVo(Page<?> page, Integer state);
	}
	<select id="selectPageVo" resultType="xxx.xxx.xxx.UserVo">
		SELECT id,name FROM user WHERE state=#{state}
	</select>
	public IPage<User> selectUserPage(Page<User> page, Integer state) {
		// 不进行 count sql 优化,解决 MP 无法自动优化 SQL 问题,这时候你需要自己查询 count 部分
		// page.setOptimizeCountSql(false);
		// 当 total 为小于 0 或者设置 setSearchCount(false) 分页插件不会进行 count 查询
		// 要点!! 分页返回的对象与传入的对象是同一个
		return userMapper.selectPageVo(page, state);
	}
    
	eg:
	@Test
	public void testPage(){
		Page<User> page = new Page<>(1,5);//(当前页,显示数)
		userMapper.selectPage(page,null);
		//打印Page类中封装的 当前页数据
		page.getRecords().forEach(System.out::println);
	}

2.5 逻辑删除
    2.5.1 定义
      官方文档:
      说明:

        只对自动注入的sql起效:

        插入: 不作限制
        查找: 追加where条件过滤掉已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
        更新: 追加where条件防止更新到已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
        删除: 转变为 更新
        例如:

        删除: update user set deleted=1 where id = 1 and deleted=0
        查找: select id,name,deleted from user where deleted=0
    2.5.2 配置
        步骤1: 
            配置application.yml
            mybatis-plus:
              global-config:
                db-config:
                  logic-delete-field: flag  # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
                  logic-delete-value: 1 # 逻辑已删除值(默认为 1)
                  logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
    
        步骤2:数据库中、实体类字段上加上@TableLogic注解
            数据库中需要设置默认值 0 数字

@TableLogic
			private Integer deleted;
		步骤3:(3.0.5版本时使用,新版本已经不需要了)
			在mybatis配置类中增加逻辑删除组件
			@Bean
			public ISqlInjector sqlInjector(){
				return new LogicSqlInjector();
			}

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。