日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mybatisplus自动生成id_mybatisPlus自动代码生成实例(超级简单使用)

發布時間:2025/3/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mybatisplus自动生成id_mybatisPlus自动代码生成实例(超级简单使用) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

每次新項目的開發,都避免不了建很多的dao層、service等等的文件夾,顯得很是麻煩,在此推薦一種可快速生成entity、service、mapper、controller文件,以便節省我們的時間,減少加班。。。。。。

1.pom中導入以下三個包

org.apache.velocity

velocity

1.7

cn.hutool

hutool-all

4.5.18

com.baomidou

mybatis-plus

2.3

2.新建一個類AutoFile

package com.example.vueservice.controller;

import cn.hutool.core.collection.CollUtil;

import com.baomidou.mybatisplus.enums.FieldFill;

import com.baomidou.mybatisplus.generator.AutoGenerator;

import com.baomidou.mybatisplus.generator.config.*;

import com.baomidou.mybatisplus.generator.config.po.TableFill;

import com.baomidou.mybatisplus.generator.config.rules.DbType;

import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.List;

public class AutoFile {

/**

* 測試 run 執行 注意:不生成service接口 注意:不生成service接口 注意:不生成service接口

*

* 配置方法查看 {@link ConfigGenerator}

*

*/

public static void main(String[] args) {

AutoGenerator mpg = new AutoGenerator();

// 全局配置

GlobalConfig gc = new GlobalConfig();

gc.setOutputDir("C://");//代碼生成存放位置

gc.setFileOverride(true);

gc.setActiveRecord(false);

gc.setEnableCache(false);// XML 二級緩存

gc.setBaseResultMap(true);// XML ResultMap

gc.setBaseColumnList(false);// XML columList

gc.setOpen(true);

gc.setAuthor("小明");//此處填寫代碼生成人姓名

// 自定義文件命名,注意 %s 會自動填充表實體屬性!

// gc.setMapperName("%sDao");

// gc.setXmlName("%sDao");

gc.setServiceImplName("%sService");

// gc.setServiceImplName("%sServiceDiy");

// gc.setControllerName("%sAction");

mpg.setGlobalConfig(gc);

// 數據源配置

DataSourceConfig dsc = new DataSourceConfig();

dsc.setDbType(DbType.MYSQL);

dsc.setDriverName("com.mysql.jdbc.Driver");

dsc.setUsername("xxx");//數據庫用戶名

dsc.setPassword("xxx");//數據庫密碼

dsc.setUrl("jdbc:mysql://xxx:xxxx/xxx?characterEncoding=utf8&allowMultiQueries=true");//數據庫連接地址

/*dsc.setTypeConvert(new SqlServerTypeConvert(){

// 自定義數據庫表字段類型轉換【可選】

@Override

public DbColumnType processTypeConvert(String fieldType) {

if (fieldType.contains("tinyint") ) {

return DbColumnType.BLOB;

}

// 注意!!processTypeConvert 存在默認類型轉換,

//如果不是你要的效果請自定義返回、非如下直接返回。

return super.processTypeConvert(fieldType);

}

});*/

mpg.setDataSource(dsc);

// 策略配置

StrategyConfig strategy = new StrategyConfig();

// strategy.setTablePrefix("sys_");// 此處可以修改為您的表前綴

strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略

/**

* 第一步

* 代碼生成需要改動這里,將待生成的表名替換到下面

*

* 2017.11.2

*/

strategy.setInclude(new String[] { "t_user" }); // 需要生成的表

/**

* 第二步

* 去掉表名前綴

*

* 2017.11.2

*/

strategy.setTablePrefix(new String[] { "t_" });// 此處可以修改為您的表前綴

// strategy.setExclude(new String[]{"test"}); // 排除生成的表

// 自定義實體父類

strategy.setSuperEntityClass("com.mayi.test.base.BaseEntity");

// 自定義實體,公共字段

strategy.setSuperEntityColumns(

new String[] {});

// 自定義 mapper 父類

strategy.setSuperMapperClass("com.baomidou.mybatisplus.mapper.BaseMapper");

// 自定義 service 父類

strategy.setSuperServiceImplClass("com.mayi.test.base.BaseService");

// 自定義 controller 父類

strategy.setSuperControllerClass("com.mayi.test.base.BaseController");

//邏輯刪除屬性名稱

strategy.setLogicDeleteFieldName("is_deleted");

List tableFillList= CollUtil.newArrayList();

TableFill fill=new TableFill("update_time", FieldFill.INSERT_UPDATE);

tableFillList.add(fill);

fill=new TableFill("create_time", FieldFill.INSERT);

tableFillList.add(fill);

strategy.setTableFillList(tableFillList);

// 自定義 service 實現類父類

//strategy.setSuperServiceImplClass("org.ibase4j.core.base.BaseService");

// 自定義 controller 父類

//strategy.setSuperControllerClass("org.ibase4j.core.base.AbstractController");

// 【實體】是否生成字段常量(默認 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.mayi.test");//此處填寫包名

/**

* 第三步

* 按模塊調整代碼放置目錄

*

* 2017.11.2

*/

pc.setEntity("sys.entity");

pc.setMapper("sys.dao");

pc.setXml("sys.dao.mappers");

pc.setServiceImpl("sys.service");

pc.setController("sys.web");

mpg.setPackageInfo(pc);

// 注入自定義配置,可以在 VM 中使用 cfg.abc 設置的值

/*InjectionConfig cfg = new InjectionConfig() {

public void initMap() {

Map map = new HashMap();

map.put("providerClass", "ISysProvider");

map.put("providerClassPackage", "org.ibase4j.provider.ISysProvider");

this.setMap(map);

}

};

mpg.setCfg(cfg);*/

// 自定義模板配置,可以 copy 源碼 mybatis-plus/src/main/resources/template 下面內容修改,

// 放置自己項目的 src/main/resources/template 目錄下, 默認名稱一下可以不配置,也可以自定義模板名稱

TemplateConfig tc = new TemplateConfig();

tc.setEntity("templates/entity.java.vm");

tc.setMapper("templates/mapper.java.vm");

tc.setXml("templates/mapper.xml.vm");

tc.setServiceImpl("templates/service.java.vm");

tc.setController("templates/controller.java.vm");

mpg.setTemplate(tc);

// 執行生成

mpg.execute();

System.out.println("代碼生成完畢");

}

}

