25、Mybatis-Pul 主键生成、自动填充、乐观锁、逻辑删除
1、添加Mybatis-puls的依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.1</version>
</dependency>
<!-- mysql 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
2、编写application.yml配置文件
spring: application: name: mybatis-plus datasource: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://8.129.215.115:3306/mybatis_plus?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: root hikari: minimum-idle: 5 idle-timeout: 600000 maximum-pool-size: 10 auto-commit: true pool-name: MyHikariCP max-lifetime: 1800000 connection-timeout: 30000 connection-test-query: SELECT 1 mybatis-plus: global-config: db-config: logic-delete-value: 1 # 逻辑已删除值(默认为 1) logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) # configuration: # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl logging: level: com.weishun.mybatispuls.mapper: debug
3、编写实体类
@Data @AllArgsConstructor @NoArgsConstructor public class MyUser { private Long id; private String username; private String password; }
4、编写Mapper接口 和测试Mapper能否使用
@Mapper public interface MyUserMapper extends BaseMapper<MyUser> { }
@Autowired
MyUserMapper myUserMapper;
@Test
void contextLoads() {
List<MyUser> myUsers = myUserMapper.selectList(null);
myUsers.forEach(System.out::println);
}
5、测试插入方法insert,Id主键生成策略:默认使用雪花算法(全球唯一ID)id数据类型必须为bigint
@Test void insertTest() { MyUser myUser = new MyUser(); myUser.setUsername("joe"); myUser.setPassword("123456"); int insert = myUserMapper.insert(myUser); System.out.println(insert); System.out.println(myUser); }


6、自动填充处理:首先在实体类上标上注解

7、定义自己的处理类,实现 MetaObjectHandler 接口 两个方法,再次测试新增和修改
@Slf4j @Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.setFieldValByName("createTime",new Date(),metaObject); this.setFieldValByName("updateTime",new Date(),metaObject); //this.setFieldValByName("version",1,metaObject); } @Override public void updateFill(MetaObject metaObject) { this.setFieldValByName("updateTime",new Date(),metaObject); } }
8、乐观锁处理 :数据表里添加version(乐观锁字段) 这里要注意的是version字段要设置默认值是0

9、同步实体类


10、编写MybatisPuls的组件,添加乐观锁的插件
@EnableTransactionManagement @Configuration public class MyBatisPlusConfig { //乐观锁插件 @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { return new OptimisticLockerInterceptor(); } //分页插件 @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } //逻辑删除插件 @Bean public ISqlInjector sqlInjector(){ return new LogicSqlInjector(); } //性能分析插件 @Bean @Profile({"dev","test"}) public PerformanceInterceptor performanceInterceptor(){ PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor(); performanceInterceptor.setMaxTime(2000); performanceInterceptor.setFormat(true); return performanceInterceptor; } }
11、测试乐观锁是否生效
//乐观锁测试 @Test void updateTest2() { MyUser myUser = myUserMapper.selectById(1407598187476226049L); myUser.setUsername("测试乐观锁"); int update = myUserMapper.updateById(myUser); System.out.println(update); System.out.println(myUser); }
11、批量查询和条件查询测试
@Test void test01() { List<MyUser> myUsers = myUserMapper.selectBatchIds(Arrays.asList(1, 2, 3)); myUsers.forEach(System.out:: println); Map<String,Object> maps = new HashMap<>(); maps.put("username","root"); List<MyUser> myUsers1 = myUserMapper.selectByMap(maps); myUsers1.forEach(System.out:: println); }
12、MybatisPuls 实现分页查询

13、测试分页查询
@Test void pageTest() { Page<MyUser> page = new Page<>(1,5); myUserMapper.selectPage(page,null); page.getRecords().forEach(System.out:: println); }
14、实现物理删除(根据id删除,批量删除)
@Test void deleteTest() { int deleteById = myUserMapper.deleteById(1L); int i = myUserMapper.deleteBatchIds(Arrays.asList(1, 2, 3)); }
15、实现逻辑删除,这里要注意设置该字段必须设置默认值是:0






浙公网安备 33010602011771号