最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解使用Mybatis-plus + velocity模板生成自定義的代碼

 更新時(shí)間:2021年03月05日 14:08:18   作者:君君君sss  
這篇文章主要介紹了詳解使用Mybatis-plus + velocity模板生成自定義的代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

pom.xml文件的配置

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.3.0</version>
</dependency>
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-generator</artifactId>
  <version>3.1.0</version>
</dependency>

<!-- 代碼生成器模板 -->
<dependency>
  <groupId>org.apache.velocity</groupId>
  <artifactId>velocity</artifactId>
  <version>1.7</version>
</dependency>

CodeGenerator配置文件

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
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.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.TemplateConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import lombok.extern.java.Log;

/**
 * 代碼生成器
 */
@Log
public class CodeGenerator {

 //項(xiàng)目存儲(chǔ)位置
 public static String PROJECT_GENERATE_DISK = "E:\\";
 //包名
 public static String PARENT_PACKAGE_NAME = "com";
 //包名
 public static String PACKAGE_NAME = "rent.security";
 //數(shù)據(jù)庫(kù)地址
 public static String DB_URL = "jdbc:mysql://localhost:3306/mp?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=UTC";
 //數(shù)據(jù)庫(kù)實(shí)例名
 public static String DRIVER_CLASS_NAME = "com.mysql.jdbc.Driver";
 //數(shù)據(jù)庫(kù)用戶
 public static String USER = "root";
 //數(shù)據(jù)庫(kù)密碼
 public static String PASSWORD = "root";
 //數(shù)據(jù)庫(kù)schema
 public static String SCHEMA = "mp";
 //要查詢的表名
 public static String TABLE_NAMES = "sys_role_menu";
 //創(chuàng)建人
 public static String AUTHOR = "jmm";
 //是否強(qiáng)制帶上注解
 public static boolean ENABLE_TABLE_FIELD_ANNOTATION = false;
 //生成的注解帶上IdType類(lèi)型
 public static IdType TABLE_IDTYPE = null;
 //生成的Service 接口類(lèi)名是否以I開(kāi)頭 默認(rèn)是以I開(kāi)頭 user表 -> IUserService, UserServiceImpl
 public static boolean SERVICE_CLASS_NAME_START_WITHI = false;

 /**
 * 全局配置
 */
 private static GlobalConfig GlobalGenerate() {
 GlobalConfig config = new GlobalConfig();
 config.setActiveRecord(false)// 不需要ActiveRecord特性的請(qǐng)改為false
  .setIdType(TABLE_IDTYPE)
  .setEnableCache(false)// XML 二級(jí)緩存
  .setAuthor(AUTHOR)
  .setBaseResultMap(true)// XML ResultMap
  .setBaseColumnList(false)// XML columList
  .setOutputDir(PROJECT_GENERATE_DISK + "\\java" )
  .setFileOverride(true)
  .setControllerName("%sController" );//自定義文件命名,注意 %s 會(huì)自動(dòng)填充表實(shí)體屬性!

 if (!SERVICE_CLASS_NAME_START_WITHI) {
  config.setServiceName("%sService" );
 }
 return config;
 }

 /**
 * 數(shù)據(jù)源配置
 */
 private static DataSourceConfig DaoSourceGenerate() {
 DataSourceConfig dataSourceConfig = new DataSourceConfig();
 DbType type = DbType.MYSQL;
 dataSourceConfig.setDbType(type)//數(shù)據(jù)庫(kù)類(lèi)型
  .setUrl(DB_URL)//數(shù)據(jù)庫(kù)地址
  .setUsername(USER)//數(shù)據(jù)庫(kù)用戶名
  .setPassword(PASSWORD)//數(shù)據(jù)庫(kù)密碼
  .setDriverName(DRIVER_CLASS_NAME)//實(shí)例名
  .setSchemaName(SCHEMA);
 return dataSourceConfig;
 }

 /**
 * 策略配置
 */
 private static StrategyConfig StrategyGenerate() {
 StrategyConfig strategyConfig = new StrategyConfig();
 strategyConfig.setVersionFieldName("version" )
  .setCapitalMode(true)// 全局大寫(xiě)命名 ORACLE 注意
  .setEntityLombokModel(false)
  .setNaming(NamingStrategy.underline_to_camel)// 表名生成策略
  .entityTableFieldAnnotationEnable(ENABLE_TABLE_FIELD_ANNOTATION)
  .setInclude(TABLE_NAMES)//修改替換成你需要的表名,多個(gè)表名傳數(shù)組
  .setEntityColumnConstant(true)// 【實(shí)體】是否生成字段常量(默認(rèn) false)public static final String ID = "test_id";
  .setEntityBuilderModel(true);// 【實(shí)體】是否為構(gòu)建者模型(默認(rèn) false)public User setName(String name) {this.name = name; return this;}
 return strategyConfig;
 }

