java mybatis 乐观锁,Springboot2整合Mybatisplus实现乐观锁

1.添加pom文件

mysql

mysql-connector-java

runtime

org.projectlombok

lombok

true

com.baomidou

mybatis-plus-boot-starter

3.1.0

com.alibaba

druid

1.1.6

2.配置文件application.properties

server.port=8088

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

spring.datasource.username=root

spring.datasource.password=root

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

3.编写Mybatis-puls配置类

@Configuration

public class MybatisPlusConfig {

//乐观锁配置

@Bean

public OptimisticLockerInterceptor optimisticLockerInterceptor() {

return new OptimisticLockerInterceptor();

}

//下面随意配置

/**

* mybatis-plus SQL执行效率插件【生产环境可以关闭】

*/

@Bean

public PerformanceInterceptor performanceInterceptor() {

return new PerformanceInterceptor();

}

/**

* 分页插件

*/

@Bean

public PaginationInterceptor paginationInterceptor() {

return new PaginationInterceptor();

}

@Bean

public RestTemplate getRestTemplate(){

return new RestTemplate();

}

//逻辑删除

@Bean

public ISqlInjector sqlInjector() {

return new LogicSqlInjector();

}

}

4.编写entity对象

@Data //注意需要下载lombok插件,不行就写get和set方法

@TableName("bank")

public class Bank implements Serializable {

private static final long serialVersionUID = 1L;

@TableId(type = IdType.AUTO)

private Integer id;

private Integer amount;

@Version

private Integer version;

private Integer userId;

}

5.编写Mapper

@Mapper

public interface BankMapper extends BaseMapper{

}

6.编写Service

public interface BankSerice extends IService{

}

7.编写实现层,根据业务场景去写,这里不详细说明了

@Service

public class BankSeviceImpl extends ServiceImplimplements BankSerice {

}

8.编写控制层

@RestController

public class BankController {

@Autowired

BankSerice bankService;

@RequestMapping("/bank/{userId}/{money}")

public String access(@PathVariable("userId") String userId, @PathVariable("money") Integer money) throws InterruptedException {

QueryWrapperqueryWrapper = new QueryWrapper<>();

queryWrapper.eq("user_id", userId);

Bank bank = bankService.getOne(queryWrapper);

Integer amount = bank.getAmount();

bank.setAmount(amount + money);

Thread.sleep(5000);

boolean b = bankService.updateById(bank);

if (b) {

return "更新成功";

}

return "更新失败,余额已被其他操作人员修改,请重试";

}

}

9.数据库执行SQL

CREATE TABLE `bank` (

`id` INT(11) NOT NULL,

`amount` INT(10) DEFAULT NULL COMMENT '余额',

`version` INT(5) DEFAULT NULL COMMENT '版本号',

`user_id` INT(11) DEFAULT NULL COMMENT '用户id',

PRIMARY KEY (`id`) USING BTREE

) ENGINE=INNODB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC

INSERT INTO bank (id,amount,VERSION,user_id) VALUES (1,100,0,2)

10.启动Springboot访问http://localhost:8088/bank/2/100

d08a4d5f7ab3beb19bca076305388ebe.png

点击2次同时访问

ce656704d485494a6bf952d8f63fbb9f.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 3.3版本尚未发布,目前最新的Spring Boot稳定版是2.7.x系列。不过,我可以为你介绍如何在较新的Spring Boot版本(如2.6.x或更高)中整合MyBatisPlus。 **整合步骤:** 1. **添加依赖**: 在你的`pom.xml`或`build.gradle`文件中,添加MyBatisPlus和Spring Data JPA的依赖。例如: Maven: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> <!-- 最新版本号,请根据实际情况更新 --> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> ``` Gradle: ```groovy implementation 'com.baomidou:mybatis-plus-boot-starter:3.4.2' // 最新版本号,请根据实际情况更新 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' ``` 2. **配置数据源**: 在`application.properties`或`application.yml`中设置数据源相关配置,比如数据库URL、用户名、密码等。 ```properties spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=false spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ``` 3. **启用扫描**: 在Spring Boot的配置类上添加`@EnableGlobalMethodSecurity`和`@EnableJpaRepositories`注解,启用全局方法安全和JPA仓库扫描。 ```java @SpringBootApplication @EnableGlobalMethodSecurity(prePostEnabled = true) @EnableJpaRepositories(basePackages = "your.package.name") public class Application { // ... } ``` 4. **实体和映射器**: 创建你的数据模型(Entity)和Mapper接口(Mapper Interface),MyBatisPlus会自动为这些接口生成对应的实现类。 5. **扫描配置**: 配置MyBatisPlus的扫描路径,通常放在启动类中: ```java @MapperScan("your.package.name.mapper") // 替换为你的Mapper接口所在的包名 ``` 6. **使用Repository**: 创建Repository接口,Spring Data JPA会自动代理这些接口并提供CRUD操作。 ```java public interface UserRepository extends JpaRepository<User, Long> { //... } ``` **相关问题--:** 1. Spring Boot 3.3的主要特性有哪些? 2. MyBatisPlus与MyBatis相比有何优势? 3. 如何处理Spring Boot中的事务管理? 4. 我需要为MyBatisPlus自定义SQL查询时怎么做?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值