Mybatis - plus 配置与运用

Mybatis - plus

mybatis-plus 官方文档 

1、配置

  引入对应的文件包,spring boot + mybatis 需添加依赖文件如下:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <!-- 添加 代码生成器 依赖 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.1.1</version>
        </dependency>
        <!-- 添加 代码生成器 依赖 -->
        <dependency>
            <groupId>org.shenjia</groupId>
            <artifactId>MyBatisX</artifactId>
            <version>0.0.5</version>
        </dependency>
        <!-- 其他模板引擎 -->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity</artifactId>
            <version>1.7</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.23</version>
        </dependency>
        <!-- 其他模板引擎 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId><!--mysql数据库驱动-->
            <version>5.1.46</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>
    </dependencies>
View Code

   

  application.yml添加mybatis - plus相关配置

  

  配置mybatis-plus代码生成器

/**
 * @author: zhoujiong
 * @description: 演示例子,执行 main 方法控制台输入模块表名回车自动生成对应项目目录中
 * @className: CodeGenerator
 * @date: 2019/5/13 15:37
 */
public class CodeGenerator {

    public static void main(String[] args) {

        //1 - FreemarkerTemplateEngine, 0-velocity
        int result = 0;
        // 自定义需要填充的字段
        List<TableFill> tableFillList = new ArrayList<>();
        tableFillList.add(new TableFill("modify_time", FieldFill.INSERT_UPDATE));
        tableFillList.add(new TableFill("create_time", FieldFill.INSERT));

        //String tables[] = new String[]{"SYS_PERMISSION", "PK_SYS_PERMISSION", "T_BLOG", "PK_T_BLOG", "R_TAG_BLOG", "PK_R_TAG_BLOG", "SYS_PARAM", "SYS_USER", "PK_SYS_USER", "T_BLOG_CATEGORY", "PK_T_BLOG_CATEGORY", "T_BLOG_TAG", "PK_T_BLOG_TAG", "SYS_FUNCTION", "PK_T_COMMENT", "T_COMMENT_MSG", "R_USER_PERMISSION"};
        String tables[] = new String[]{"activity_rules"};

        System.out.println(System.getProperty("user.dir"));

        // 代码生成器
        AutoGenerator mpg = new AutoGenerator(

        ).setGlobalConfig(
                // 全局配置
                new GlobalConfig()
                        .setOutputDir(System.getProperty("user.dir") +"/src/main/java/")//输出目录
                        .setFileOverride(true)// 是否覆盖文件
                        .setActiveRecord(false)// 开启 activeRecord 模式
                        .setEnableCache(false)// XML 二级缓存
                        .setBaseResultMap(true)// XML ResultMap
                        .setBaseColumnList(true)// XML columList
                        //.setKotlin(true) //是否生成 kotlin 代码
                        .setAuthor("zhoujiong")
                        // 自定义文件命名,注意 %s 会自动填充表实体属性!
                        .setEntityName("%s")
                        .setMapperName("%sMapper")
                        .setXmlName("%sMapper")
                        .setServiceName("I%sService")
                        .setServiceImplName("%sServiceImpl")
                        .setControllerName("%sController")
                        .setOpen(false)//生成代码后不自动打开文件所在目录
        ).setDataSource(
                // 数据源配置
                new DataSourceConfig()
                        .setDbType(DbType.MYSQL)// 数据库类型
                        .setTypeConvert(new MySqlTypeConvert() {
                            // 自定义数据库表字段类型转换【可选】
                            @Override
                            public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
                                System.out.println("自动检测到数据库类型:" + fieldType);
                                //金额或者敏感数值单位需要精确
                                if (fieldType.contains("NUMBER(") && fieldType.contains("2)")) {//含有这种格式的识别为金额类型
                                    return DbColumnType.BIG_DECIMAL;
                                    //编码枚举数值类型或者布尔类型使用整形表示
                                } else if (fieldType.contains("NUMBER") && !fieldType.contains(",")) {
                                    return DbColumnType.INTEGER;
                                } else {
                                    //使用默认的
                                    return super.processTypeConvert(globalConfig, fieldType);
                                }
                            }
                        })
                        .setDriverName("com.mysql.jdbc.Driver")
                        .setUsername("")
                        .setPassword("")
                        .setUrl("")
        ).setStrategy(
                // 策略配置

                new StrategyConfig()
                        // .setCapitalMode(true)// 全局大写命名
                        // .setDbColumnUnderline(true)//全局下划线命名
                        //.setTablePrefix(new String[]{"t_"})// 此处可以修改为您的表前缀
                        .setNaming(NamingStrategy.underline_to_camel)// 表名生成策略
                        //.setInclude(new String[]{"SYS_USER","T_BLOG","R_TAG_BLOG","SYS_PARAM","T_BLOG_CATEGORY","T_BLOG_TAG","T_COMMENT","T_LEAVE_MSG"}) // 需要生成的表
                        .setInclude(tables) // 需要生成的表
                        // .setExclude(new String[]{"test"}) // 排除生成的表
                        // 自定义实体父类
                        .setSuperEntityClass("com.mybatis.puls.mybatisPuls.entity.BaseEntity")
                        // 自定义实体,公共字段
                        //.setSuperEntityColumns(new String[]{"test_id"})
                        .setTableFillList(tableFillList)
                        // 自定义 mapper 父类
//                         .setSuperMapperClass("com.mybatis.puls.mybatisPuls.mapper.BaseMapper")
                        // 自定义 service 父类
//                         .setSuperServiceClass("com.mybatis.puls.mybatisPuls.service.IBaseService")
                        // 自定义 service 实现类父类
//                         .setSuperServiceImplClass("com.mybatis.puls.mybatisPuls.service.impl.BaseServiceImpl")
                        // 自定义 controller 父类
                         .setSuperControllerClass("com.mybatis.puls.mybatisPuls.controller.BaseController")
                        // 【实体】是否生成字段常量(默认 false)
                        // public static final String ID = "test_id";
                        // .setEntityColumnConstant(true)
                        // 【实体】是否为构建者模型(默认 false)
                        // public SysUser setName(String name) {this.name = name; return this;}
                        // .setEntityBuilderModel(true)
                        // 【实体】是否为lombok模型(默认 false)<a href="https://projectlombok.org/">document</a>
                         .setEntityLombokModel(true)
                        // Boolean类型字段是否移除is前缀处理
                         .setEntityBooleanColumnRemoveIsPrefix(true)
                        //设置是否使用restController注解
                         .setRestControllerStyle(true)
                        // .setControllerMappingHyphenStyle(true)
                        //设置逻辑删除字段,默认1有效,0无效
                         .setLogicDeleteFieldName("enabled")
        ).setPackageInfo(
                // 包配置
                new PackageConfig()
                        //.setModuleName("")
                        .setParent("com.mybatis.puls.mybatisPuls")// 自定义包路径
                        .setEntity("entity")
                        .setMapper("mapper")
                        .setService("service")
                        .setServiceImpl("service.impl")
                        .setController("controller")

        ).setCfg(
                // 注入自定义配置,可以在 VM 中使用 cfg.abc 设置的值
                new InjectionConfig() {
                    @Override
                    public void initMap() {
                        Map<String, Object> map = new HashMap<>();
                        map.put("email", "@qq.com");
                        this.setMap(map);
                    }
                }.setFileOutConfigList(Collections.<FileOutConfig>singletonList(new FileOutConfig(
                        "/generator-templates-custom/mapper.xml" + ((1 == result) ? ".ftl" : ".vm")) {
                    // 自定义输出文件目录
                    @Override
                    public String outputFile(TableInfo tableInfo) {
                        return System.getProperty("user.dir") +"/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper.xml";
                    }
                }))
        ).setTemplate(
                // 关闭默认 xml 生成,调整生成 至 根目录
                new TemplateConfig()
                        .setXml(null)
                        // 自定义模板配置,模板可以参考源码 /mybatis-plus/src/main/resources/template 使用 copy
                        // 至您项目 src/main/resources/template 目录下,模板名称也可自定义如下配置:
                        .setController("generator-templates-custom/controller.java")
                        .setEntity("generator-templates-custom/entity.java")
                        .setMapper("generator-templates-custom/mapper.java")
                        .setService("generator-templates-custom/service.java")
                        .setServiceImpl("generator-templates-custom/serviceImpl.java")
        );
        // 执行生成
        if (1 == result) {
            mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        }
        mpg.execute();