 /**
 * 自定義模板配置
 */
 private static TemplateConfig TemplateGenerate() {
 TemplateConfig templateConfig = new TemplateConfig()
  .setController("templates/java/controller.java" )
  .setService("templates/java/service.java" )
  .setServiceImpl("templates/java/serviceImpl.java" )
  .setMapper("templates/java/mapper.java" );
 return templateConfig;
 }

 private static final String MODULE_NAME = "sysRoleMenu";

 private static final String CLASS_NAME = "SysRoleMenu";

 private static final String class_name = "sysRoleMenu";

 /**
 * 自定義文件及key
 */
 private static InjectionConfig FileGenerate() {
 InjectionConfig injectionConfig = new InjectionConfig() {
  @Override
  public void initMap() {//自定義參數(shù)
  Map<String, Object> map = new HashMap<>();
  //這些自定義的值在vm模板的語(yǔ)法是通過(guò)${cfg.xxx}來(lái)調(diào)用的。
  map.put("moduleName", MODULE_NAME);
  map.put("ClassName", CLASS_NAME);
  map.put("className", class_name);
  map.put("packageName", PARENT_PACKAGE_NAME + "." + PACKAGE_NAME);
  map.put("author", AUTHOR);
  map.put("datetime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
  this.setMap(map);
  }
 };
 return injectionConfig;
 }

 /**
 * 包配置
 */
 public static PackageConfig PackageGenerate() {
 PackageConfig pc = new PackageConfig().setParent("com" )
  .setModuleName(PACKAGE_NAME)
  .setController("controller")
  .setEntity("domain")
  .setMapper("dao")
  .setXml("mapper");
 return pc;
 }

 public static void main(String[] args) {
 //全局配置
 GlobalConfig config = GlobalGenerate();
 //配置數(shù)據(jù)源
 DataSourceConfig dataSourceConfig = DaoSourceGenerate();
 //配置策略
 StrategyConfig strategyConfig = StrategyGenerate();
 //配置模板
 TemplateConfig templateConfig = TemplateGenerate();
 //自定義值
 InjectionConfig injectionConfig = FileGenerate();
 //配置包
 PackageConfig packageConfig = PackageGenerate();
 //生成代碼
 new AutoGenerator().setGlobalConfig(config)
  .setTemplate(templateConfig)//自定義模板路徑
  .setCfg(injectionConfig)
  .setDataSource(dataSourceConfig)
  .setStrategy(strategyConfig)
  .setPackageInfo(packageConfig)
  .execute();
 }
}

一定要注意?。?!InjectionConfig方法中自定義的Map返回對(duì)象可以返回給模板調(diào)用,調(diào)用方法是${cfg.xxx}

vm模板代碼實(shí)例

package ${package.Controller}; //這樣寫(xiě)是依據(jù)步驟2的PackageConfig方法配置

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import ${package.Entity}.${cfg.ClassName};
import ${package.Service}.${cfg.ClassName}Service;
import com.rent.model.AjaxResult;

/**
 * ${cfg.moduleName}Controller
 *
 * @author ${author}
 * @date ${cfg.datetime}
 */
@Controller
@RequestMapping("/${cfg.moduleName}/${cfg.className}")
public class ${cfg.ClassName}Controller extends BaseController

  @Autowired
  private ${cfg.ClassName}Service ${cfg.className}Service;

  /**
   * 查詢${cfg.className}列表
   */
  @GetMapping("/list")
  public TableDataInfo list(@RequestParam int pageNumber, @RequestParam int pageSize) {

 Page<${cfg.ClassName}> page = ${cfg.className}Service.select${cfg.ClassName}Page(pageNumber, pageSize);
 return page;
  }

  /**
   * 新增保存${cfg.ClassName}
   */
  @PostMapping("/add${cfg.ClassName}")
  public AjaxResult addSave(${cfg.ClassName} ${cfg.ClassName}) {

 boolean ret = ${cfg.ClassName}Service.save(${cfg.ClassName});
 return new AjaxResult(ret, ret ? "成功" : "失敗");
  }

  /**
   * 修改保存${cfg.ClassName}
   */
  @PostMapping("/edit")
  public AjaxResult editSave(${cfg.ClassName} ${cfg.ClassName}) {

 boolean ret = ${cfg.ClassName}Service.updateById(${cfg.ClassName});
 return new AjaxResult(ret, ret ? "成功" : "失敗");
  }

 @PostMapping("deleteById")
 @ApiOperation("根據(jù)ID刪除${cfg.ClassName}")
 public AjaxResult<${cfg.ClassName}> deleteById(Long id) {
 boolean ret = ${cfg.ClassName}Service.removeById(id);
 return new AjaxResult(true, ret ? "成功" : "失敗");
 }

 @PostMapping("findById")
 @ApiOperation("根據(jù)ID查詢${cfg.ClassName}")
 public AjaxResult<${cfg.ClassName}> findById(Long id) {
 ${cfg.ClassName} user = ${cfg.ClassName}Service.getById(id);
 return new AjaxResult(true, "成功", user);
 }
}

最后如果需要更詳細(xì)的vm調(diào)用請(qǐng)參閱官方文檔:https://baomidou.com/config/generator-config.html#datasource

