1. 程式人生 > >mybatis-plus 自動生成分頁等程式碼

mybatis-plus 自動生成分頁等程式碼

pom.xml配置:

        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity</artifactId>
            <version>1.7</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId
>
<artifactId>mybatis-plus</artifactId> <version>2.1.8</version> </dependency>

生成程式碼main方法:

package com.zc.www.utils;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map
; import com.baomidou.mybatisplus.entity.TableInfo; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.InjectionConfig; import com.baomidou.mybatisplus.generator.config.DataSourceConfig; import com.baomidou.mybatisplus.generator.config.FileOutConfig; import com
.baomidou.mybatisplus.generator.config.GlobalConfig; import com.baomidou.mybatisplus.generator.config.PackageConfig; import com.baomidou.mybatisplus.generator.config.StrategyConfig; import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; import com.baomidou.mybatisplus.generator.config.rules.DbColumnType; import com.baomidou.mybatisplus.generator.config.rules.DbType; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; public class MybatisPlusUtils { public static void main(String[] args) { String[] models = { "java"}; for (String model : models) { shell(model); } } private static void shell(String model) { File file = new File(model); String path = file.getAbsolutePath(); System.out.println(path); path = path.substring(0, path.lastIndexOf(File.separator)); AutoGenerator mpg = new AutoGenerator(); // 全域性配置 GlobalConfig gc = new GlobalConfig(); gc.setOutputDir(path + "/src/main/java"); gc.setFileOverride(true); gc.setActiveRecord(true); gc.setEnableCache(false);// XML 二級快取 gc.setBaseResultMap(true);// XML ResultMap gc.setBaseColumnList(false);// XML columList gc.setAuthor("SPF"); // 自定義檔案命名,注意 %s 會自動填充表實體屬性! gc.setMapperName("%sMapper"); gc.setXmlName("%sMapper"); gc.setServiceName("%sService"); gc.setServiceImplName("%sServiceImpl"); gc.setControllerName("%sController"); mpg.setGlobalConfig(gc); // 資料來源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setDbType(DbType.POSTGRE_SQL); dsc.setTypeConvert(new MySqlTypeConvert() { // 自定義資料庫表字段型別轉換【可選】 @Override public DbColumnType processTypeConvert(String fieldType) { System.out.println("轉換型別:" + fieldType); // 注意!!processTypeConvert 存在預設型別轉換,如果不是你要的效果請自定義返回、非如下直接返回。 return super.processTypeConvert(fieldType); } }); dsc.setDriverName("org.postgresql.Driver"); dsc.setUsername("zhencai"); dsc.setPassword("123123"); dsc.setUrl("jdbc:postgresql://60.10.135.153:30000/test?charSet=utf-8"); mpg.setDataSource(dsc); // 策略配置 StrategyConfig strategy = new StrategyConfig(); // strategy.setCapitalMode(true);// 全域性大寫命名 ORACLE 注意 strategy.setTablePrefix(new String[] { });// 此處可以修改為您的表字首 strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略 strategy.setInclude(new String[] {"zc_ambient_info","zc_boiler_info","zc_bulk_material_carrier_info","zc_furnacepit_info" ,"zc_moving_machinery_info","zc_solvent_info","zc_storage_tank_id","zc_work_info","zc_yard_info"}); // 需要生成的表,{}中不寫表名則全部生成------------------------- // strategy.setExclude(new String[]{"test"}); // 排除生成的表 // 自定義實體父類 // strategy.setSuperEntityClass("com.spf.model.Entity"); // 自定義實體,公共欄位 // strategy.setSuperEntityColumns(new String[] { "test_id", "age" }); // 自定義 mapper 父類 // strategy.setSuperMapperClass("com.baomidou.demo.TestMapper"); // 自定義 service 父類 // strategy.setSuperServiceClass("com.baomidou.demo.TestService"); // 自定義 service 實現類父類 // strategy.setSuperServiceImplClass("com.baomidou.demo.TestServiceImpl"); // 自定義 controller 父類 // strategy.setSuperControllerClass("com.baomidou.demo.TestController"); // 【實體】是否生成欄位常量(預設 false) // public static final String ID = "test_id"; // strategy.setEntityColumnConstant(true); // 【實體】是否為構建者模型(預設 false) // public User setName(String name) {this.name = name; return this;} // strategy.setEntityBuliderModel(true); mpg.setStrategy(strategy); // 包配置 PackageConfig pc = new PackageConfig(); pc.setParent("com.zc.www"); //pc.setController("web"); pc.setEntity("model"); pc.setMapper("mapper"); //pc.setService("service"); //pc.setServiceImpl("service.impl"); pc.setXml("mapper"); // pc.setModuleName("test"); mpg.setPackageInfo(pc); // 注入自定義配置,可以在 VM 中使用 cfg.abc 【可無】 InjectionConfig cfg = new InjectionConfig() { @Override public void initMap() { Map<String, Object> map = new HashMap<String, Object>(); map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp"); this.setMap(map); } }; // 自定義 xxList.jsp 生成 List<FileOutConfig> focList = new ArrayList<FileOutConfig>(); // focList.add(new FileOutConfig("/template/list.jsp.vm") { // @Override // public String outputFile(TableInfo tableInfo) { // // 自定義輸入檔名稱 // return "D://my_" + tableInfo.getEntityName() + ".jsp"; // } // }); // cfg.setFileOutConfigList(focList); // mpg.setCfg(cfg); // 調整 xml 生成目錄演示 /*focList.add(new FileOutConfig("/templates/mapper.xml.vm") { @Override public String outputFile(TableInfo tableInfo) { return "/develop/code/xml/" + tableInfo.getEntityName() + ".xml"; } });*/ cfg.setFileOutConfigList(focList); mpg.setCfg(cfg); // 關閉預設 xml 生成,調整生成 至 根目錄 /*TemplateConfig tc = new TemplateConfig(); if ("ssm-mapper".equals(model)) { tc.setController(null); tc.setEntity(null); tc.setService(null); tc.setServiceImpl(null); } else if ("ssm-model".equals(model)) { tc.setController(null); tc.setService(null); tc.setServiceImpl(null); tc.setMapper(null); tc.setXml(null); } else if ("ssm-service".equals(model)) { tc.setController(null); tc.setMapper(null); tc.setXml(null); tc.setEntity(null); } else if ("ssm-web".equals(model)) { tc.setMapper(null); tc.setXml(null); tc.setService(null); tc.setServiceImpl(null); tc.setEntity(null); } mpg.setTemplate(tc);*/ // 自定義模板配置,可以 copy 原始碼 mybatis-plus/src/main/resources/template 下面內容修改, // 放置自己專案的 src/main/resources/template 目錄下, 預設名稱一下可以不配置,也可以自定義模板名稱 // TemplateConfig tc = new TemplateConfig(); // tc.setController("..."); // tc.setEntity("..."); // tc.setMapper("..."); // tc.setXml("..."); // tc.setService("..."); // tc.setServiceImpl("..."); // 如上任何一個模組如果設定 空 OR Null 將不生成該模組。 // mpg.setTemplate(tc); // 執行生成 mpg.execute(); // 列印注入設定【可無】 System.err.println(mpg.getCfg().getMap().get("abc")); } }

spring配置檔案:

<!-- MyBatis sqlSessionFactory 配置 mybatis -->
    <bean id="sqlSessionFactory"
        class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
        <property name="configLocation"
            value="classpath:mybatis-configuration.xml" />
        <property name="dataSource" ref="dataSource" />
        <property name="plugins">
            <array>
                <!-- 分頁外掛配置 -->
                <bean id="paginationInterceptor"
                    class="com.baomidou.mybatisplus.plugins.PaginationInterceptor">
                    <property name="dialectType" value="postgresql" />
                </bean>
            </array>
        </property>
        <property name="globalConfig" ref="globalConfig"></property>
    </bean>
    <bean id="globalConfig"
        class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
        <!-- AUTO->`0`("資料庫ID自增") INPUT->`1`(使用者輸入ID") ID_WORKER->`2`("全域性唯一ID") 
            UUID->`3`("全域性唯一ID") -->
        <property name="idType" value="1" />
        <!-- Oracle需要新增該項 -->
        <property name="dbType" value="postgresql" />
        <!-- 全域性表為下劃線命名設定 true -->
        <!-- <property name="dbColumnUnderline" value="true" /> -->
        <!-- 公共欄位填充處理器 -->
        <!-- <property name="metaObjectHandler" ref="myMetaObjectHandler" /> -->
    </bean>

    <!-- 自動掃描注入類 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.zc.www.mapper" />
        <property name="sqlSessionFactoryBeanName"
            value="sqlSessionFactory" />
    </bean>

注意:
!!如果將<property name="idType" value="1" />這裡設定為0,自動自增,那麼所有的insert新增方法,都會自動將id看為自增,就算你指定引數包含id也沒有用,可能會因為你的id引數型別不同而報錯.

~所以解決辦法就是這裡設定為1,使用者設定id,然後在實體類中自己指定id型別,如@TableId(type=IdType.AUTO,value="boiler_id")