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 查询字段
whereWHERE 语句,拼接 + WHERE 条件
andAND 语句,拼接 + AND 字段=值
andNewAND 语句,拼接 + AND (字段=值)
orOR 语句,拼接 + OR 字段=值
orNewOR 语句,拼接 + OR (字段=值)
eq等于=
allEq基于 map 内容等于=
ne不等于<>
gt大于>
ge大于等于>=
lt小于<
le小于等于<=
like模糊查询 LIKE
notLike模糊查询 NOT LIKE
inIN 查询
notInNOT IN 查询
isNullNULL 值查询
isNotNullIS NOT NULL
groupBy分组 GROUP BY
havingHAVING 关键词
orderBy排序 ORDER BY
orderAscASC 排序 ORDER BY
orderDescDESC 排序 ORDER BY
existsEXISTS 条件语句
notExistsNOT EXISTS 条件语句
betweenBETWEEN 条件语句
notBetweenNOT BETWEEN 条件语句
addFilter自由拼接 SQL
last拼接在最后,例如:last("LIMIT 1")

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/BestWishesZJ/p/10844815.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值