mybatis-plus结合springboot使用

mybatis-plus入门使用-代码仓库:https://gitee.com/DerekAndroid/mybatisPlusDemo.git

mybatis-plus入门使用:

1.sql准备

DROP TABLE IF EXISTS user;

CREATE TABLE user
(
	id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
	name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
	age INT(11) NULL DEFAULT NULL COMMENT '年龄',
	email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY (id)
);

DELETE FROM user;

INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, '[email protected]'),
(2, 'Jack', 20, '[email protected]'),
(3, 'Tom', 28, '[email protected]'),
(4, 'Sandy', 21, '[email protected]'),
(5, 'Billie', 24, '[email protected]');

usertwo.sql

DROP TABLE IF EXISTS usertwo;
 
#创建用户表
CREATE TABLE usertwo (
    id BIGINT(20) PRIMARY KEY NOT NULL COMMENT '主键',
    name VARCHAR(30) DEFAULT NULL COMMENT '姓名',
    age INT(11) DEFAULT NULL COMMENT '年龄',
    email VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
    manager_id BIGINT(20) DEFAULT NULL COMMENT '直属上级id',
    create_time DATETIME DEFAULT NULL COMMENT '创建时间',
    CONSTRAINT manager_fk FOREIGN KEY (manager_id)
        REFERENCES usertwo (id)
)  ENGINE=INNODB CHARSET=UTF8;

#初始化数据:
INSERT INTO usertwo (id, name, age, email, manager_id
	, create_time)
VALUES (1087982257332887553, '大boss', 40, '[email protected]', NULL
		, '2019-01-11 14:20:20'),
	(1088248166370832385, '王天风', 25, '[email protected]', 1087982257332887553
		, '2019-02-05 11:12:22'),
	(1088250446457389058, '李艺伟', 28, '[email protected]', 1088248166370832385
		, '2019-02-14 08:31:16'),
	(1094590409767661570, '张雨琪', 31, '[email protected]', 1088248166370832385
		, '2019-01-14 09:15:15'),
	(1094592041087729666, '刘红雨', 32, '[email protected]', 1088248166370832385
		, '2019-01-14 09:48:16');

2.springboot依赖+配置



	4.0.0
	
		org.springframework.boot
		spring-boot-starter-parent
		2.2.6.RELEASE
		 
	
	com.example
	demo
	0.0.1-SNAPSHOT
	mybatisPlusDemo
	Demo project for Spring Boot

	
		1.8
	

	
		
			org.springframework.boot
			spring-boot-starter
		

		
			org.springframework.boot
			spring-boot-starter-test
			test
			
				
					org.junit.vintage
					junit-vintage-engine
				
			
		

		
			org.projectlombok
			lombok
			true
			1.18.8
		
		
			com.baomidou
			mybatis-plus-boot-starter
			3.3.1.tmp
		
		
		
			mysql
			mysql-connector-java
		

		
			com.baomidou
			mybatis-plus-boot-starter
			3.3.1.tmp
		
		
			com.baomidou
			mybatis-plus-generator
			3.3.1.tmp
		
		





		
		
			org.freemarker
			freemarker
			2.3.30
		
		
			junit
			junit
			4.12
			compile
		
		
			org.springframework.boot
			spring-boot-starter-web
			compile
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	


逆向工程自动生成

根据创建好的数据库执行自动生成mybtais配置文件

注意:freemarker依赖需要配合模板使用

autoGenerator.setTemplateEngine(new FreemarkerTemplateEngine());

 自动生成类

package com.example.demo.test;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
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.rules.NamingStrategy;
import org.junit.Test;