        // 打印注入设置,这里演示模板里面怎么获取注入内容【可无】
        System.err.println(mpg.getCfg().getMap().get("email"));
    }

}
View Code

  

  准备模板文件

  

  ftl文件是freemarker模板文件

  vm文件是velocity模板文件

 

  本地配置SQL执行效率查询插件

  

  结果显示

  

 

  配置分页插件

  

  详细也可参照官网

  运用

  

  

  page.setCurrent 设置当前页

  page.setSize 设置一页大小

  page.setOptimizeCountSql  (false)不进行 count sql 优化,解决 MP 无法自动优化 SQL 问题

  page.setSearchCount 是否查询总数

  然后通过setRecords()方法返回Page对象

  

  其他插件请参照官网。(例如 注入sql自定义自定义全局操作)

  

注意:

  • 在建表时不要已condition作为表字段,在使用条件构造器wrapper时,虽然mybatis-plus支持关键词自动转义,但对condition无效!
  • 运用了mybatis-plus就不需要在引入mybatis相关包,以免引起冲突!

2、调用

  • 通过调用 service  crud 接口,条件查询数据库中 id = 20 的数据。

  •  通过自已定义mapper(与注入自定义SQL不同,自定义SQL注入是在初始化就讲SQL方法注入到mybatis容器中,类似mybatis-plus中的 BaseMapper中的方法)

  controller

  

  service

  继承 com.baomidou.mybatisplus.extension.service.impl.ServiceImpl

  

  mapper

  继承 com.baomidou.mybatisplus.core.mapper.BaseMapper

  

  mapper.xml

  

条件构造器wrapper

  详细构造器用法见文档

条件参数说明

查询方式说明
setSqlSelect 设置 SELECT 查询字段
where WHERE 语句,拼接 + WHERE 条件
and AND 语句,拼接 + AND 字段=值
andNew AND 语句,拼接 + AND (字段=值)
or OR 语句,拼接 + OR 字段=值
orNew OR 语句,拼接 + OR (字段=值)
eq 等于=
allEq 基于 map 内容等于=
ne 不等于<>
gt 大于>
ge 大于等于>=
lt 小于<
le 小于等于<=
like 模糊查询 LIKE
notLike 模糊查询 NOT LIKE
in IN 查询
notIn NOT IN 查询
isNull NULL 值查询
isNotNull IS NOT NULL
groupBy 分组 GROUP BY
having HAVING 关键词
orderBy 排序 ORDER BY
orderAsc ASC 排序 ORDER BY
orderDesc DESC 排序 ORDER BY
exists EXISTS 条件语句
notExists NOT EXISTS 条件语句
between BETWEEN 条件语句
notBetween NOT BETWEEN 条件语句
addFilter 自由拼接 SQL
last 拼接在最后,例如:last("LIMIT 1")

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2019-05-10 15:48  Best_Wishes  阅读(6344)  评论(0编辑  收藏  举报

导航