插件

分页插件

1、MyBatis Plus 自带分页插件,只要配置即可实现分页功能

2、配置插件

(1)Spring xml 方式

<property name="plugins">
    <array>
        <bean class="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor">
            <property name="sqlParser" ref="自定义解析类、可以没有"/>
            <property name="dialectClazz" value="自定义方言类、可以没有"/>
            <!-- COUNT SQL 解析.可以没有 -->
            <property name="countSqlParser" ref="countSqlParser"/>
        </bean>
    </array>
</property>

<bean id="countSqlParser" class="com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize">
    <!-- 设置为 true 可以优化部分 left join 的sql -->
    <property name="optimizeJoin" value="true"/>
</bean>

(2)Spring Boot 注解方式

@Configuration
//扫描Mapper接口所在的包
@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.MYSQL));
        return interceptor;
    }
}

3、测试 

@Test
public void testPage(){
	//设置分页参数:当前页码,每页显示条数
	Page<User> page = new Page<>(1, 5);
	userMapper.selectPage(page, null);
	//获取分页数据
	List<User> list = page.getRecords();
	list.forEach(System.out::println);
	System.out.println("当前页:"+ page.getCurrent());
	System.out.println("每页显示的条数:"+ page.getSize());
	System.out.println("总记录数:"+ page.getTotal());
	System.out.println("总页数:"+ page.getPages());
	System.out.println("是否有上一页:"+ page.hasPrevious());
	System.out.println("是否有下一页:"+ page.hasNext());
}

4、xml 自定义分页

(1)UserMapper 中定义接口方法

public interface UserMapper {//可以继承或者不继承BaseMapper
    /**
     * 查询:根据state状态查询用户列表,分页显示
     *
     * @param page 分页对象,xml中可以从里面进行取值,传递参数 Page,即自动分页,必须放在第一位(可以继承Page实现自己的分页对象)
     * @param state 状态
     * @return 分页对象,必须为Page
     */
    IPage<User> selectPageVo(Page<?> page, Integer state);
}

(2)UserMapper.xml 中编写 SQL,mybatis-plus 自动分页

<!-- SQL片段,记录基础字段 -->
<sql id="BaseColumns">
	id,username,age,email
</sql>

<!-- IPage<User> selectPageVo(Page<User> page, Integer age); -->
<select id="selectPageVo" resultType="User">
	SELECT 
	<include refid="BaseColumns"></include> 
	FROM t_user WHERE age > #{age}
</select>

(3)测试

@Test
public void testSelectPageVo(){
	//设置分页参数
	Page<User> page = new Page<>(1, 5);
	userMapper.selectPageVo(page, 20);
	//获取分页数据
	List<User> list = page.getRecords();
	list.forEach(System.out::println);
	System.out.println("当前页:"+page.getCurrent());
	System.out.println("每页显示的条数:"+page.getSize());
	System.out.println("总记录数:"+page.getTotal());
	System.out.println("总页数:"+page.getPages());
	System.out.println("是否有上一页:"+page.hasPrevious());
	System.out.println("是否有下一页:"+page.hasNext());
}

 

乐观锁

1、配置插件

(1)Spring xml 方式

<bean class="com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor" id="optimisticLockerInnerInterceptor"/>

<bean id="mybatisPlusInterceptor" class="com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor">
    <property name="interceptors">
        <list>
            <ref bean="optimisticLockerInnerInterceptor"/>
        </list>
    </property>
</bean>

(2)Spring Boot 注解方式

@Configuration
//扫描Mapper接口所在的包
@MapperScan("com.baomidou.cloud.service.*.mapper*")
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }
}

2、实现流程

(1)数据库中添加 version 字段

(2)更新前,取出记录,获取当前 version

(3)更新时,version+ 1,如果 where 语句中的 version 版本不对,则更新失败

posted @   半条咸鱼  阅读(211)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示