public class SqlGenerator {
    @Test
    public void testGenerator(){
        //0.获取当前主项目路径
        String dir = System.getProperty("user.dir");
        String outputDir=dir+"/src/main/java";
        System.out.println("outputDir="+outputDir);
        //1、全局配置
        GlobalConfig config = new GlobalConfig();
        config.setActiveRecord(true)//开启AR模式
                .setAuthor("agen")//设置作者
                //生成路径(一般都是生成在此项目的src/main/java下面)
                .setOutputDir(outputDir)
                .setFileOverride(true)//第二次生成会把第一次生成的覆盖掉
                .setIdType(IdType.AUTO)//主键策略
                .setServiceName("%sService")//生成的service接口名字首字母是否为I,这样设置就没有I
                .setBaseResultMap(true)//生成resultMap
                .setBaseColumnList(true);//在xml中生成基础列
        //2、数据源配置
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setDbType(DbType.MYSQL)//数据库类型
                .setDriverName("com.mysql.jdbc.Driver")
                .setUrl("jdbc:mysql://localhost:3306/boot_user?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC")
                .setUsername("root")
                .setPassword("123");
        //3、策略配置
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig.setCapitalMode(true)//开启全局大写命名
                .setNaming(NamingStrategy.underline_to_camel)//下划线到驼峰的命名方式
                .setTablePrefix("tb_")//表名前缀
                .setEntityLombokModel(true)//使用lombok
                .setInclude("user");//逆向工程使用的表
        //4、包名策略配置
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent("com.example.demo")//设置包名的parent
                .setMapper("mapper")
                .setService("service")
                .setController("controller")
                .setEntity("entity")
                .setXml("mapper");//设置xml文件的目录
        //5、整合配置
        AutoGenerator autoGenerator = new AutoGenerator();
        autoGenerator.setGlobalConfig(config)
                .setDataSource(dataSourceConfig)
                .setStrategy(strategyConfig)
                .setPackageInfo(packageConfig);
        //6、执行
        autoGenerator.execute();
    }
}

生成的效果文件

mybatis-plus结合springboot使用_第1张图片

按模板自动生成代码:

注意:baseEntity需要自己创建实现

package com.example.demo.test;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
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.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.junit.Test;

public class SqlGenerator {
    @Test
    public void testOne(){
        String dir = System.getProperty("user.dir");
        String outputDir=dir+"/src/main/java";
        System.out.println("outputDir="+outputDir);
        //D:\java\code\mybatisPlusDemo/src/main/java
    }

    @Test
    public void testGenerator(){
        //0.获取当前主项目路径
        String dir = System.getProperty("user.dir");
        String outputDir=dir+"/src/main/java";
        System.out.println("outputDir="+outputDir);

        //1、全局配置
        GlobalConfig config = new GlobalConfig();
        config.setActiveRecord(true)//开启AR模式
                .setAuthor("agen")//设置作者
                //生成路径(一般都是生成在此项目的src/main/java下面)
                .setOutputDir(outputDir)
                .setFileOverride(true)//第二次生成会把第一次生成的覆盖掉
                .setIdType(IdType.AUTO)//主键策略
                .setServiceName("%sService")//生成的service接口名字首字母是否为I,这样设置就没有I
                .setBaseResultMap(true)//生成resultMap
                .setBaseColumnList(true);//在xml中生成基础列
        //2、数据源配置
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setDbType(DbType.MYSQL)//数据库类型
                .setDriverName("com.mysql.jdbc.Driver")
                .setUrl("jdbc:mysql://localhost:3306/boot_user?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC")
                .setUsername("root")
                .setPassword("123");
        //3、策略配置
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig.setCapitalMode(true)//开启全局大写命名
                .setNaming(NamingStrategy.underline_to_camel)//下划线到驼峰的命名方式
                .setTablePrefix("tb_")//表名前缀
                .setEntityLombokModel(true)//使用lombok
                .setInclude("children");//逆向工程使用的表
        //4、包名策略配置
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent("com.example.demo")//设置包名的parent
                .setMapper("mapper")
                .setService("service")
                .setController("controller")
                .setEntity("entity")
                .setXml("mapper");//设置xml文件的目录
        //5、整合配置
        AutoGenerator autoGenerator = new AutoGenerator();
        autoGenerator.setGlobalConfig(config)
                .setDataSource(dataSourceConfig)
                .setStrategy(strategyConfig)
                .setPackageInfo(packageConfig);

        // 选择 freemarker 引擎需要指定如下加,注意 pom 依赖必须有!
        autoGenerator.setTemplateEngine(new FreemarkerTemplateEngine());
        //6、执行
        autoGenerator.execute();
    }
}

