目录

config

MybatisPlusConfig.java

package com.bijian.mybatisplus.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
//可以将主类中的注解移到此处
@MapperScan("com.bijian.mybatisplus.mapper")
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 添加分页插件
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        // 添加乐观锁插件
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }
}

enums

SexEnum.java

package com.bijian.mybatisplus.enums;

import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.Getter;

@Getter
public enum SexEnum {
    MALE(1, "男"),
    FEMALE(2, "女");

    @EnumValue // 将注解所标识的属性的值存储到数据库中
    private Integer sex;
    private String sexName;

    SexEnum(Integer sex, String sexName) {
        this.sex = sex;
        this.sexName = sexName;
    }
}

java/mapper

ProductMapper.java

package com.bijian.mybatisplus.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bijian.mybatisplus.pojo.Product;
import org.springframework.stereotype.Repository;

@Repository
public interface ProductMapper extends BaseMapper<Product> {

}

UserMapper.java

package com.bijian.mybatisplus.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bijian.mybatisplus.pojo.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Map;

@Repository
public interface UserMapper extends BaseMapper<User> {
    /**
     * 根据id查询用户信息为map集合
     * @param id
     * @return
     */
    Map<String,Object> selectMapById(Long id);

    /**
     * 通过年龄查询用户信息并分页
     * @param page 分页对象,xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位
     * @param age
     * @return
     */
    Page<User> selectPageVo(@Param("page") Page<User> page, @Param("age") Integer age);

}

pojo

Product.java

package com.bijian.mybatisplus.pojo;

import com.baomidou.mybatisplus.annotation.Version;
import lombok.Data;

@Data
public class Product {
    private Long id;
    private String name;
    private Integer price;
    @Version // 标识乐观锁版本号字段
    private Integer version;
}

User.java

package com.bijian.mybatisplus.pojo;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.bijian.mybatisplus.enums.SexEnum;
import lombok.Data;

@Data
//在实体类类型上添加@TableName("t_user"),标识实体类对应的表,即可成功执行SQL语句
//@TableName("t_user")
public class User {
    /*
    * 1. MyBatis-Plus没有将uid作为主键赋值,在实体类中uid属性上通过@TableId将其标识为主键,即可成功执行SQL语句
    * 2. 若实体类中主键对应的属性为id,而表中表示主键的字段为uid,此时若只在属性id上添加注解@TableId,
    *    则抛出异常Unknown column 'id' in 'field list',即MyBatis-Plus仍然会将id作为表的主键操作,
    *    而表中表示主键的是字段uid此时需要通过@TableId注解的value属性,指定表中的主键字段,
    *    @TableId("uid")或@TableId(value="uid")
    * 3. type属性用来定义主键策略
    *    IdType.ASSIGN_ID(默认):基于雪花算法的策略生成数据id,与数据库id是否设置自增无关
    *    IdType.AUTO: 使用数据库的自增策略,注意,该类型请确保数据库设置了id自增,否则无效
    * 4. 雪花算法是由Twitter公布的分布式主键生成算法,它能够保证不同表的主键的不重复性,以及相同表的主键的有序性。
    * */
    @TableId(value = "id")
    private Long id;

    /*
    * 1. 若实体类中的属性使用的是驼峰命名风格,而表中的字段使用的是下划线命名风格例如实体类属性userName,
    *    表中字段user_name此时MyBatis-Plus会自动将下划线命名风格转化为驼峰命名风格
    * 2. 若实体类中的属性和表中的字段不满足情况1,例如实体类属性name,表中字段username,
    *    此时需要在实体类属性上使用@TableField("username")设置属性所对应的字段名
    * */
    @TableField("name")
    private String name;

    private Integer age;

    private String email;

    private SexEnum sex;

    /*
    * @TableLogic:逻辑删除(使用场景:可以进行数据恢复),真正执行的是修改
    * 逻辑删除:假删除,将对应数据中代表是否被删除字段的状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录
    * */

}

service

UserService.java

package com.bijian.mybatisplus.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.bijian.mybatisplus.pojo.User;

public interface UserService extends IService<User> {

}

UserServiceImpl.java

