十一|十一 . mybatis-plus(升级)
一、逻辑删除(假删除)
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、说明
【十一|十一 . mybatis-plus(升级)】当要更新一条记录的时候,希望这条记录没有被别人更新
乐观锁实现方式:
- 取出记录时,获取当前version
- 更新时,带上这个version
- 执行更新时, set version = newVersion where version = oldVersion
- 如果version不对,就更新失败
@Configuration
public class MybatisPlusConfiguration {
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
}
3、注解实体字段 @Version
@Data
public class User {
@Version
private Integer version;
}
4、注意
- 支持的数据类型只有:int,Integer,long,Long,Date,Timestamp,LocalDateTime
- 整数类型下
newVersion = oldVersion + 1
-
newVersion
会回写到entity
中 - 仅支持
updateById(id)
与update(entity, wrapper)
方法 - 在 update(entity, wrapper) 方法下, wrapper 不能复用!!!
@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 Userextends Model {
}
3、UserMapper
注意虽然可以不需要UserMapper的接口,但底层还是实际还是调用了,所以比必须声明
public interface UserMapperextends BaseMapper {
}
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().eq("locked", 0));
log.debug("" + result);
}
}
分页操作
@Test
public void selectPage() {
User user = new User();
IPage page = user.selectPage(new Page<>(1, 10), new QueryWrapper().like("username", "test"));
List users = page.getRecords();
users.forEach(u -> u.getUsername());
}
推荐阅读
- jhipster|jhipster 升级无效问题
- gitlab|Gitlab升级(12.2.1到14.6.4)
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- 佳琪(三十一)
- GIS跨界融合赋能多领域技术升级,江淮大地新应用成果喜人
- 周一(十一)
- 七律·游首钢园(新韵)
- 第十一节课打卡|第十一节课打卡 杨小风