Mybatis-Plus学习4 Page分页

这篇具有很好参考价值的文章主要介绍了Mybatis-Plus学习4 Page分页。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ctrl + P = 查看可填的属性类型 

alt + 回车 = 自动填充数据类型

1、使用Page分页需要先配置config类,加上拦截器

@Configuration
@MapperScan("com/learn/mybatisplus/mapper")
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }

}
    @Test
    public void testPage() {

        Page<User> page = new Page<>(2, 3);
        userMapper.selectPage(page, null);
        //SELECT id,age,name,email,is_deleted FROM user WHERE is_deleted=0 LIMIT ?
        // 获取当前分页的内容
        System.out.println("1:"+page.getRecords());
        // 获取总页数
        System.out.println("2:"+page.getPages());
        // 获取总记录数
        System.out.println("3:"+page.getTotal());
        // 是否有下一页
        System.out.println("4:"+page.hasNext());
        // 是否有上一页
        System.out.println("5:"+page.hasPrevious());
    }

type-aliasys-package配置pojo对象别名对应的包

自定义的Mapper的page查询:

    /**
     * 通过年龄信息查询并分页
     * @param page mybatis-plus提供的封装好的属性,必须放在第一个位置
     * @param age
     * @return
     */
    Page<User> selectPageVo(@Param("page") Page<User> page, @Param("age") Integer age);


    <select id="selectPageVo" resultType="com.learn.mybatisplus.pojo.User">
        select id, name, age, email from user where age > #{age}
    </select>


        Page<User> page = new Page<>(1, 3);
        userMapper.selectPageVo(page, 20);
        //select id, name, age, email from user where age > ? LIMIT ?

乐观锁 和 悲观锁

悲观锁:
悲观锁的思想是,在操作数据之前,先假设其他并发操作会对数据进行修改,因此悲观锁会在对数据进行操作前,将其锁定,确保其他操作无法访问该数据,直到当前操作完成。

一个常见的悲观锁的例子是数据库中的行级锁。当多个事务对数据库中的同一行数据进行并发操作时,悲观锁会将该数据行锁定,以防止其他事务修改该数据。只有当当前事务完成后,其他事务才能获取到该行数据的锁并执行相应的操作。

乐观锁:
乐观锁的思想是,假设在数据的操作过程中不会有其他事务对数据进行修改,因此乐观锁不会显式地进行锁定操作。相反,它会在操作完成时进行检查以确保数据的一致性。

一个常见的乐观锁的例子是使用版本号(或者时间戳)来实现并发控制。每个数据记录都有一个版本号,当执行更新操作时,乐观锁会比较当前数据的版本号是否与执行更新操作之前的版本号一致。如果一致,说明期间没有其他操作对数据进行修改,更新可以继续执行;如果不一致,说明期间有其他操作对数据进行了修改,更新操作可能会被中断或者重新执行。

Mybatis-Plus学习4 Page分页,mybatis,学习,android

Mybatis-Plus插件实现乐观锁:

public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

        // 添加分页插件
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));

        // 添加乐观锁插件
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }

}

加上@Version注解,标识版本号

@Data
@TableName("t_product")
public class Product {

    private Long id;
    private String name;
    private Integer price;
    @Version
    private Integer version;
}
    @Test
    public void testProduct01() {
        // 小李查询商品价格
        Product productLi = productMapper.selectById(1);
        System.out.println("小李查询的商品价格" + productLi.getPrice());
        Product productWang = productMapper.selectById(1);
        System.out.println("小王查询的商品价格" + productLi.getPrice());

        // 小李将商品价格加50
        productLi.setPrice(productLi.getPrice() + 50);
        productMapper.updateById(productLi);
        // 小王将商品价格减50
        productWang.setPrice(productWang.getPrice() - 30);
        int result = productMapper.updateById(productWang);
        if (result == 0) {
            Product productNew = productMapper.selectById(1);
            productNew.setPrice(productNew.getPrice() - 30);
            productMapper.updateById(productNew);
        }

        // 老板查询商品价格
        Product productBoss = productMapper.selectById(1);
        System.out.println("老板查询的商品价格" + productBoss.getPrice());

    }

枚举,@EnumValue 将注解标注的值保存到数据库文章来源地址https://www.toymoban.com/news/detail-518702.html

@Getter
public enum SexEnum {

    MALE(1, "男"),
    FAMALE(2, "女");

    @EnumValue // 将注解标注的值保存到数据库
    private Integer sex;
    private String sexName;

    SexEnum(Integer sex, String sexName) {
        this.sex = sex;
        this.sexName = sexName;
    }
}
@TableName("user")
public class User {

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    @TableField("age")
    private Integer age;

    @TableField("name")
    private String name;

    @TableField("email")
    private String email;