控制台输入模块us ,输入表名usertwo

 

生成的文件目录

mybatis-plus结合springboot使用_第2张图片

4编写查询语句

package com.example.demo.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import com.example.demo.service.UserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 

* 服务实现类 *

* * @author agen * @since 2020-04-17 */ @Service @Slf4j public class UserServiceImpl extends ServiceImpl implements UserService { @Autowired private UserMapper userMapper; public void insertUser(User user) { log.info("----------------插入一条记录: insert user----------------"); userMapper.insert(user); } public void serviceSave(User user) { log.info("----------------service插入一条记录: save user----------------"); save(user); } public void selectTest() { log.info("----------------按主键查询: where id=2----------------"); User user = userMapper.selectById(1); log.info(user.toString()); log.info("----------------按主键查询: where id=2 ? and age=?----------------"); User user1 = new User(); user1.setId(2L); user1.setAge(20); QueryWrapper queryWrapper = new QueryWrapper<>(user1); User user2 = userMapper.selectOne(queryWrapper); log.info(user2.toString()); } }

分页插件

1.配置文件

//Spring boot方式
@Configuration
@MapperScan("com.example.demo.mapper")
public class MybatisPlusConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
        // paginationInterceptor.setOverflow(false);
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        // paginationInterceptor.setLimit(500);
        // 开启 count 的 join 优化,只针对部分 left join
        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
        return paginationInterceptor;
    }
}

2.测试自带分页

package com.example.demo;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;

@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
class DemoApplicationTests {

    @Resource
    private UserMapper mapper;

    @Test
    void contextLoads() {
        System.out.println(("----- selectAll method test ------"));
    }

    @Test
    public void testSlf4j() {
        log.error("----------------------------------baseMapper 自带分页-------------------------------------------------------");
        Page page = new Page<>(1, 3);
        Page userIPage = mapper.selectPage(page, Wrappers.lambdaQuery().ge(User::getAge, 1).orderByDesc(User::getId));
        log.error("总数据 -------------> {}", userIPage.getRecords().toArray());
        log.error("总条数 -------------> {}", userIPage.getTotal() + "当前页数 -------------> {}" + userIPage.getCurrent() +
				"当前每页显示数 -------------> {}" + userIPage.getSize());
    }

}

json 正反序列化

    @Test
    public void testSlf4j() {
        log.error("----------------------------------baseMapper 自带分页-------------------------------------------------------");
        Page page = new Page<>(1, 3);
        page.addOrder(OrderItem.asc("age"));
        Page userIPage = mapper.selectPage(page, Wrappers.lambdaQuery().ge(User::getAge, 20));
        log.error("总数据 -------------> {}", userIPage.getRecords().toString());
        log.error("总条数 -------------> {}", userIPage.getTotal() + "当前页数 -------------> {}" + userIPage.getCurrent() +
                "当前每页显示数 -------------> {}" + userIPage.getSize());

        log.error("----------------------------------json 正反序列化-------------------------------------------------------");
        log.info("page ----------> {}", page.getRecords().toString());
        String json = JSON.toJSONString(page);
        log.info("json ----------> {}", json);
        //{"current":1,"hitCount":false,"orders":[],"pages":6,"records":[{"age":24,"email":"[email protected]","id":17,"name":"Billie"},{"age":21,"email":"[email protected]","id":16,"name":"Sandy"},{"age":28,"email":"[email protected]","id":15,"name":"Tom"}],"searchCount":true,"size":3,"total":17}
}


        //反序列化 json->object
        Page page1 = JSON.parseObject(json, new TypeReference>() {
        });
        log.info("page1.getRecords ----------> {}", page1.getRecords());
        //[User(id=2, name=Jack, age=20, [email protected]), User(id=14, name=Jack, age=20, [email protected]), User(id=13, name=Jack, age=20, [email protected])]
    }

 

