springboot mybatisplus进阶

2020-08-08  本文已影响0人  杨健kimyeung

一、逻辑删除(假删除)

1、application.yml 加入配置(如果你的默认值和mp默认的一样,该配置可无):

mybatis-plus:
  global-config:
    db-config:
      # 全局配置 也可以在注解上指定
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

2、注册 Bean(3.1.1开始不再需要这一步):

import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyBatisPlusConfiguration {
    @Bean
    public ISqlInjector sqlInjector() {
        return new LogicSqlInjector();
    }
}

3、实体类字段上加上@TableLogic注解

@Data
public class User {
    @TableLogic
    private Boolean locked;
}

3、使用mp自带方法删除和查找都会附带逻辑删除功能

删除时 update user set locked=1 where id =1 and locked=0
查找时 select * from user where locked=0

二、乐观锁

1、说明

当要更新一条记录的时候,希望这条记录没有被别人更新

乐观锁实现方式:

2、插件配置

@Configuration
public class MybatisPlusConfiguration {
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
}

3、注解实体字段 @Version

@Data
public class User {
  @Version
  private Integer version;
}

4、注意

5、栗子

    @Test
    public void testVersion() {
        User user = new User();
        user.setUid(1);
        user.setVersion(10);
        int update = userMapper.update(user, null);
        log.debug(update + "");
    }

三、ActiveRecord(不要学,危险)

1、说明

活动记录,是一种领域模型模式,

通俗的来说就是数据表对应的实体类只需继承 Model 类即可实现基本 CRUD 操作

2、实体类

@EqualsAndHashCode(callSuper = true)
@Data
public class User  extends Model<User> {
}

3、UserMapper

注意虽然可以不需要UserMapper的接口,但底层还是实际还是调用了,所以比必须声明

public interface UserMapper  extends BaseMapper<User> {
}

4、基本操作

更新操作

@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class UserMapperARTest {
    @Test
    public void update(){
        User user = new User();
        user.setUid(1);
        user.setUsername("测试AR模式");
        boolean isSuccess = user.updateById();
        log.debug(""+ isSuccess);
    }
}

查询操作

@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class UserMapperARTest {
    @Test
    public void select() {
       // 其它操作跟Mapper通用方法一样
        User user = new User();
        int result = user.selectCount(new QueryWrapper<User>().eq("locked", 0));
        log.debug("" + result);
    }
}

分页操作

   @Test
    public void selectPage() {
        User user = new User();
        IPage<User> page = user.selectPage(new Page<>(1, 10), new QueryWrapper<User>().like("username", "test"));
        List<User> users = page.getRecords();
        users.forEach(u -> u.getUsername());
    }
上一篇下一篇

猜你喜欢

热点阅读