springcloud整合mybatis-plus

一、项目引入mybatis-plus

1、引入依赖

<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</version>
        </dependency>

2、配置文件新增配置

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&allowMultiQueries=true&rewriteBatchedStatements=true&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis-plus:
  mapper-locations: classpath:mapper/**/*Mapper.xml
  global-config:
    db-config:
      #主键类型  0:"数据库ID自增",1:"该类型为未设置主键类型", 2:"用户输入ID",3:"全局唯一ID (数字类型唯一ID)", 4:"全局唯一ID UUID";
      id-type: assign_id
      # 默认数据库表下划线命名
      table-underline: true
  configuration:
    # 返回类型为Map,显示null对应的字段
    call-setters-on-nulls: true
    # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3、启动类需要增加一个@MapperScan注解

@SpringBootApplication
@MapperScan("com.lcz.springcloud.mapper")
public class SpringcloudApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringcloudApplication.class, args);
    }
}

这时候就可以启动项目了,mybatis-plus已经整合完成。

4、mybatis-plus逆向生成代码,我这里是放在test包下面的

package com.lcz.springcloud.mybatisplus;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.mysql.cj.jdbc.Driver;
import org.junit.Before;
import org.junit.Test;

public class MyBatisGenerator {
    static AutoGenerator mpg = null;

    String jdbcUsername="root";
    String jdbcPassword="root";
    String jdbcUrl="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai";

    String parent = "com.lcz.springcloud";
    String module;
    String[] tablePrefix;
    String[] tables;

    public void initTables(){
        tablePrefix = new String[] {"zs"};
        tables = new String[] {"user"};
    }

    /**
     * 新增模块
     */
    @Test
    public void newModule() {
        initAutoGenerator();
        mpg.getGlobalConfig().setFileOverride(false);

        TemplateConfig tc = new TemplateConfig();
        // 设置不生成controller
        tc.setController(null);
        mpg.setTemplate(tc);
        mpg.execute();
    }

    /**
     * 更新实体
     */
    @Test
    public void updateEntity() throws InterruptedException {
        int i = 0;

        do {
            System.err.println("!!!更新实体会覆盖实体类,请注意合并实体类代码!!!");
            i++;
            Thread.sleep(1000L);
        }while (i < 5);

        for (String t : tables){
            // fix 缓存
            initAutoGenerator();

            mpg.getGlobalConfig().setFileOverride(true);
            mpg.getStrategy().setInclude(t);

            // 只更新entity
            TemplateConfig tc = new TemplateConfig();
            tc.setMapper(null);
            tc.setXml(null);
            tc.setService(null);
            tc.setServiceImpl(null);
            tc.setController(null);

            mpg.setTemplate(tc);
            mpg.execute();
        }
    }

     @Before
    public void init() {
        initTables();
    }

    void initAutoGenerator(){
        mpg = new AutoGenerator();

        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };
        mpg.setCfg(cfg);

        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        // 配置主键生成策略,此处为 ASSIGN_ID(可选)
        gc.setIdType(IdType.ASSIGN_ID);
        // 拼接出代码最终输出的目录
        gc.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
        // 重新生成文件时是否覆盖,false 表示不覆盖(可选)
        gc.setFileOverride(true);
        //是否支持AR模式
        gc.setActiveRecord(false);
        //是否开启缓存
        gc.setEnableCache(false);
        //生成resultMap
        gc.setBaseResultMap(false);
        //在xml中生成基础列
        gc.setBaseColumnList(false);
        //设置作者
        gc.setAuthor("mybatis-plus-generator");
        // 配置是否打开目录,false 为不打开(可选)
        gc.setOpen(false);
        // 是否开启swagger
        gc.setSwagger2(false);

        // 自定义文件命名,注意 %s 会自动填充表实体属性!
        gc.setEntityName("%s");
        gc.setMapperName("%sMapper");
        gc.setXmlName("%sMapper");
        gc.setServiceName("%sService");
        gc.setServiceImplName("%sServiceImpl");
        gc.setControllerName("%sController");

        mpg.setGlobalConfig(gc);

        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDbType(DbType.MYSQL);
        dsc.setDriverName(Driver.class.getName());
        dsc.setUsername(jdbcUsername);
        dsc.setPassword(jdbcPassword);
        dsc.setUrl(jdbcUrl);
        mpg.setDataSource(dsc);

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setTablePrefix(tablePrefix);
        // 表名生成策略
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        // 需要生成的表
        strategy.setInclude(tables);
        // 设置lombok
        strategy.setEntityLombokModel(true);
        // 【实体】是否生成字段常量(默认 false)
        strategy.setEntityColumnConstant(true);
        strategy.setEntityBooleanColumnRemoveIsPrefix(false);
        // 【实体】是否为构建者模型(默认 false)
        strategy.setEntityBuilderModel(true);
        // 设置乐观锁字段
        strategy.setVersionFieldName("version");
        mpg.setStrategy(strategy);

        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setEntity("entity");
        pc.setMapper("mapper");
        pc.setService("service");
        pc.setServiceImpl("service.impl");
        pc.setController("controller");
        pc.setParent(parent);
        pc.setModuleName(module);
        mpg.setPackageInfo(pc);

        // 关闭默认生成
        // TemplateConfig tc = new TemplateConfig();
        // tc.setController(null);
        // tc.setService(null);
        // tc.setServiceImpl(null);
        // mpg.setTemplate(tc);
    }

}

5、引入对应的依赖

<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.4.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity</artifactId>
            <version>1.7</version>
            <scope>test</scope>
        </dependency>

我的项目目录,红色圈住的就是逆向工程所在的目录
在这里插入图片描述

二、mybatis-plus和mybatis的区别

一句话概括:mybatis-plus只是在mybatis的基础上做增强,不做修改,用于简化开发,提高效率。

mybatis-plus简化了crud,可以直接调用里面的方法增删改查方法。复杂一点的sql也可以通过语句去拼接,但是不太建议,还是写xml文件比较好维护。
举个简单例子:

mybatis增加的时候,需要手写xml文件
在这里插入图片描述
而mybatis-plus直接调用save方法就可以了

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping("/add")
    public void add(){
        User user = new User();
        user.setName("hwl");
        user.setPassword("456");
        userService.save(user);
        // userService.saveByXml(user);
    }
}

三、mybatis-plus和mybatis的分页

需要增加一个配置,不然会导致分页失效

@Configuration
public class MybatisConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

四、Mybatis-plus的简单使用

下面这幅图就是mybatis-plus的一些条件拼接对象
在这里插入图片描述
如果要使用的话,就必须先定义一个对象QueryWraaper对象,例如下图。
在这里插入图片描述
我这里根据关键字模糊搜索去查询,就可以选择like这个条件拼接,注意:这里如果用getOne的话,查出来有2个,会报错,所以要加上queryWrapper.last(“limit 1”)这个条件才可以。

@GetMapping("/get/byName")
    public User getByName(String name){
        QueryWrapper<User> queryWrapper = new QueryWrapper();
        queryWrapper.like(User.NAME,name);
        queryWrapper.last("limit 1");
        User user = userService.getOne(queryWrapper);
        return user;
    }
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值