到此這篇關(guān)于詳解使用Mybatis-plus + velocity模板生成自定義的代碼的文章就介紹到這了,更多相關(guān)Mybatis-plus velocity生成自定義代碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MyBatis逆向工程的創(chuàng)建和使用

    MyBatis逆向工程的創(chuàng)建和使用

    這篇文章主要介紹了MyBatis逆向工程的創(chuàng)建和使用,需要的朋友可以參考下
    2017-08-08
  • springmvc—handlermapping三種映射方式

    springmvc—handlermapping三種映射方式

    這篇文章主要介紹了springmvc—handlermapping三種映射方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Intellij IDEA 如何通過(guò)數(shù)據(jù)庫(kù)表生成帶注解的實(shí)體類(lèi)(圖文詳細(xì)教程)

    Intellij IDEA 如何通過(guò)數(shù)據(jù)庫(kù)表生成帶注解的實(shí)體類(lèi)(圖文詳細(xì)教程)

    這篇文章主要介紹了Intellij IDEA 如何通過(guò)數(shù)據(jù)庫(kù)表生成帶注解的實(shí)體類(lèi)(圖文詳細(xì)教程),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Java Date類(lèi)常用示例_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java Date類(lèi)常用示例_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    在JDK1.0中,Date類(lèi)是唯一的一個(gè)代表時(shí)間的類(lèi),但是由于Date類(lèi)不便于實(shí)現(xiàn)國(guó)際化,所以從JDK1.1版本開(kāi)始,推薦使用Calendar類(lèi)進(jìn)行時(shí)間和日期處理。這里簡(jiǎn)單介紹一下Date類(lèi)的使用,需要的朋友可以參考下
    2017-05-05
  • Spring如何根據(jù)條件創(chuàng)建bean,@Conditional注解使用方式

    Spring如何根據(jù)條件創(chuàng)建bean,@Conditional注解使用方式

    這篇文章主要介紹了Spring如何根據(jù)條件創(chuàng)建bean,@Conditional注解使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • SpringBoot3解決跨域請(qǐng)求的方案小結(jié)

    SpringBoot3解決跨域請(qǐng)求的方案小結(jié)

    解決跨域請(qǐng)求,主要有JSONP,iframe,window.name,CORS等方式,其中CORS方式是最常用的跨域?qū)崿F(xiàn)方式,而且是對(duì)各種請(qǐng)求方法、各種數(shù)據(jù)請(qǐng)求類(lèi)型都是完美支持的,本文介紹了SpringBoot3解決跨域請(qǐng)求的方案小結(jié),需要的朋友可以參考下
    2024-07-07
  • 淺析Android系統(tǒng)中HTTPS通信的實(shí)現(xiàn)

    淺析Android系統(tǒng)中HTTPS通信的實(shí)現(xiàn)

    這篇文章主要介紹了淺析Android系統(tǒng)中HTTPS通信的實(shí)現(xiàn),實(shí)現(xiàn)握手的源碼為Java語(yǔ)言編寫(xiě),需要的朋友可以參考下
    2015-07-07
  • Spring中的IOC深度解讀

    Spring中的IOC深度解讀

    這篇文章主要介紹了Spring中的IOC深度解讀,spring容器會(huì)創(chuàng)建和組裝好清單中的對(duì)象,然后將這些對(duì)象存放在spring容器中,當(dāng)程序中需要使用的時(shí)候,可以到容器中查找獲取,然后直接使用,需要的朋友可以參考下
    2023-09-09
  • Spring5學(xué)習(xí)之基礎(chǔ)知識(shí)總結(jié)

    Spring5學(xué)習(xí)之基礎(chǔ)知識(shí)總結(jié)

    這篇文章主要介紹了Spring5學(xué)習(xí)之基礎(chǔ)知識(shí)總結(jié),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • Java設(shè)計(jì)模式之觀察者模式

    Java設(shè)計(jì)模式之觀察者模式

    這篇文章主要介紹了Java設(shè)計(jì)模式之觀察者模式,觀察者模式,是一種行為性模型,又叫發(fā)布-訂閱模式,他定義對(duì)象之間一種一對(duì)多的依賴關(guān)系,使得當(dāng)一個(gè)對(duì)象改變狀態(tài),則所有依賴于它的對(duì)象都會(huì)得到通知并自動(dòng)更新,需要的朋友可以參考下
    2023-11-11

最新評(píng)論

莱芜市| 兴城市| 永吉县| 都昌县| 肃南| 苗栗县| 桂平市| 兴海县| 广饶县| 防城港市| 南汇区| 云和县| 临沭县| 凤阳县| 永定县| 卢湾区| 灵寿县| 武功县| 汽车| 通辽市| 武强县| 沙雅县| 务川| 临漳县| 聂拉木县| 新郑市| 聊城市| 老河口市| 灵宝市| 西华县| 游戏| 兴安县| 香河县| 陇川县| 德惠市| 蕉岭县| 抚顺县| 高青县| 武定县| 康马县| 南康市|