记录自己的Mybatis-plus之路01-初识mp

点击查看Mybatis-plus官方文档

前言:在学习的过程中,没有找到mp自动生成支持form和vo的,又费了点时间自己写了

目录

创建spring boot 项目

修改pom文件

修改application.yml文件

修改启动类

创建Mybatis-plus配置

编写自动生成工具类


创建spring boot 项目

使用idea默认生成即可 ...

修改pom文件

        <dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<dependency>
		   <groupId>org.springframework.boot</groupId>
		   <artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</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.1.0</version>
		</dependency>
		<!--mybatis-plus自动生成代码-->
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-generator</artifactId>
			<version>3.1.0</version>
		</dependency>

		<!-- velocity 模版引擎 -->
		<dependency>
			<groupId>org.apache.velocity</groupId>
			<artifactId>velocity-engine-core</artifactId>
			<version>2.0</version>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		
		<!--lombok-->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.16.16</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>
        <!--swagger2-->
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger2</artifactId>
			<version>2.9.2</version>
		</dependency>

		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger-ui</artifactId>
			<version>2.9.2</version>
		</dependency>

修改application.yml文件

server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
    username: root
    password: admin
    driver-class-name: com.mysql.jdbc.Driver
mybatis-plus:
  mapperLocations: classpath*:mapper/*.xml
  typeAliasesPackage: com.mybatis.plus.demo.model # mybatis 别名包扫描路径
  global-config:
    db-config:
      logic-delete-value: 1 #逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    #线上关闭sql日志打印

修改启动类

创建Mybatis-plus配置

新建文件MyBatisPlusConfiguration

注意:如果使用mp自带的控制逻辑删除控制版本号还有分页功能,则需要添加这个配置

package com.plus.demo.util;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;

@Configuration
public class MyBatisPlusConfiguration {
	/**
	 * 控制逻辑删除
	 * @return
	 */
	@Bean
    public ISqlInjector sqlInjector() {
        return new LogicSqlInjector();
    }
	/**
	 * 控制版本号
	 * @return
	 */
	@Bean
	public OptimisticLockerInterceptor optimisticLockerInterceptor() {
	    return new OptimisticLockerInterceptor();
	}

	/**
	 * 分页插件
	 */
	@Bean
	public PaginationInterceptor paginationInterceptor() {
		return new PaginationInterceptor();
	}
}

编写自动生成工具类

注:直接把Controller/service/serviceImpl/dao/mapper/form/vo全部生成

此处使用默认velocity 模版引擎 则没有常用的crud方法,使用自己的模板则可以生成常用的crud方法

其中自定义模板中有工具类是公司自己的jar包,所以只推荐参考

拷贝mybatis-plus-generator jar包中的模板到自己项目resources下

工具类代码

package com.mybatis.plus.demo.util;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 代码生成器
 *
 */
public class MabatisPlusGenerator {
    private static String path = "E:\\idea\\springboot-mybatis-plus"; //文件路径
    private static String table = "tm_user"; //table名字
    public static void main(String[] args) {
        //1. 全局配置
        GlobalConfig config = new GlobalConfig();
        config.setActiveRecord(false) // 是否支持AR模式
            .setAuthor("GMaya") // 作者
            .setSwagger2(true) // 使用Swagger
            .setOutputDir(path + "/src/main/java") // 生成路径
            .setFileOverride(true) // 文件覆盖
            .setIdType(IdType.AUTO) // 主键策略
            // 自定义文件命名,注意 %s 会自动填充表实体属性!
            .setServiceName("%sService").setServiceImplName("%sServiceImpl")
            .setControllerName("%sController").setMapperName("%sDao").setXmlName("%sMapper")
            .setOpen(false) // 生成文件后 不打开文件夹
            .setBaseResultMap(true) // XML ResultMap
            .setBaseColumnList(true); // XML columList

        //2. 数据源配置
        DataSourceConfig dsConfig = new DataSourceConfig();
        dsConfig.setDbType(DbType.MYSQL) // 设置数据库类型
            .setDriverName("com.mysql.jdbc.Driver")
            .setUrl(
                "jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8")
            .setUsername("root").setPassword("admin").setTypeConvert(new MySqlTypeConvert() {
                @Override
                public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
                    if (fieldType.toLowerCase().contains("tinyint")) {
                        return DbColumnType.BOOLEAN;
                    }
                    //将数据库中datetime转换成date
                    if (fieldType.toLowerCase().contains("datetime")) {
                        return DbColumnType.DATE;
                    }
                    return super.processTypeConvert(globalConfig, fieldType);
                }
            });