3.導入模板,模板可根據自己的需求修改,在此只提供基礎

controller.java.vm

package ${package.Controller};

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.baomidou.mybatisplus.mapper.EntityWrapper;

import com.baomidou.mybatisplus.plugins.Page;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import xxx.entity.RestResultGenerator;//1,2,3,4,5,6導包類在博客文最下邊

import xx.beanvalidator.AddGroup;//2

import xx.beanvalidator.EditGroup;//3

import xx.beanvalidator.PageGroup;//4

import xx.BaseQuery;//5

import xx.util.ValidateUtil;//6

import ${package.Entity}.${entity};

#if(${restControllerStyle})

import org.springframework.web.bind.annotation.RestController;

#else

import org.springframework.stereotype.Controller;

#end

#if(${superControllerClassPackage})

import ${superControllerClassPackage};

#end

import ${package.ServiceImpl}.${entity}Service;

import cn.hutool.core.util.StrUtil;

/**

*

* @ClassName: ${table.controllerName}

* @Description: TODO(這里用一句話描述這個類的作用)

* @author ${author}

* @date ${date}

*/

#if(${restControllerStyle})

@RestController

#else

@Controller

#end

@RequestMapping(value = "#if(${package.ModuleName})/${package.ModuleName}#end/#if(${controllerMappingHyphenStyle})${controllerMappingHyphen}#else${table.entityPath}#end")

#if(${superControllerClass})

