zoukankan      html  css  js  c++  java
  • Mybatis

    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>
    复制代码

       

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

      

      配置mybatis-plus代码生成器

    复制代码
    /**
     * @author: zhoujiong
     * @description: 演示例子,执行 main 方法控制台输入模块表名回车自动生成对应项目目录中
     * @className: CodeGenerator
     * @date: 2019/5/13 15:37
     */
    public class CodeGenerator {
    
    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String[] args) {
    
        </span><span style="color: #008000;">//</span><span style="color: #008000;">1 - FreemarkerTemplateEngine, 0-velocity</span>
        <span style="color: #0000ff;">int</span> result = 0<span style="color: #000000;">;
        </span><span style="color: #008000;">//</span><span style="color: #008000;"> 自定义需要填充的字段</span>
        List&lt;TableFill&gt; tableFillList = <span style="color: #0000ff;">new</span> ArrayList&lt;&gt;<span style="color: #000000;">();
        tableFillList.add(</span><span style="color: #0000ff;">new</span> TableFill("modify_time"<span style="color: #000000;">, FieldFill.INSERT_UPDATE));
        tableFillList.add(</span><span style="color: #0000ff;">new</span> TableFill("create_time"<span style="color: #000000;">, FieldFill.INSERT));
    
        </span><span style="color: #008000;">//</span><span style="color: #008000;">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"};</span>
        String tables[] = <span style="color: #0000ff;">new</span> String[]{"activity_rules"<span style="color: #000000;">};
    
        System.out.println(System.getProperty(</span>"user.dir"<span style="color: #000000;">));
    
        </span><span style="color: #008000;">//</span><span style="color: #008000;"> 代码生成器</span>
        AutoGenerator mpg = <span style="color: #0000ff;">new</span><span style="color: #000000;"> AutoGenerator(
    
        ).setGlobalConfig(
                </span><span style="color: #008000;">//</span><span style="color: #008000;"> 全局配置</span>
                <span style="color: #0000ff;">new</span><span style="color: #000000;"> GlobalConfig()
                        .setOutputDir(System.getProperty(</span>"user.dir") +"/src/main/java/")<span style="color: #008000;">//</span><span style="color: #008000;">输出目录</span>
                        .setFileOverride(<span style="color: #0000ff;">true</span>)<span style="color: #008000;">//</span><span style="color: #008000;"> 是否覆盖文件</span>
                        .setActiveRecord(<span style="color: #0000ff;">false</span>)<span style="color: #008000;">//</span><span style="color: #008000;"> 开启 activeRecord 模式</span>
                        .setEnableCache(<span style="color: #0000ff;">false</span>)<span style="color: #008000;">//</span><span style="color: #008000;"> XML 二级缓存</span>
                        .setBaseResultMap(<span style="color: #0000ff;">true</span>)<span style="color: #008000;">//</span><span style="color: #008000;"> XML ResultMap</span>
                        .setBaseColumnList(<span style="color: #0000ff;">true</span>)<span style="color: #008000;">//</span><span style="color: #008000;"> XML columList
                        </span><span style="color: #008000;">//</span><span style="color: #008000;">.setKotlin(true) </span><span style="color: #008000;">//</span><span style="color: #008000;">是否生成 kotlin 代码</span>
                        .setAuthor("zhoujiong"<span style="color: #000000;">)
                        </span><span style="color: #008000;">//</span><span style="color: #008000;"> 自定义文件命名,注意 %s 会自动填充表实体属性!</span>
                        .setEntityName("%s"<span style="color: #000000;">)
                        .setMapperName(</span>"%sMapper"<span style="color: #000000;">)
                        .setXmlName(</span>"%sMapper"<span style="color: #000000;">)
                        .setServiceName(</span>"I%sService"<span style="color: #000000;">)
                        .setServiceImplName(</span>"%sServiceImpl"<span style="color: #000000;">)
                        .setControllerName(</span>"%sController"<span style="color: #000000;">)
                        .setOpen(</span><span style="color: #0000ff;">false</span>)<span style="color: #008000;">//</span><span style="color: #008000;">生成代码后不自动打开文件所在目录</span>
    

    ).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(
    // 策略配置

                <span style="color: #0000ff;">new</span><span style="color: #000000;"> StrategyConfig()
                        </span><span style="color: #008000;">//</span><span style="color: #008000;"> .setCapitalMode(true)</span><span style="color: #008000;">//</span><span style="color: #008000;"> 全局大写命名
                        </span><span style="color: #008000;">//</span><span style="color: #008000;"> .setDbColumnUnderline(true)</span><span style="color: #008000;">//</span><span style="color: #008000;">全局下划线命名
                        </span><span style="color: #008000;">//</span><span style="color: #008000;">.setTablePrefix(new String[]{"t_"})</span><span style="color: #008000;">//</span><span style="color: #008000;"> 此处可以修改为您的表前缀</span>
                        .setNaming(NamingStrategy.underline_to_camel)<span style="color: #008000;">//</span><span style="color: #008000;"> 表名生成策略
                        </span><span style="color: #008000;">//</span><span style="color: #008000;">.setInclude(new String[]{"SYS_USER","T_BLOG","R_TAG_BLOG","SYS_PARAM","T_BLOG_CATEGORY","T_BLOG_TAG","T_COMMENT","T_LEAVE_MSG"}) </span><span style="color: #008000;">//</span><span style="color: #008000;"> 需要生成的表</span>
                        .setInclude(tables) <span style="color: #008000;">//</span><span style="color: #008000;"> 需要生成的表
                        </span><span style="color: #008000;">//</span><span style="color: #008000;"> .setExclude(new String[]{"test"}) </span><span style="color: #008000;">//</span><span style="color: #008000;"> 排除生成的表
                        </span><span style="color: #008000;">//</span><span style="color: #008000;"> 自定义实体父类</span>
                        .setSuperEntityClass("com.mybatis.puls.mybatisPuls.entity.BaseEntity"<span style="color: #000000;">)
                        </span><span style="color: #008000;">//</span><span style="color: #008000;"> 自定义实体,公共字段
                        </span><span style="color: #008000;">//</span><span style="color: #008000;">.setSuperEntityColumns(new String[]{"test_id"})</span>
    

    .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(
                </span><span style="color: #008000;">//</span><span style="color: #008000;"> 注入自定义配置,可以在 VM 中使用 cfg.abc 设置的值</span>
                <span style="color: #0000ff;">new</span><span style="color: #000000;"> InjectionConfig() {
                    @Override
                    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> initMap() {
                        Map</span>&lt;String, Object&gt; map = <span style="color: #0000ff;">new</span> HashMap&lt;&gt;<span style="color: #000000;">();
                        map.put(</span>"email", "@qq.com"<span style="color: #000000;">);
                        </span><span style="color: #0000ff;">this</span><span style="color: #000000;">.setMap(map);
                    }
                }.setFileOutConfigList(Collections.</span>&lt;FileOutConfig&gt;singletonList(<span style="color: #0000ff;">new</span><span style="color: #000000;"> FileOutConfig(
                        </span>"/generator-templates-custom/mapper.xml" + ((1 == result) ? ".ftl" : ".vm"<span style="color: #000000;">)) {
                    </span><span style="color: #008000;">//</span><span style="color: #008000;"> 自定义输出文件目录</span>
    

    @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();

        </span><span style="color: #008000;">//</span><span style="color: #008000;"> 打印注入设置,这里演示模板里面怎么获取注入内容【可无】</span>
        System.err.println(mpg.getCfg().getMap().get("email"<span style="color: #000000;">));
    }
    

    }

    复制代码

      

      准备模板文件

      

      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")

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    原文地址:https://www.cnblogs.com/BestWishesZJ/p/10844815.html
  • 相关阅读:
    【POJ】【2104】区间第K大
    【BZOJ】【2595】【WC2008】游览计划
    【BZOJ】【1036】树的统计
    【BZOJ】【2038】小Z的袜子
    我的博客~
    CSS选择器
    CSS样式表分类
    python奇闻杂技03 三元表达式示例,函数定义示例,七段彩码管绘制示例
    python奇闻杂技02 time模块,文本进度条示例,数字类型操作,字符串操作
    python奇闻杂技01 turtle学习
  • 原文地址:https://www.cnblogs.com/jpfss/p/11236001.html
Copyright © 2011-2022 走看看