package com.bijian.mybatisplus.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bijian.mybatisplus.mapper.UserMapper;
import com.bijian.mybatisplus.pojo.User;
import com.bijian.mybatisplus.service.UserService;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

}

resources/mapper

UseMapper.xml

<?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">
<mapper namespace="com.bijian.mybatisplus.mapper.UserMapper">

    <!--Map<String, Object> selectMapById(Long id);-->
    <select id="selectMapById" resultType="map">
        select id,name,age,email from t_user where id = #{id}
    </select>

<!--    Page<User> selectPageVo(@Param("page") Page<User> page, @Param("age") Integer age);-->
    <select id="selectPageVo" resultType="User">
        select id,name,age,email from t_user where age > #{age}
    </select>

</mapper>

application.yml

spring:
  profiles:
    active: dev

application-dev.yml

spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=UTC
    username: root
    password: 123456

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      # 配置MyBatis-Plus操作表的默认前缀
      table-prefix: t_
      # 配置MyBatis-Plus的主键策略
#      id-type: auto
  # 配置类型别名所对应的包
  type-aliases-package: com.bijian.mybatisplus.pojo
  # 配置扫描通用枚举
  type-enums-package: com.bijian.mybatisplus.enums

test

MybatisPlusTest

  1 package com.bijian.mybatisplus;
  2 
  3 import com.bijian.mybatisplus.mapper.UserMapper;
  4 import com.bijian.mybatisplus.pojo.User;
  5 import org.junit.jupiter.api.Test;
  6 import org.springframework.beans.factory.annotation.Autowired;
  7 import org.springframework.boot.test.context.SpringBootTest;
  8 
  9 import java.lang.reflect.Array;
 10 import java.util.Arrays;
 11 import java.util.HashMap;
 12 import java.util.List;
 13 import java.util.Map;
 14 
 15 @SpringBootTest
 16 public class MybatisPlusTest {
 17     @Autowired
 18     private UserMapper userMapper;
 19 
 20     @Test
 21     public void testSelectList() {
 22         //selectList()根据MP内置的条件构造器查询一个list集合,null表示没有条件,即查询所有
 23         List<User> list = userMapper.selectList(null);
 24         list.forEach(System.out::println);
 25     }
 26 
 27     @Test
 28     public void testInsert() {
 29         //INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
 30         User user = new User();
 31 
 32 //        user.setName("张三");
 33 //        user.setAge(18);
 34 //        user.setEmail("zhangsan@qq.com");
 35 
 36         user.setName("李四");
 37         user.setAge(20);
 38         user.setEmail("lisi@qq.com");
 39 
 40         int result = userMapper.insert(user);
 41         System.out.println("result:" + result);
 42     }
 43 
 44     @Test
 45     public void testDeleteById(){
 46         //DELETE FROM user WHERE id=?
 47         int result = userMapper.deleteById(1680044786809073666L);
 48         System.out.println(result);
 49     }
 50 
 51     @Test
 52     public void testDeleteByMap(){
 53         //DELETE FROM user WHERE name = ? AND age = ?
 54         Map<String,Object> map = new HashMap<>();
 55         map.put("name","张三");
 56         map.put("age",18);
 57         int result = userMapper.deleteByMap(map);
 58         System.out.println(result);
 59     }
 60 
 61     @Test
 62     public void testDeleteBatchIds(){
 63         //DELETE FROM user WHERE id IN ( ? , ? , ? )
 64         List<Long> list = Arrays.asList(1680047446052380674L, 1680047702899019777L);
 65         int result = userMapper.deleteBatchIds(list);
 66         System.out.println("受影响行数:"+result);
 67     }
 68 
 69     @Test
 70     public void testUpdate(){
 71         // UPDATE user SET name=?, age=?, email=? WHERE id=?
 72         User user = new User();
 73         user.setId(4L);
 74         user.setName("admin");
 75         user.setAge(50);
 76         user.setEmail("admin@qq.com");
 77         int result = userMapper.updateById(user);
 78         System.out.println("result:" + result);
 79     }
 80 
 81     @Test
 82     public void testSelectById(){
 83         // SELECT id,name,age,email FROM user WHERE id=?
 84         User user = userMapper.selectById("1L");
 85         System.out.println(user);
 86     }
 87 
 88     @Test
 89     public void testSelectBatchIds(){
 90         // SELECT id,name,age,email FROM user WHERE id IN ( ? , ? , ? )
 91         List<Long> list = Arrays.asList(1L, 2L, 3L);
 92         List<User> users = userMapper.selectBatchIds(list);
 93         users.forEach(System.out::println);
 94     }
 95 
 96     @Test
 97     public void testSelectByMap(){
 98         // SELECT id,name,age,email FROM user WHERE name = ? AND age = ?
 99         Map<String,Object> map = new HashMap<>();
100         map.put("name","admin");
101         map.put("age",50);
102         List<User> users = userMapper.selectByMap(map);
103         users.forEach(System.out::println);
104     }
105 
106     @Test
107     public void testSelectMapById(){
108         // select id,name,age,email from user where id = ?
109         Map<String, Object> map = userMapper.selectMapById(1L);
110         System.out.println(map); // {name=Jone, id=1, age=18, email=test1@baomidou.com}
111     }
112 }
MybatisPlusTest.java