    @TableField("is_deleted")
    @TableLogic
    private Integer isDeleted;

    private SexEnum sex;

}
    @Test
    public void test() {
        User user = new User();
        user.setName("admin");
        user.setAge(33);
        user.setSex(SexEnum.MALE);
        int result = userMapper.insert(user);
        System.out.println("result = " + result);
    }

到了这里,关于Mybatis-Plus学习4 Page分页的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mybatis-plus分页方式

    概述 MyBatisPlus中提供的(自带的)分页插件,非常简单,只需要简单的配置就可以实现分页功能。 详细步骤: 第一步::config.MybatisPlusConfig.java:配置类,配置mybatisplus的插件功能。 第二步:验证(测试): 官网介绍: IXxxService.java: XxxServiceImpl.java: XxxController.java 业务(

    2024年02月16日
    浏览(42)
  • 关于mybatis-plus中Ipage 、page 和pageUtils中的区别

         在使用人人开源框架的时候,通过逆向工程自动生成了分页功能,然而在使用的时候经常被关于Ipage和page等对象搞混,所以记录这篇文章用来介绍之间的区别 可以看见上面就是逆向工程帮忙生成的分页方法 里面出现了三个对象 pageUtils、page和Ipage 先来将pageUtils吧,pag

    2024年02月04日
    浏览(48)
  • SpringBoot+Mybatis-Plus+Thymeleaf+Bootstrap分页查询(前后端完整版开源学习)图书管理系统

    Mybatis-Plus | Spring Boot+Mybatis-Plus+Thymeleaf+Bootstrap分页页查询(前后端都有) 主要参考了这篇博客。 运行截图 3.9.1 mybatis-plus 插入时间和更新时间字段自动填充工具 3.9.2 分页插件工具

    2023年04月11日
    浏览(45)
  • mybatis-plus实现分页查询

    分页查询使用的方法是: IPage:用来构建分页查询条件 Wrapper:用来构建条件查询的条件,目前我们没有可直接传为Null IPage:返回值,你会发现构建分页条件和方法的返回值都是IPage IPage是一个接口,我们需要找到它的实现类来构建它,具体的实现类,可以进入到IPage类中按ctrl+

    2023年04月08日
    浏览(52)
  • MyBatis-Plus 分页设置不生效

    在配置类上加拦截器 2.当你设置了数据源需要在数据源上添加拦截器

    2024年02月15日
    浏览(45)
  • MyBatis-Plus分页查询(快速上手运用)

    Mybatis-Plus知识点[MyBatis+MyBatis-Plus的基础运用]_心态还需努力呀的博客-CSDN博客   Mybatis-Plus+SpringBoot结合运用_心态还需努力呀的博客-CSDN博客 MyBaits-Plus中@TableField和@TableId用法_心态还需努力呀的博客-CSDN博客 MyBatis-Plus中的更新操作(通过id更新和条件更新)_心态还需努力呀的博

    2024年02月16日
    浏览(53)
  • MyBatis-Plus自定义分页模型

    MyBatis-Plus自带的分页模型Page有些参数,我觉得不是很必要,因此自定义自己的分页模型。该类继承了 IPage 类,实现了简单分页模型如果你要实现自己的分页模型可以继承 Page 类或者实现 IPage 类。因为Java是单继承多实现的,所以我们使用实现IPage接口的方式实现我们自己的分

    2024年02月12日
    浏览(39)
  • springboot使用Mybatis-plus分页插件

    在  pom.xml   文件中添加 MyBatis Plus 和分页插件的依赖: 注意替换  {mybatis-plus-version}  为对应的版本号。 在 Spring Boot 的配置文件  application.yml   中添加分页插件的配置参数: 注意代码中的注释,其中   PaginationInterceptor  表示使用 MyBatis Plus 提供的分页插件。 在接口层使用

    2024年02月07日
    浏览(44)
  • Mybatis-plus 分页 自定义count方法

    使用了mybatisplus 语句中有order by 语法 mybatisplus会使用 select count(*) from (子语句) TOTAL 算出total 但是会报错 查询条件QueryWrapper中还有order by排序条件,则生成的select count(*) from(sql) 就会报错 除非另外还指定了 TOP、OFFSET 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查

    2024年04月23日
    浏览(50)
  • Spring Boot学习随笔- 集成MyBatis-Plus(三)自定义SQL、分页实现(PaginationInterceptor )、更新和删除详细方法

    学习视频:【编程不良人】Mybatis-Plus整合SpringBoot实战教程,提高的你开发效率,后端人员必备! 自定义mapper文件是为了应对一些更复杂的查询场景,首先先配置映射路径 由于这里的mapper文件放在java文件夹中,所以要在pom.xml里进行配置 mapper 测试 在MyBatis Plus中, 物理分页 和 内

    2024年02月03日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包