当前位置: 首页 > wzjs >正文

企业网站现状郑州百度网站快速优化

企业网站现状,郑州百度网站快速优化,wap网站发布,wordpress网站顶部乐观锁:总是假设最好的情况,每次读取数据时认为数据不会被修改(即不加锁),当进行更新操作时,会判断这条数据是否被修改,未被修改,则进行更新操作。若被修改,则数据更新失…

 乐观锁:总是假设最好的情况,每次读取数据时认为数据不会被修改(即不加锁),当进行更新操作时,会判断这条数据是否被修改,未被修改,则进行更新操作。若被修改,则数据更新失败,可以对数据进行重试(重新尝试修改数据)。
    悲观锁:总是假设最坏的情况,每次读取数据时认为数据会被修改(即加锁),当进行更新操作时,直接更新数据,结束操作后释放锁(此处才可以被其他线程读取)。

乐观锁、悲观锁使用场景?
  乐观锁一般用于读比较多的场合,尽量减少加锁的开销。
  悲观锁一般用于写比较多的场合,尽量减少 类似 乐观锁重试更新引起的性能开销。

乐观锁两种实现方式
方式一:通过版本号机制实现。
  在数据表中增加一个 version 字段。
  取数据时,获取该字段,更新时以该字段为条件进行处理(即set version = newVersion where version = oldVersion),若 version 相同,则更新成功(给新 version 赋一个值,一般加 1)。若 version 不同,则更新失败,可以重新尝试更新操作。

mybatis-plus 实现乐观锁(通过 version 机制)
实现思路:
  Step1:取出记录时,获取当前version
  Step2:更新时,带上这个version
  Step3:执行更新时, set version = newVersion where version = oldVersion
  Step4:如果version不对,就更新失败

mybatis-plus 代码实现乐观锁
Step1:
  配置乐观锁插件。
  编写一个配置类(可以与上例的分页插件共用一个配置类),将 OptimisticLockerInterceptor 通过 @Bean 交给 Spring 管理。

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;@Configuration
// 配置扫描mapper的路径
@MapperScan("com.mapper")
public class MyBatisPlusConfig {// 乐观锁插件//    @Bean//    public OptimisticLockerInterceptor optimisticLockerInterceptor() {//        return new OptimisticLockerInterceptor();//    }
}

Step2:
  定义一个数据库字段 version。

CREATE TABLE test_mybatis_plus_user
(id BIGINT NOT NULL COMMENT '主键ID',name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',age INT(11) NULL DEFAULT NULL COMMENT '年龄',email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',create_time timestamp NULL DEFAULT NULL COMMENT '创建时间',update_time timestamp NULL DEFAULT NULL COMMENT '最后修改时间', delete_flag tinyint(1) NULL DEFAULT NULL COMMENT '逻辑删除(0 未删除、1 删除)',version int NULL DEFAULT NULL COMMENT '版本号(用于乐观锁, 默认为 1)',PRIMARY KEY (id)
);

 Step3:
  使用 @Version 注解标注对应的实体类。
  可以通过 @TableField 进行数据自动填充。

/*** 版本号(用于乐观锁, 默认为 1)*/
@Version
@TableField(fill = FieldFill.INSERT)
private Integer version;@Override
public void insertFill(MetaObject metaObject) {this.strictInsertFill(metaObject, "version", Integer.class, 1);
}

package com.config;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;import java.util.Date;@Component
public class MyMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {// 方法1:在3.3.0+版本可以使用strictInsertFill()、strictUpdateFill()方法// 方法2:通用的自动填充方法this.setFieldValByName("gmtCreate", new Date(), metaObject);this.setFieldValByName("gmtModified", new Date(), metaObject);this.setFieldValByName("version", 0, metaObject); //新增就设置版本值为0}@Overridepublic void updateFill(MetaObject metaObject) {// 这里只有为空才会填充数据 所以修改一下// 方法1:在3.3.0+版本可以使用strictUpdateFill()方法try {if (metaObject.hasSetter("gmtModified")) {metaObject.setValue("gmtModified", null);}} catch (Exception e) {e.printStackTrace();}// 方法2:通用的自动填充方法this.setFieldValByName("gmtModified", new Date(), metaObject);}
}

Step4:
  简单测试一下,可以看一下 控制台 打印的 sql 语句。 

@Test
public void testVersion() {User user = new User();user.setName("tom").setAge(20).setEmail("tom@163.com");userService.save(user);userService.list().forEach(System.out::println);user.setName("jarry");userService.update(user, null);userService.list().forEach(System.out::println);
}

 

http://www.dtcms.com/wzjs/784617.html

相关文章:

  • 一般网站建设方案wordpress用户名和密码
  • 网站开发背景论文wordpress导航栏的文件在哪里
  • 工程资料类网站怎么做没有经验
  • 网站建设利弊聊城做网站最好的网络公司
  • 成都旅游网站长沙网站seo价格
  • 旅游网站做模板素材热门seo推广排名稳定
  • 给男票做网站表白的软件设计之家房屋装修游戏破解版
  • 四川遂宁做网站的公司wordpress删除仪表盘
  • 黑龙江新闻法治在线回放优化公司
  • 蓬莱做网站那家好湖北专业网站建设检修
  • 济南网站建设 找小七淘宝联盟上怎么建设网站
  • 昆山建设局图审中心网站订阅 wordpress
  • 中国宁波网站广州注册公司代理记账
  • 网站做软件有哪些百度免费下载安装百度
  • 网站浏览量提升深圳做网站服务公司
  • 江苏省建设厅网站建筑电工证宁波seo
  • html editor中文版深圳网站推广优化培训
  • 上海房产交易网站安装wordpress 空白
  • 做301到别人网站一级建造师报考条件
  • vue做门户网站用什么ui主做销售招聘的招聘网站有哪些
  • 网站流量变现北京市在建工程项目查询
  • 网站建设一条龙ue365宁波公司网站建设
  • 那种退不掉的网站怎么做的好学校平台网站模板
  • 怎么把WordPress和域名解绑汕头seo快速排名
  • 公司网站制作范文营销网络怎么写
  • 巴中网站建设有限公司大型网络手游游戏排行榜
  • 甘肃微信网站建设多个链接的网站怎么做的
  • 电子商城网站开发 pdf网站空间500m是什么
  • 支付宝也做网站吗建立什么本地网站赚钱
  • 云主机建站网站开发入门书