MyBatisPlusServiceTest

 1 package com.bijian.mybatisplus;
 2 
 3 import com.bijian.mybatisplus.pojo.User;
 4 import com.bijian.mybatisplus.service.UserService;
 5 import org.junit.jupiter.api.Test;
 6 import org.springframework.beans.factory.annotation.Autowired;
 7 import org.springframework.boot.test.context.SpringBootTest;
 8 
 9 import java.util.ArrayList;
10 
11 @SpringBootTest
12 public class MyBatisPlusServiceTest {
13     @Autowired
14     private UserService userService;
15 
16     @Test
17     public void testGetCount() {
18         // SELECT COUNT( * ) FROM user
19         int count = userService.count();
20         System.out.println("总记录数:" + count);
21     }
22 
23     @Test
24     public void testSaveBatch() {
25         // SQL长度有限制,海量数据插入单条SQL无法实行,
26         // 因此MP将批量插入放在了通用Service中实现,而不是通用Mapper
27         // INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
28         ArrayList<User> users = new ArrayList<>();
29         for (int i = 0; i < 25; i++) {
30             User user = new User();
31             user.setName("sjt" + i);
32             user.setAge(30 + i);
33             user.setEmail("sjt" + i + "@qq.com");
34             users.add(user);
35         }
36         boolean result = userService.saveBatch(users);
37         System.out.println(result);
38     }
39 }
MyBatisPlusServiceTest.java