表名、表字段改变,同步绑定操作

通过配置TableName同步更新表明

@TableName("user")
public class User extends Model {

    private static final long serialVersionUID=1L;

    /**
     * 主键ID
     */
      @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 姓名
     */
    @TableField("name")
    private String name;

配置多个mapper路径

springboot项目有时会涉及多数据源,因为我们通常每个数据源创建不同的包路径,mapper.xml的路径也不一样,这个时候就需要引入多个路径。

数据源1,mapper接口路径在 mapper包下面,mapper.xml 路径在 resources/mappers/下面; 

数据源2,mapper接口路径在 mapper/other包下面,mapper.xml 路径在 resources/mappers/other下面:

配置总共分两步:

第一步 :

在mybatisplus配置类里面修改扫描包路径:

@SpringBootApplication
@MapperScan({"com.example.demo.mapper","com.example.demo.**.mapper"})
public class DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}

}

第二步:

修项目的application.yml配置文件中配置mapper.xml路径如下:

mybatis-plus:
#   1.配置多个classpath:用,分割开  2.Maven 多模块项目的扫描路径需以 classpath*: 开头 (即加载多个 jar 包下的 XML 文件)
  mapper-locations: classpath*:/mapper/us/*Mapper.xml,classpath*:/mapper/*Mapper.xml

使用 Wrapper 自定义SQL

注意,如果使用xml方式,需要配置正确的路径

此处采用注解+xml的形式

public interface UserMapper extends BaseMapper {


    @Select("SELECT * FROM user where name = #{name}")
    List selectByName(@Param("name") String name);

    List selectByNameTwo(@Param("name") String name);

    @Select("select * from user ${ew.customSqlSegment}")
    List mySelectMap(@Param(Constants.WRAPPER) Wrapper wrapper);
}

xml配置

    

测试

   @Test
    public void testMap() {
        log.info("------------------------------使用 Wrapper 自定义SQL---------->-");
        QueryWrapper wrapper = new QueryWrapper();
        wrapper.like("name", "m").eq("age", 28);
        List name = mapper.mySelectMap(wrapper);
        log.info("name----------> {}" + name.toString());

        List users = mapper.selectByName("Tom");
        log.info("name----------> {}" + users.toString());

        log.info("------------------------------使用 Wrapper.xml文件 自定义SQL---------->-");
        List tom = mapper.selectByNameTwo("Tom");
        log.info("tom----------> {}" + tom.toString());
    }

条件查询

   @Test
    public void testUserTwo() {
        log.info("------------------------------查询全部--------->-");
        List usertwos = usertwoMapper.selectList(null);
        log.info("usertwos----------> {}" + usertwos.toString());

        log.info("------------------------------SELECT * FROM usertwo WHERE name like '%雨%' and age<40--------->-");
        QueryWrapper wrapper = new QueryWrapper();
        wrapper.like("name", "雨").lt("age", 40);
        List usertwos0 = usertwoMapper.selectList(wrapper);
        log.info("usertwos0----------> {}" + usertwos0.toString());

//        名字中包含雨年并且龄大于等于20且小于等于40并且email不为空
        log.info("------------------------------SELECT * FROM usertwo WHERE name like '%雨%' and age between 20 and 40 and email is not null--------->-");
        QueryWrapper wrapper1 = new QueryWrapper();
        wrapper.like("name", "雨").between("age", 20, 40).isNotNull("email");
        List usertwos1 = usertwoMapper.selectList(wrapper);
        log.info("usertwos1-----123-----> {}" + usertwos1.toString());

//名字为王姓或者年龄大于等于25,按照年龄降序排列,年龄相同按照id升序排列
        log.info("------------------------------name like '王%' or age>=25 order by age desc,id asc--------->-");
        QueryWrapper wrappe2 = new QueryWrapper();
        wrappe2.likeRight("name", "王").or().ge("age", "25").orderByDesc("age").orderByAsc("id");
        List usertwos2 = usertwoMapper.selectList(wrappe2);
        log.info("usertwos2----------> {}" + usertwos2.toString());

        //创建日期为2019年2月14日并且直属上级为名字为王姓
        log.info("------------------------------date_format(create_time,'%Y-%m-%d')='2019-02-14' and manager_id in (select id from user where name like '王%')--------->-");
        QueryWrapper wrappe3 = new QueryWrapper();
        wrappe3.apply("date_format(create_time,'%Y-%m-%d') = {0}", "2019-02-14").inSql("manager_id", "select id from usertwo where name like '王%'");
        List usertwos3 = usertwoMapper.selectList(wrappe3);
        log.info("usertwos3----------> {}" + usertwos3.toString());

//        5、名字为王姓并且(年龄小于40或邮箱不为空)
        log.info("------------------------------name like '王%' and (age<40 or email is not null)--------->-");
        QueryWrapper wrapper4 = new QueryWrapper<>();
        wrapper4.likeRight("name", "王").and(i -> i.lt("age", 40).or().isNotNull("email"));
        List usertwos4 = usertwoMapper.selectList(wrapper4);
        log.info("usertwos4----------> {}" + usertwos4.toString());
//        6、名字为王姓或者(年龄小于40并且年龄大于20并且邮箱不为空)
        log.info("------------------------------name like '王%' or (age<40 and age>20 and email is not null)--------->-");
        QueryWrapper wrapper5 = new QueryWrapper<>();
        wrapper5.likeRight("name", "%王%").or(wq -> wq.lt("age", 40).gt("age", 20).isNotNull("email"));
        List usertwos5 = usertwoMapper.selectList(wrapper5);
        log.info("usertwos5----------> {}" + usertwos5.toString());

//        7、(年龄小于40或邮箱不为空)并且名字为王姓
        log.info("------------------------------(age<40 or email is not null) and name like '王%'--------->-");
        QueryWrapper wrapper6 = new QueryWrapper<>();
        wrapper6.nested(wq -> wq.lt("age", 40).isNotNull("email")).likeRight("name", "%王%");
        wrapper6.likeRight("name", "%王%").and(wq -> wq.lt("age", 40).isNotNull("email"));
        List usertwos6 = usertwoMapper.selectList(wrapper6);
        log.info("usertwos6----------> {}" + usertwos6.toString());
//        8、年龄为30、31、34、35
        log.info("------------------------------age in(30,31,34,35)--------->-");
        QueryWrapper wrapper7 = new QueryWrapper<>();
        wrapper7.in("age", 30, 31, 32, 34, 35);
        List usertwos7 = usertwoMapper.selectList(wrapper7);
        log.info("usertwos7----------> {}" + usertwos7.toString());
        //拉姆达表达式的语法糖 list.forEach((String t) -> System.out.println(t));
        usertwos7.forEach(System.out::println);
//        9、只返回满足条件的其中一条语句即可
        log.info("------------------------------age in(30,31,34,35)--------->-");
        QueryWrapper wrapper8 = new QueryWrapper<>();
        wrapper8.in("age", 30, 31, 32, 34, 35).last("limit 1");
        List usertwos8 = usertwoMapper.selectList(wrapper8);
        log.info("usertwos8----------> {}" + usertwos8.toString());
    }

 select中字段不全部出现的查询

    @Test
    public void testSelect() {
        log.info("select中字段不全部出现的查询");
//        10、名字中包含雨并且年龄小于40(需求1加强版)
        log.info("---------------------select id,name from usertwo where name like '%雨%' and age<40------------------>-");
        QueryWrapper wrapper1 = new QueryWrapper<>();
        wrapper1.select("id", "name").like("name", "雨").lt("age", 40);
        List usertwos1 = usertwoMapper.selectList(wrapper1);
        log.info("usertwos1----------> {}" + usertwos1.toString());
        log.info("----------------------select id,name,age,email from usertwo where name like '%雨%' and age<40----------------------->");
        QueryWrapper wrapper2 = new QueryWrapper<>();
        wrapper2.select(Usertwo.class, qw -> !qw.getColumn().equals("manager_id") && !qw.getColumn().equals("create_time")).like("name", "雨").lt("age", 40);
        List usertwos2 = usertwoMapper.selectList(wrapper2);
        log.info("usertwos2----------> {}" + usertwos2.toString());
    }

condition判断条件

    @Test
    public void testCondition() {
        log.info("------------------------------condition判断条件--------->-");
        QueryWrapper wrapper1 = new QueryWrapper<>();
        String name = "雨";
        String email = "";
        //第一个入参boolean condition表示该条件是否加入最后生成的sql中.email为空,所以不查询
        //SELECT name,age FROM usertwo WHERE (name LIKE ?)
        wrapper1.like(!StringUtils.isEmpty(name), "name", name).like(!StringUtils.isEmpty(email), "email", email).select("name", "age");
        List usertwos1 = usertwoMapper.selectList(wrapper1);
        log.info("usertwos1----------> {}" + usertwos1.toString());
    }

 insert数据的时候,如何排除非表中字段

    @Test
    public void testExit() {
        log.info("------------------------------insert数据的时候,如何排除非表中字段?--------->-");
        User user = new User();
        user.setName("agen");
        user.setAge(18);
        user.setMessgeFlag("我是用来标记的信息,不会存放在数据库中");
        int insert = mapper.insert(user);
        log.info("insert----------> {}" + insert);
    }

主键策略-id

sql

DROP TABLE IF EXISTS userthree;
 
CREATE TABLE userthree
(
	id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
	name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
	age INT(11) NULL DEFAULT NULL COMMENT '年龄',
	email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY (id)
);
 
DELETE FROM userthree;
 
INSERT INTO userthree (id, name, age, email) VALUES
(1, 'Jone', 18, '[email protected]'),
(2, 'Jack', 20, '[email protected]'),
(3, 'Tom', 28, '[email protected]'),
(4, 'Sandy', 21, '[email protected]'),
(5, 'Billie', 24, '[email protected]');

测试代码

    @Test
    public void testInsertUserThree() {
        log.info("------------------------------ UserThree insert数据--------->-");
        Userthree usertwo = new Userthree();
        usertwo.setName("agen");
        usertwo.setAge(18);
        usertwo.setEmail("[email protected]");
        int insert = userthreeMapper.insert(usertwo);
        log.info("insert----------> {}" + insert);
    }

#auto自动增加,5->6
   

 @TableId(value = "id", type = IdType.AUTO)
private Long id;

  Preparing: INSERT INTO userthree ( name, age, email ) VALUES ( ?, ?, ? )

#默认使用(IdWorker)推特雪花算法生成id

修改主键类型

ALTER TABLE userthree CHANGE COLUMN id id BIGINT(20);

代码

    @TableId(value = "id", type = IdType.NONE)
    @TableId(value = "id", type = IdType.ID_WORKER)
    private Long id;

Preparing: INSERT INTO userthree ( id, name, age, email ) VALUES ( ?, ?, ?, ? ) 
Parameters: 1254971356540428289(Long), agen(String), 18(Integer), [email protected](String)

#字符类型uuid

修改主键类型

ALTER TABLE userthree CHANGE COLUMN id id VARCHAR(32) NOT NULL;

代码

 @TableId(value = "id", type = IdType.UUID)
    private String id;


Preparing:INSERT INTO userthree ( id, name, age, email ) VALUES ( ?, ?, ?, ? ) 
Parameters: c49fc6bb50330e33de7f57ec718e7ee8(String), agen(String), 18(Integer), [email protected](String)

#字符类型-IdWorker雪花算法

@TableId(value = "id", type = IdType.ID_WORKER_STR)


Preparing: INSERT INTO userthree ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
Parameters: 1254979400980598786(String), agen(String), 18(Integer), [email protected](String)    

整体效果:

mybatis-plus结合springboot使用_第3张图片

你可能感兴趣的:(spring)