public class ${table.controllerName} extends ${superControllerClass} {

#else

public class ${table.controllerName} {

#end

@Autowired

private ${entity}Service ${table.entityPath}Service;

@RequestMapping(method = RequestMethod.POST, value = "/add")

public void add(${entity} ${table.entityPath}, HttpServletRequest request,

HttpServletResponse response) {

beanValidator(${table.entityPath}, AddGroup.class);

${table.entityPath}Service.insert(${table.entityPath});

renderResult(response);

}

@RequestMapping(method = RequestMethod.POST, value = "/edit")

public void edit(${entity} ${table.entityPath}, HttpServletRequest request,

HttpServletResponse response) {

beanValidator(${table.entityPath}, EditGroup.class);

${table.entityPath}Service.updateById(${table.entityPath});

renderResult(response);

}

@RequestMapping(method = RequestMethod.POST, value = "/delete")

public void delete(HttpServletRequest request, HttpServletResponse response,

String ids) {

//ValidateUtil.isNotBlank(ids, "主鍵參數非法,操作失敗,請檢查");

List idList = StrUtil.split(ids, ',');

${table.entityPath}Service.deleteBatchIds(idList);

renderResult(response);

}

@RequestMapping(method = RequestMethod.GET, value = "/detail")

public void detail(HttpServletRequest request, HttpServletResponse response,

String id) {

//ValidateUtil.isNotBlank(id, "主鍵參數非法,操作失敗,請檢查");

${entity} ${table.entityPath} = ${table.entityPath}Service.selectById(id);

renderResult(response, RestResultGenerator.success(${table.entityPath}));

}

@RequestMapping(method = RequestMethod.GET, value = "/queryList")

public void queryList(HttpServletRequest request, HttpServletResponse response) {

EntityWrapper wrapper = new EntityWrapper();

List list = ${table.entityPath}Service.selectList(wrapper);

renderResult(response, RestResultGenerator.success(list));

}

@RequestMapping(method = RequestMethod.GET, value = "/queryPageList")

public void queryPageList(HttpServletRequest request, HttpServletResponse response,

BaseQuery query) {

beanValidator(query, PageGroup.class);

EntityWrapper wrapper = new EntityWrapper();

Page pg = new Page(query.getPage(), query.getRows());

Page list = ${table.entityPath}Service.selectPage(pg, wrapper);

renderResult(response, RestResultGenerator.success(list));

}

}

entity.java.vm

package ${package.Entity};

import xxx.beanvalidator.EditGroup;//在博客最下邊

import java.io.Serializable;

import com.baomidou.mybatisplus.annotations.TableId;

#foreach($pkg in ${table.importPackages})

import ${pkg};

#end

#if(${entityLombokModel})

import com.baomidou.mybatisplus.annotations.Version;

import lombok.Data;

import lombok.experimental.Accessors;

#end

import org.hibernate.validator.constraints.NotBlank;

/**

*

* @ClassName: ${entity}

* @Description: TODO(這里用一句話描述這個類的作用)

* @author ${author}

* @date ${date}

*/

#if(${entityLombokModel})

@Data

@EqualsAndHashCode(callSuper = true)

@Accessors(chain = true)

#end

#if(${table.convert})

@TableName("${table.name}")

#end

#if(${superEntityClass})

public class ${entity} extends ${superEntityClass} implements Serializable {

#else

public class ${entity} implements Serializable {

#end

private static final long serialVersionUID = 1L;

## ---------- BEGIN 字段循環遍歷 ----------

#foreach($field in ${table.fields})

#if(${field.keyFlag})

#set($keyPropertyName=${field.propertyName})

#end

#if("$!field.comment" != "")

/**

* ${field.comment}

*/

#end

#if(${field.keyFlag})

## 主鍵

#if(${field.keyIdentityFlag})

@TableId(value="${field.name}", type= IdType.ID_WORKER)

@NotBlank(message = "主鍵不能為空", groups={EditGroup.class})

#elseif(${field.convert})

@TableId("${field.name}")

@NotBlank(message = "主鍵不能為空", groups={EditGroup.class})

#else

@TableId("${field.name}")

@NotBlank(message = "主鍵不能為空", groups={EditGroup.class})

#end

## 普通字段

#elseif(${field.fill})

## ----- 存在字段填充設置 -----

#if(${field.convert})

@TableField(value = "${field.name}", fill = FieldFill.${field.fill})

#else

@TableField(fill = FieldFill.${field.fill})

#end

#elseif(${field.convert})

@TableField("${field.name}")

#else

@TableField("${field.name}")

#end

## 樂觀鎖注解

#if(${versionFieldName}==${field.name})

@Version

#end

## 邏輯刪除注解

#if(${logicDeleteFieldName}==${field.name})

@TableLogic

#end

private ${field.propertyType} ${field.propertyName};

#end

## ---------- END 字段循環遍歷 ----------

#if(!${entityLombokModel})

#foreach($field in ${table.fields})

#if(${field.propertyType.equals("boolean")})

#set($getprefix="is")

#else

#set($getprefix="get")

#end

public ${field.propertyType} ${getprefix}${field.capitalName}() {

return ${field.propertyName};

}

#if(${entityBuilderModel})

public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}) {

#else

public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) {

#end

this.${field.propertyName} = ${field.propertyName};

#if(${entityBuilderModel})

return this;

#end

}

#end

#end

#if(${entityColumnConstant})

#foreach($field in ${table.fields})

public static final String ${field.name.toUpperCase()} = "${field.name}";

#end

#end

#if(!${entityLombokModel})

@Override

public String toString() {

return "${entity}{" +

#foreach($field in ${table.fields})

#if($!{velocityCount}==1)

"${field.propertyName}=" + ${field.propertyName} +

#else

", ${field.propertyName}=" + ${field.propertyName} +

#end

#end

"}";

}

#end

}