MyBatisPlusWrapperTest

  1 package com.bijian.mybatisplus;
  2 
  3 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  6 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  7 import com.bijian.mybatisplus.mapper.UserMapper;
  8 import com.bijian.mybatisplus.pojo.User;
  9 import org.junit.jupiter.api.Test;
 10 import org.junit.platform.commons.util.StringUtils;
 11 import org.springframework.beans.factory.annotation.Autowired;
 12 import org.springframework.boot.test.context.SpringBootTest;
 13 
 14 import java.util.List;
 15 import java.util.Map;
 16 
 17 @SpringBootTest
 18 public class MyBatisPlusWrapperTest {
 19 
 20     @Autowired
 21     private UserMapper userMapper;
 22 
 23     @Test
 24     public void test01() {
 25         // 查询用户名包含a,年龄在20到30之间,并且邮箱不为null的用户信息
 26         // SELECT id,name,age,email FROM t_user WHERE (name LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL)
 27         QueryWrapper<User> queryWrapper = new QueryWrapper<>();
 28         queryWrapper.like("name", "a").between("age", 20, 30).isNotNull("email");
 29         List<User> users = userMapper.selectList(queryWrapper);
 30         users.forEach(System.out::println);
 31     }
 32 
 33     @Test
 34     public void test02() {
 35         // 按年龄降序查询用户,如果年龄相同则按id升序排列
 36         // SELECT id,name,age,email FROM t_user ORDER BY age DESC,id ASC
 37         QueryWrapper<User> queryWrapper = new QueryWrapper<>();
 38         queryWrapper.orderByDesc("age").orderByAsc("id");
 39         List<User> users = userMapper.selectList(queryWrapper);
 40         users.forEach(System.out::println);
 41     }
 42 
 43     @Test
 44     public void test03() {
 45         // 删除email为空的用户
 46         // DELETE FROM t_user WHERE (email IS NULL)
 47         QueryWrapper<User> queryWrapper = new QueryWrapper<>();
 48         queryWrapper.isNull("email");
 49         int result = userMapper.delete(queryWrapper);
 50         System.out.println("受影响的行数:" + result);
 51     }
 52 
 53     @Test
 54     public void test04() {
 55         QueryWrapper<User> queryWrapper = new QueryWrapper<>();
 56         // 将(年龄大于40并且用户名中包含有a)或邮箱为null的用户信息修改
 57         // UPDATE t_user SET age=? WHERE (age > ? AND name LIKE ? OR email IS NULL)
 58 //        queryWrapper.gt("age",40).like("name","a").or().isNull("email");
 59 
 60         // 将用户名中包含有a并且(年龄大于30或邮箱为null)的用户信息修改
 61         // lambda表达式内的逻辑优先运算
 62         // UPDATE t_user SET age=? WHERE (name LIKE ? AND (age > ? OR email IS NULL))
 63         queryWrapper.like("name", "a").and(i -> i.gt("age", 30).or().isNull("email"));
 64         User user = new User();
 65         user.setAge(55);
 66         int result = userMapper.update(user, queryWrapper);
 67         System.out.println("受影响的行数:" + result);
 68     }
 69 
 70     @Test
 71     public void test05() {
 72         // 查询用户信息的username和age字段
 73         // SELECT name,age FROM t_user
 74         // //selectMaps()返回Map集合列表,通常配合select()使用,避免User对象中没有被查询到的列值为null
 75         QueryWrapper<User> queryWrapper = new QueryWrapper<>();
 76         queryWrapper.select("name", "age");
 77         List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);
 78         maps.forEach(System.out::println);
 79     }
 80 
 81     @Test
 82     public void test06() {
 83         // 查询id小于等于3的用户信息
 84         // SELECT id,name,age,email FROM t_user WHERE (id IN (select id from t_user where id <= 3))
 85         QueryWrapper<User> queryWrapper = new QueryWrapper<>();
 86         queryWrapper.inSql("id", "select id from t_user where id <= 3");
 87         List<User> users = userMapper.selectList(queryWrapper);
 88         users.forEach(System.out::println);
 89     }
 90 
 91     @Test
 92     public void test07() {
 93         UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
 94         // 将(年龄大于40或邮箱为null)并且用户名中包含有a的用户信息修改
 95         // UPDATE t_user SET age=? WHERE (name LIKE ? AND (age >= ? OR email IS NULL))
 96         updateWrapper.set("age", 55).like("name", "a").and(i -> i.ge("age", 40).or().isNull("email"));
 97         // 这里必须要创建User对象,否则无法应用自动填充。如果没有自动填充,可以设置为null
 98         int result = userMapper.update(null, updateWrapper);
 99         System.out.println(result);
100     }
101 
102     @Test
103     public void test08() {
104         // 定义查询条件,有可能为null(用户未输入或未选择)
105         // SELECT id,name,age,email FROM t_user WHERE (age >= ? AND age <= ?)
106         String name = null;
107         Integer ageBegin = 10;
108         Integer ageEnd = 24;
109         QueryWrapper<User> queryWrapper = new QueryWrapper<>();
110         if (StringUtils.isNotBlank(name)) {
111             queryWrapper.like("name", "a");
112         }
113         if (ageBegin != null) {
114             queryWrapper.ge("age", ageBegin);
115         }
116         if (ageEnd != null) {
117             queryWrapper.le("age", ageEnd);
118         }
119 
120         List<User> users = userMapper.selectList(queryWrapper);
121         users.forEach(System.out::println);
122     }
123 
124     @Test
125     public void test08_2() {
126         String name = null;
127         Integer ageBegin = 10;
128         Integer ageEnd = 24;
129         QueryWrapper<User> queryWrapper = new QueryWrapper<>();
130         queryWrapper.like(StringUtils.isNotBlank(name), "name", "a")
131                     .ge(ageBegin != null, "age", ageBegin)
132                     .le(ageEnd != null, "age", ageEnd);
133         List<User> users = userMapper.selectList(queryWrapper);
134         users.forEach(System.out::println);
135     }
136 
137     @Test
138     public void test09() {
139         String name = null;
140         Integer ageBegin = 10;
141         Integer ageEnd = 24;
142         LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
143         //避免使用字符串表示字段,防止运行时错误
144         queryWrapper.like(StringUtils.isNotBlank(name),User::getName,name)
145                     .ge(ageBegin != null,User::getAge,ageBegin)
146                     .le(ageEnd!=null,User::getAge,ageEnd);
147         List<User> users = userMapper.selectList(queryWrapper);
148         users.forEach(System.out::println);
149     }
150 
151     @Test
152     public void test10() {
153         LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>();
154         updateWrapper.set(User::getAge, 55)
155                      .like(User::getName, "a")
156                       .and(i -> i.ge(User::getAge, 40).or().isNull(User::getEmail));
157         int result = userMapper.update(null, updateWrapper);
158         System.out.println(result);
159     }
160 }
MyBatisPlusWrapperTest.java

