接口测试-myMybatis-Plus代码生成器|乐观锁

一、myMybatis-Plus代码生成器

1.主要代码

package com.example.demo;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.ArrayList;
public class CodeDemo {

	    public static void main(String[] args) {
	        //构建代码生成器对象
	        AutoGenerator mpg = new AutoGenerator();
	        //1、全局配置
	        GlobalConfig gc = new GlobalConfig();
//	        String projectPath = System.getProperty("D:/AAA/LSpost/6spring/spring_workspace");
	        String projectPath = System.getProperty("user.dir");
	        gc.setOutputDir(projectPath + "/src/main/java");//生成文件的输出目录
	        gc.setAuthor("左丽硕");//作者
	        gc.setOpen(false);//是否打开输出目录
	        gc.setFileOverride(false);//是否覆盖已有的文件
	        gc.setServiceName("%sService");//去除Service的I前缀
	        gc.setIdType(IdType.ID_WORKER);//主键生成策略
	        //ONLY_DATE 只使用 java.util.date 代替,SQL_PACK 使用 java.sql 包下的,TIME_PACK 使用 java.time 包下的 java8 新的时间类型
	        gc.setDateType(DateType.TIME_PACK);//数据库时间类型 到 实体类时间类型 对应策略
	        gc.setSwagger2(true);//开启swagger2模式
	        mpg.setGlobalConfig(gc);

	        //2、数据源配置
	        DataSourceConfig dsc = new DataSourceConfig();
	        dsc.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&useSSL=false");
	        dsc.setDriverName("com.mysql.jdbc.Driver");
	        dsc.setUsername("root");
	        dsc.setPassword("123456");
	        dsc.setDbType(DbType.MYSQL);//数据库类型
	        mpg.setDataSource(dsc);

	        //3、包的配置
	        PackageConfig pc = new PackageConfig();
	        pc.setModuleName("blog");//父包模块名
	        pc.setParent("com.example.demo");//父包名,如果为空,将下面子包名必须写全部, 否则就只需写子包名
	        pc.setEntity("pojo");
	        pc.setMapper("mapper");
	        pc.setService("service");
	        pc.setController("controller");
	        mpg.setPackageInfo(pc);

	        //4、策略配置
	        StrategyConfig sy = new StrategyConfig();
	        sy.setInclude("user");//设置要映射的表,可以设置多张
	        sy.setNaming(NamingStrategy.underline_to_camel);//从数据库表到文件的命名策略,下划线转驼峰命名
	        sy.setColumnNaming(NamingStrategy.underline_to_camel);//列的命名策略
	        sy.setEntityLombokModel(true);//开启lombok支持
	        sy.setLogicDeleteFieldName("deleted");//设置逻辑删除字段
	        sy.setVersionFieldName("version");//设置乐观锁
	        sy.setRestControllerStyle(true);//开启controller的restful命名
	        sy.setControllerMappingHyphenStyle(true);//开启controller中请求映射的连字符样式,如:localhost:8080/hello_id_1
	        //设置自动填充
	        TableFill create_time = new TableFill("create_time", FieldFill.INSERT);
	        TableFill update_time = new TableFill("update_time", FieldFill.INSERT_UPDATE);
	        ArrayList<TableFill> tableFills = new ArrayList<>();
	        tableFills.add(create_time);
	        tableFills.add(update_time);
	        mpg.setStrategy(sy);

	        //执行代码生成器
	        mpg.execute();
	    }
	}

2.pom.xml添加的依赖

<dependencies>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.12</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.0.5</version>
		</dependency>
		<dependency>
			<groupId>org.apache.velocity</groupId>
			<artifactId>velocity-engine-core</artifactId>
			<version>2.0</version>
		</dependency>
		<dependency>
			<groupId>io.swagger</groupId>
			<artifactId>swagger-annotations</artifactId>
			<version>1.5.19</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.49</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.72</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>

3.配置文件application.yml

#端口号
server:
  port: 6666
  

#连接数据库 
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&useSSL=false
    username: root  
    password: 123456
  main:
    banner-mode: off



mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    banner: false

4.效果图

在这里插入图片描述

二.乐观锁

实现:数据库中增加一个version字段作为乐观锁的版本号,通过version控制并发
对应的实体类中添加版本号属性以及注解@Version
查询需要修改的数据条目【select字段:需修改字段和当前版本号;where条件:唯一值】
执行程序,修改当前条目【update字段:更新数据,版本号加1;where条件:唯一值,版本号=查询出版本号】

1.数据库的表中添加version一列

在这里插入图片描述

2.实体类中添加version

 @Version
    private Integer version;

3.添加乐观锁

package com.example.demo;


import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;

@EnableTransactionManagement
@Configuration
@MapperScan("com.example.demo.blog.mapper")
public class MonApplicationTests {

	    
	    //乐观锁拦截器
	    @Bean
	    public OptimisticLockerInterceptor optimisticLockerInterceptor(){
	        return new OptimisticLockerInterceptor();
	    }
	}

4.测试代码

package com.example.demo;


import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import com.example.demo.blog.mapper.UserMapper;
import com.example.demo.blog.pojo.User;

@SpringBootTest
public class TestDemo {
	    @Autowired
	    private UserMapper userMapper;

	    @Test
	    public void testOptimisticLocker(){

	        //根据id查询数据
	        User user = userMapper.selectById("2");
	        //进行修改
	        user.setAge(200);
	        userMapper.updateById(user);
	    }


	}

5.效果图

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值