mapper.java.vm

package ${package.Mapper};

import ${package.Entity}.${entity};

import ${superMapperClassPackage};

public interface ${table.mapperName} extends ${superMapperClass} {

}

mapper.xml.vm

#if(${enableCache})

#end

#if(${baseResultMap})

#foreach($field in ${table.fields})

#if(${field.keyFlag})##生成主鍵排在第一位

#end

#end

#foreach($field in ${table.commonFields})##生成公共字段

#end

#foreach($field in ${table.fields})

#if(!${field.keyFlag})##生成普通字段

#end

#end

#end

#if(${baseColumnList})

#foreach($field in ${table.commonFields})

#if(${field.name} == ${field.propertyName})${field.name}#else${field.name} AS ${field.propertyName}#end,

#end

${table.fieldNames}

#end

service.java.vm

package ${package.ServiceImpl};

import ${package.Entity}.${entity};

import ${package.Mapper}.${table.mapperName};

import ${superServiceImplClassPackage};

import org.springframework.stereotype.Service;

/**

*

* @ClassName: ${entity}Service

* @Description: TODO(這里用一句話描述這個類的作用)

* @author ${author}

* @date ${date}

*/

@Service

public class ${entity}Service extends ${superServiceImplClass} {

}

模板存放位置:

4.最后生成文件目錄

======================================================補充代碼=============================================================

/**

* restful請求統一返回響應體生成工具

*

*/

public class RestResultGenerator {

private RestResultGenerator() {

}

public static RestResult success() {

return success(null, "操作成功!");

}

public static RestResult success(T data) {

return success(data, "操作成功!");

}

public static RestResult success(T data, String msg, boolean result) {

return generator(result, data, msg, HttpCodeEnum.OK.value());

}

public static RestResult success(T data, String msg) {

return generator(true, data, msg, HttpCodeEnum.OK.value());

}

public static RestResult success(T data, String msg, String ticket) {

return generator(true, data, msg, ticket, HttpCodeEnum.OK.value());

}

public static RestResult success(T data, String msg, Integer httpCode) {

return generator(true, data, msg, httpCode);

}

public static RestResult fail() {

return fail(null, null);

}

public static RestResult fail(String msg) {

return fail(null, msg);

}

public static RestResult fail(T data, String msg) {

return generator(false, data, msg, HttpCodeEnum.SERVER_ERROR.value());

}

public static RestResult generator(boolean result, T data, String msg, Integer httpCode) {

return generator(result, data, msg, null, httpCode);

}

public static RestResult generator(boolean result, T data, String msg, String ticket, Integer httpCode) {

RestResult restResult = new RestResult();

restResult.setResult(result);

restResult.setData(data);

restResult.setMsg(msg);

restResult.setTicket(ticket);

restResult.setHttpCode(httpCode);

return restResult;

}

}