MybatisPlusEnumTest

 1 package com.bijian.mybatisplus;
 2 
 3 import com.bijian.mybatisplus.enums.SexEnum;
 4 import com.bijian.mybatisplus.mapper.UserMapper;
 5 import com.bijian.mybatisplus.pojo.User;
 6 import org.junit.jupiter.api.Test;
 7 import org.springframework.beans.factory.annotation.Autowired;
 8 import org.springframework.boot.test.context.SpringBootTest;
 9 
10 @SpringBootTest
11 public class MybatisPlusEnumTest {
12     @Autowired
13     private UserMapper userMapper;
14 
15     @Test
16     public void testSexEnum() {
17         User user = new User();
18         user.setName("Enum");
19         user.setAge(20);
20         //设置性别信息为枚举项,会将@EnumValue注解所标识的属性值存储到数据库
21         user.setSex(SexEnum.MALE);
22         int result = userMapper.insert(user);
23         System.out.println("result:" + result);
24     }
25 
26 }
MybatisPlusEnumTest.java

MybatisPlusPluginsTest

  1 package com.bijian.mybatisplus;
  2 
  3 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  4 import com.bijian.mybatisplus.mapper.ProductMapper;
  5 import com.bijian.mybatisplus.mapper.UserMapper;
  6 import com.bijian.mybatisplus.pojo.Product;
  7 import com.bijian.mybatisplus.pojo.User;
  8 import org.junit.jupiter.api.Test;
  9 import org.springframework.beans.factory.annotation.Autowired;
 10 import org.springframework.boot.test.context.SpringBootTest;
 11 
 12 import java.util.List;
 13 
 14 @SpringBootTest
 15 public class MybatisPlusPluginsTest {
 16     @Autowired
 17     private UserMapper userMapper;
 18     @Autowired
 19     private ProductMapper productMapper;
 20 
 21     @Test
 22     public void testPage(){
 23         //设置分页参数
 24         Page<User> page = new Page<>(2,5);
 25         userMapper.selectPage(page,null);
 26         //获取分页数据
 27         List<User> list = page.getRecords();
 28         list.forEach(System.out::println);
 29         System.out.println("当前页:"+page.getCurrent());
 30         System.out.println("每页显示的条数:"+page.getSize());
 31         System.out.println("总记录数:"+page.getTotal());
 32         System.out.println("总页数:"+page.getPages());
 33         System.out.println("是否有上一页:"+page.hasPrevious());
 34         System.out.println("是否有下一页:"+page.hasNext());
 35     }
 36 
 37     @Test
 38     public void testSelectPageVo(){
 39         Page<User> page = new Page<>(1,5);
 40         userMapper.selectPageVo(page,30);
 41         List<User> list = page.getRecords();
 42         list.forEach(System.out::println);
 43         System.out.println("当前页:"+page.getCurrent());
 44         System.out.println("每页显示的条数:"+page.getSize());
 45         System.out.println("总记录数:"+page.getTotal());
 46         System.out.println("总页数:"+page.getPages());
 47         System.out.println("是否有上一页:"+page.hasPrevious());
 48         System.out.println("是否有下一页:"+page.hasNext());
 49     }
 50 
 51     @Test
 52     public void testConcurrentUpdate(){
 53         //1、小李
 54         Product p1 = productMapper.selectById(1L);
 55         System.out.println("小李取出的价格:" + p1.getPrice());
 56         //2、小王
 57         Product p2 = productMapper.selectById(1L);
 58         System.out.println("小王取出的价格:" + p2.getPrice());
 59         //3、小李将价格加了50元,存入了数据库 UPDATE t_product SET name=?, price=?, version=1 WHERE id=? AND version=0
 60         p1.setPrice(p1.getPrice()+50);
 61         int result1 = productMapper.updateById(p1);
 62         System.out.println("小李修改结果:" + result1);
 63         //4、小王将商品减了30元,存入了数据库 UPDATE t_product SET name=?, price=?, version=? WHERE id=? AND version=0
 64         p2.setPrice(p2.getPrice() - 30);
 65         int result2 = productMapper.updateById(p2);
 66         System.out.println("小王修改结果:" + result2);
 67         //最后的结果
 68         Product p3 = productMapper.selectById(1L);
 69         //价格覆盖,最后的结果:70
 70         System.out.println("最后的结果:" + p3.getPrice());
 71     }
 72 
 73     @Test
 74     public void testConcurrentUpdate2(){
 75         //1、小李
 76         Product p1 = productMapper.selectById(1L);
 77         System.out.println("小李取出的价格:" + p1.getPrice());
 78         //2、小王
 79         Product p2 = productMapper.selectById(1L);
 80         System.out.println("小王取出的价格:" + p2.getPrice());
 81         //3、小李将价格加了50元,存入了数据库
 82         p1.setPrice(p1.getPrice()+50);
 83         int result1 = productMapper.updateById(p1);
 84         System.out.println("小李修改结果:" + result1);
 85         //4、小王将商品减了30元,存入了数据库
 86         p2.setPrice(p2.getPrice() - 30);
 87         int result2 = productMapper.updateById(p2);
 88         System.out.println("小王修改结果:" + result2);
 89         //5、失败重试,重新获取version并更新
 90         if (result2==0){
 91             p2 = productMapper.selectById(1L);
 92             p2.setPrice(p2.getPrice()-30);
 93             result2 = productMapper.updateById(p2);
 94         }
 95         System.out.println("小王修改重试的结果:" + result2);
 96         //6、老板看价格
 97         Product p3 = productMapper.selectById(1L);
 98         System.out.println("老板看价格:" + p3.getPrice());
 99     }
100 }
MybatisPlusPluginsTest.java

