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 ?
乐观锁 和 悲观锁
悲观锁:
悲观锁的思想是,在操作数据之前,先假设其他并发操作会对数据进行修改,因此悲观锁会在对数据进行操作前,将其锁定,确保其他操作无法访问该数据,直到当前操作完成。
一个常见的悲观锁的例子是数据库中的行级锁。当多个事务对数据库中的同一行数据进行并发操作时,悲观锁会将该数据行锁定,以防止其他事务修改该数据。只有当当前事务完成后,其他事务才能获取到该行数据的锁并执行相应的操作。
乐观锁:
乐观锁的思想是,假设在数据的操作过程中不会有其他事务对数据进行修改,因此乐观锁不会显式地进行锁定操作。相反,它会在操作完成时进行检查以确保数据的一致性。
一个常见的乐观锁的例子是使用版本号(或者时间戳)来实现并发控制。每个数据记录都有一个版本号,当执行更新操作时,乐观锁会比较当前数据的版本号是否与执行更新操作之前的版本号一致。如果一致,说明期间没有其他操作对数据进行修改,更新可以继续执行;如果不一致,说明期间有其他操作对数据进行了修改,更新操作可能会被中断或者重新执行。