        //3. 策略配置
        StrategyConfig stConfig = new StrategyConfig();
        stConfig.setColumnNaming(NamingStrategy.underline_to_camel)
            .setNaming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略
            .setEntityLombokModel(true) // 使用Lombok
            .setVersionFieldName("version") // 数据库版本控制字段
            .setLogicDeleteFieldName("status") // 数据库逻辑删除字段
            .setRestControllerStyle(true)
            .setSuperServiceClass("com.baomidou.mybatisplus.extension.service.IService")
            .setInclude(new String[]{table}); // 生成的表

        //4. 包名策略配置
        PackageConfig pkConfig = new PackageConfig();
        pkConfig.setParent("com.mybatis.plus.demo").setMapper("dao").setService("service")
            .setServiceImpl("service.impl").setController("controller").setEntity("model");
        //5.自定义配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };
        String templatePath = "/templates/mapper.xml.vm"; // 如果模板引擎是 velocity
        List<FileOutConfig> focList = new ArrayList<>(); // 自定义输出配置
        focList.add(new FileOutConfig(templatePath) { // 自定义配置会被优先输出
            @Override
            public String outputFile(TableInfo tableInfo) {
                // mapper自定义输出文件名
                return path + "/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper"
                       + StringPool.DOT_XML;
            }
        });
        // ------------form vo 使用默认模板请注释-begin-----------
        templatePath = "/templates/entityForm.java.vm";
        focList.add(new FileOutConfig(templatePath) { // 自定义配置会被优先输出
            @Override
            public String outputFile(TableInfo tableInfo) {
                // form自定义输出文件名
                return path + "/src/main/java/com/mybatis/plus/demo/pojo/" + tableInfo.getEntityName() + "Form"
                       + StringPool.DOT_JAVA;
            }
        });
        templatePath = "/templates/entityVO.java.vm";
        focList.add(new FileOutConfig(templatePath) { // 自定义配置会被优先输出
            @Override
            public String outputFile(TableInfo tableInfo) {
                // VO自定义输出文件名
                return path + "/src/main/java/com/mybatis/plus/demo/pojo/" + tableInfo.getEntityName() + "VO"
                       + StringPool.DOT_JAVA;
            }
        });
        // ------------form vo 使用默认模板请注释-end-----------
        cfg.setFileOutConfigList(focList);

        // 6 配置模板 自定义模板/在resources/templates 可以编辑
        TemplateConfig templateConfig = new TemplateConfig();
        // 关闭默认 xml 生成,调整生成 至 根目录
        templateConfig.setEntity("/templates/entity.java").setService("/templates/service.java")
            .setController("/templates/controller.java").setMapper("/templates/mapper.java")
            .setServiceImpl("/templates/serviceImpl.java").setXml(null);

        //7. 整合配置
        AutoGenerator ag = new AutoGenerator();
        ag.setGlobalConfig(config).setDataSource(dsConfig).setStrategy(stConfig).setCfg(cfg)
            .setPackageInfo(pkConfig).setTemplate(templateConfig);

        //8. 执行
        ag.execute();
    }
}

注:如果是使用自定义模板,请注意修改模板中的form,vo引入包路径等

使用默认模板请注释代码中生成form/vo代码

第一次运行可能有以下错误,如果没有请忽略

问题1:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents

解决:set global time_zone='+8:00'

问题2:使用Lombok插件,Idea,Eclipse必须安装改插件,否则找不到get/set方法

解决:IDEA安装Lombok步骤

Eclipse的自行百度  /滑稽

修改文件路径表名之后运行

生成结构图如下

perfect  ! ! !

下一篇 : 记录自己的Mybatis-plus之路02-mp自定义模板

自学的路上并不孤单

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值