FastAutoGeneratorTest

 1 package com.bijian.mybatisplus;
 2 
 3 import com.baomidou.mybatisplus.generator.FastAutoGenerator;
 4 import com.baomidou.mybatisplus.generator.config.OutputFile;
 5 import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
 6 
 7 import java.util.Collections;
 8 
 9 public class FastAutoGeneratorTest {
10 
11     public static void main(String[] args) {
12         FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3306/mybatis_plus?serverTimezone=UTC", "root", "123456")
13                 .globalConfig(builder -> {
14                     builder.author("bijian") // 设置作者
15                             //.enableSwagger() // 开启 swagger 模式
16                             .fileOverride() // 覆盖已生成文件
17                             .outputDir("D://IdeaProjects//mybatis_plus"); // 指定输出目录
18                 })
19                 .packageConfig(builder -> {
20                     builder.parent("com.bijian") // 设置父包名
21                             .moduleName("mybatisplus") // 设置父包模块名
22                             .pathInfo(Collections.singletonMap(OutputFile.xml, "D://IdeaProjects//mybatis_plus")); // 设置mapperXml生成路径
23                 })
24                 .strategyConfig(builder -> {
25                     builder.addInclude("t_user") // 设置需要生成的表名
26                             .addTablePrefix("t_", "c_"); // 设置过滤表前缀
27                 })
28                 .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
29                 .execute();
30     }
31 
32 }
FastAutoGeneratorTest.java

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.6</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.bijian</groupId>
    <artifactId>mybatisplus</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mybatisplus</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.21</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.0</version>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
pom.xml

 

posted on 2023-07-16 08:36  晨曦生辉耀匕尖  阅读(12)  评论(0编辑  收藏  举报