public class RestResult implements Serializable

{

private static final long serialVersionUID = 5363887016344037411L;

private boolean result;

private T data;

private Integer httpCode;

private String msg;

private String ticket;

public RestResult()

{

}

public RestResult(boolean result)

{

this.result = result;

}

public RestResult(String msg)

{

this.msg = msg;

}

public RestResult(String msg, boolean result)

{

this.msg = msg;

this.result = result;

}

public String toJSONString()

{

return toJSONString("yyyy-MM-dd HH:mm:ss");

}

public String toJSONString(String dateFormat)

{

return JsonUtil.toJSONString(this, dateFormat);

}

public boolean isResult()

{

return result;

}

public void setResult(boolean result)

{

this.result = result;

}

public T getData()

{

return data;

}

public void setData(T data)

{

this.data = data;

}

public Integer getHttpCode()

{

return httpCode;

}

public void setHttpCode(Integer httpCode)

{

this.httpCode = httpCode;

}

public String getMsg()

{

return msg;

}

public void setMsg(String msg)

{

this.msg = msg;

}

public String getTicket()

{

return ticket;

}

public void setTicket(String ticket)

{

this.ticket = ticket;

}

}

public enum HttpCodeEnum {

/**

* 200請求成功

*/

OK(200, "請求成功"),

/**

* 500控制器出錯

*/

SERVER_ERROR(500, "服務器內部拋出錯誤"),

private final Integer value;

private final String desc;

private HttpCodeEnum(Integer value, String desc) {

this.value = value;

this.desc = desc;

}

/**

* Return the integer value of this status code.

*/

public Integer value() {

return this.value;

}

public String msg() {

//return Resources.getMessage("HTTPCODE_" + this.value);

return this.desc;

}

public String toString() {

return this.value.toString();

}

}

public interface AddGroup {

}

public interface EditGroup {

}

public interface PageGroup {

}

public class BaseQuery implements Serializable {

private static final long serialVersionUID = -6893838165058397865L;

private String fromDate;

private String toDate;

@Min(value = 1, message = "分頁記錄數不能為空" , groups = {PageGroup.class})

private int rows;

@Min(value = 1, message = "分頁頁碼不能為空" , groups = {PageGroup.class})

private int page;

public String getFromDate() {

return fromDate;

}

public void setFromDate(String fromDate) {

this.fromDate = fromDate;

}

public String getToDate() {

return toDate;

}

public void setToDate(String toDate) {

this.toDate = toDate;

}

public int getRows() {

return rows;

}

public void setRows(int rows) {

this.rows = rows;

}

public int getPage() {

return page;

}

public void setPage(int page) {

this.page = page;

}

public void convertToLongTime() {

if (StrUtil.isNotBlank(fromDate) && StrUtil.isNotBlank(toDate)) {

this.fromDate = DateUtil.parse(fromDate, ConfigConsts.NORM_DATE_PATTERN).toDateStr() + " 00:00:00";

this.toDate = DateUtil.parse(toDate, ConfigConsts.NORM_DATE_PATTERN).toDateStr() + " 23:59:59";

;

}

}

}

public interface ConfigConsts {

static final String NORM_DATE_PATTERN = "yyyy-MM-dd";

}

總結

以上是生活随笔為你收集整理的mybatisplus自动生成id_mybatisPlus自动代码生成实例(超级简单使用)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。