掌握MybatisPlus提升开发效率(四)全局配置文件、乐观锁、逻辑删除

文章介绍了MybatisPlus中自定义XMLSQL脚本的配置,强调了指定查询字段对于性能优化的影响,特别是在网络IO和索引利用上的优势。此外,还详细讲解了乐观锁的概念和数据库实现,以及MybatisPlus如何支持乐观锁。最后提到了MybatisPlus的逻辑删除功能,允许数据标记为删除而非物理删除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MybatisPlus自定义xml的sql脚本

与Mybatis自定义xml是sql脚本没有区别

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

全局配置文件

config-location和configuration不能同时出现

application.properties

# 第一种
# 配置mybatis plus打印sql⽇志
#mybatis-plus.configuration.logimpl=org.apache.ibatis.logging.stdout.StdOutImpl

# 第二种
# 配置最新全局配置⽂件
mybatis-plus.config-location=classpath:mybatis-config.xml

#配置mybatis包路径
mybatis-plus.type-aliases-package=net.xdclass.shopmanager.model

#mybatis plus下划线转驼峰配置,默认就是true
mybatis-plus.configuration.map-underscore-to-camel-case=true

#配置全局默认主键类型,实体类就不用加 @TableId(value = "id", type = IdType.AUTO)
mybatis-plus.global-config.db-config.id-type=auto

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <!--控制台输出日志-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
</configuration>

【面试】性能优化之指定select字段查询

select *select 指定字段的区别

网络IO问题

select * 会查出所有的字段,有些是不需要的,当应用程序和服务器不在同⼀个局域网时,字段过多会影响网络传输的性能

索引问题

在指定字段有索引的情况下,mysql是可以不用读data,直接使用index里面的值就返回结果的。但是⼀旦用了select *,就会有其他列需要从磁盘中读取才会返回结果,这样就造成了额外的性能开销

MybatisPlus指定查询字段

bannerMapper.selectList(new QueryWrapper<BannerDO>().select("id","name"));

乐观锁

定义:每次取数据的时候都认为别人不会修改,更新的时候判断别⼈是否已经修改了数据,通过版本来判断,如果数据被修改了就拒绝更新

Java里面⼤量使用CAS,CAS属于乐观锁,性能较悲观锁有很大提高
AtomicXXX等原子类底层就是CAS实现,⼀定程度比synchonized好,因为后者是悲观锁

悲观锁适合写操作多的场景,乐观锁适合 读操作 多的场景,乐观锁的吞吐量会比悲观锁多

数据库的乐观锁

⼤多是基于数据版本 (Version)记录机制实现。
数据版本:为数据增加⼀个版本标识,在基于数据库表的版本解决方案中,⼀般是通过为数据库表增加⼀个version字段来实现。

读取出数据时,将此版本号⼀同读出,之后更新时,对此版本号+1。此时,将提交数据的版本数据与数据,库表对应记录的当前版本信息进行比对,如果提交的数据版本号⼤于数据库表当前版本号,则予以更新,否则认为是过期数据

乐观锁实战

Mybatis Plus自带⼀个插件,可以轻松实现乐观锁

1、实体类增加version属性配置

@Version
private Integer version;

2、数据库增加version版本字段

CREATE TABLE `banner` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `img` varchar(524) DEFAULT NULL COMMENT '图⽚',
 `url` varchar(524) DEFAULT NULL COMMENT '跳转地址',
 `weight` int(11) DEFAULT NULL COMMENT '权重',
 `version` int(11) DEFAULT '1' COMMENT '乐观锁版本号',
 `deleted` int(11) DEFAULT '0' COMMENT '0是未删除,1是已经删除',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4;

3、增加乐观锁插件

public class MybatisPlusPageConfig {

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

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

注意:

  • 乐观锁数据类型支持int、integer、long、timestamp
  • 仅支持updateById和update方法

测试乐观锁

@Test
public void testOptimi(){
	//先根据ID找记录,得到id 和 version
	BannerDO bannerDO = new BannerDO();
	bannerDO.setVersion(1);
	bannerDO.setId(1);
	bannerDO.setUrl("open1024.com");

	bannerMapper.updateById(bannerDO);
}

先根据ID找记录,得到id=1和version=1,修改了url,更新时判断version,如果version等于1则更新成功,如果version不等于1则更新失败

MybatisPlus逻辑删除

简单来说,就是用户删除了订单,只不过是更新了标记,不会真正的物理删除。这样运营⼈员可以分析和审查数据,也⽅便将数据沉淀下来用于商业分析

数据库增加deleted字段(0是未删除,1表示删除)实体类增加属性配置@TableLogic或者在配置文件增加指定

1、实体类增加属性配置

@TableLogic
private Integer deleted;

2、配置文件新增配置

#删除是1
mybatis-plus.global-config.db-config.logicdelete-value=1
#未删除是0
mybatis-plus.global-config.db-config.logicnot-delete-value=0
#如果java实体类没加注解@TableLogic,则可以配置这个,推荐这⾥配置
mybatis-plus.global-config.db-config.logicdelete-field=deleted

注意:

  • deleteById删除后就是,结果就是更新 字段
  • 查询的时候会⾃动拼接上deleted=0的检索条件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆浆两块钱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值