Mybatis - plus 配置與運用

Mybatis - plus

mybatis-plus 官方文檔 html

一、配置java

  引入對應的文件包,spring boot + mybatis 需添加依賴文件以下:mysql

複製代碼
<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相關配置git

  

  配置mybatis-plus代碼生成器web

複製代碼
/**
 * @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"));
    }

}
複製代碼

  

  準備模板文件spring

  

  ftl文件是freemarker模板文件sql

  vm文件是velocity模板文件數據庫

 

  本地配置SQL執行效率查詢插件apache

  

  結果顯示api

  

 

  配置分頁插件

  

  詳細也可參照官網

  運用

  

  

  page.setCurrent 設置當前頁

  page.setSize 設置一頁大小

  page.setOptimizeCountSql  (false)不進行 count sql 優化,解決 MP 沒法自動優化 SQL 問題

  page.setSearchCount 是否查詢總數

  而後經過setRecords()方法返回Page對象

  

  其餘插件請參照官網。(例如 注入sql自定義自定義全局操做)

  

注意:

  • 在建表時不要已condition做爲表字段,在使用條件構造器wrapper時,雖然mybatis-plus支持關鍵詞自動轉義,但對condition無效!
  • 運用了mybatis-plus就不須要在引入mybatis相關包,以避免引發衝突!

二、調用

  • 經過調用 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
相關文章
相關標籤/搜索