在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

寫一個(gè)比ChatGPT還牛的CRUD代碼生成器

jf_ro2CN3Fa ? 來源:稀土掘金 ? 2023-02-20 13:58 ? 次閱讀

最近在做一個(gè)項(xiàng)目,需要新建20多張表

相信大多數(shù)同學(xué)應(yīng)該和我一樣,都是比較討厭創(chuàng)建新表這個(gè)工作的,因?yàn)槊縿?chuàng)建一張表,都要去創(chuàng)建實(shí)體類、創(chuàng)建增刪改查的接口、編寫增刪改查的SQL代碼等等,把這些事情做完,2個(gè)小時(shí)也就過去了

我就在思考啊,每一張表,就要耗費(fèi)兩個(gè)小時(shí),20多張表,那就是40多個(gè)小時(shí),一周的時(shí)間就這樣過去了。

思考

這誰(shuí)受得了呀,所以我打算寫一個(gè)工具,把這些代碼都自動(dòng)生成出來!

代碼都自動(dòng)生成出來

在連續(xù)爆肝了5個(gè)晚上之后,我做出了這款自動(dòng)生成業(yè)務(wù)代碼的工具!

9418f320-b04f-11ed-bfe3-dac502259ad0.jpg

自動(dòng)生成業(yè)務(wù)代碼

我把它放在了我的工具站上,大家可以訪問這個(gè)域名直接使用https://utilsbox.cn/?app=bizcode

使用演示

下面給大家演示一下

假設(shè)我們現(xiàn)在創(chuàng)建一個(gè)商品

首先填寫表名和表的中文名稱

然后我們添加商品表對(duì)應(yīng)的字段,這些操作和我們?nèi)粘J褂玫臄?shù)據(jù)庫(kù)工具差不多

把字段填寫好了之后,點(diǎn)擊“一鍵生成代碼”

942cbaea-b04f-11ed-bfe3-dac502259ad0.jpg

完成表信息編輯

高潮的地方來了

DB層、業(yè)務(wù)層、甚至是controller層的代碼,工具都幫我們自動(dòng)生成了!

來看下代碼,建表sql、增刪改查sql、表對(duì)應(yīng)的實(shí)體類、DB層的接口類、業(yè)務(wù)層的實(shí)體類、業(yè)務(wù)層的接口類、業(yè)務(wù)接口的實(shí)現(xiàn)類、業(yè)務(wù)層實(shí)體類和db層實(shí)體類的轉(zhuǎn)換器,最后是controller層,這些代碼全都幫我們生成好了。

943eb524-b04f-11ed-bfe3-dac502259ad0.gif

代碼全都幫我們生成好了

這是什么概念呢

現(xiàn)在我們只需要把這些代碼拷貝到項(xiàng)目里,簡(jiǎn)單設(shè)置一下類的引用,增刪改查這些基本功能,就已經(jīng)可以直接給前端去調(diào)用了。

CRUD

很多同學(xué)可能會(huì)問,如果是現(xiàn)有的數(shù)據(jù)表,再來這里添加一次感覺太麻煩了

這個(gè)問題我也遇到了,所以我做了一個(gè)識(shí)別建表SQL的功能,常見的數(shù)據(jù)庫(kù)工具對(duì)于已經(jīng)創(chuàng)建好的表,都提供建表語(yǔ)句的復(fù)制功能,只需要把建表SQL粘貼到這個(gè)文本框里。

點(diǎn)擊“識(shí)別”按鈕,這個(gè)SQL的信息會(huì)自動(dòng)識(shí)別過來,這時(shí)候只需要把表的中文名稱填寫上去,點(diǎn)擊“一鍵生成代碼”,就可以馬上得到這個(gè)表的業(yè)務(wù)代碼。

94ecd6c2-b04f-11ed-bfe3-dac502259ad0.jpg

業(yè)務(wù)代碼生成器

通用性的思考

不知道大家覺得怎么樣哈,如果只是我自己用,我覺著已經(jīng)非常好了,但既然是開放出來給大家用,通用性肯定還是不夠的。

因?yàn)楝F(xiàn)在看到的這一套自動(dòng)生成的代碼,可能只是適合我,但不同的人、不同的公司,它們項(xiàng)目結(jié)構(gòu)的分層、代碼的細(xì)節(jié),都是不一樣的

所以,我還開發(fā)了代碼模版配置的功能

點(diǎn)擊“代碼模版配置”按鈕,在這個(gè)彈窗里,我們可以新增、刪除代碼的分類。同樣的,也可以新增、刪除和編輯具體的代碼模版。

95017136-b04f-11ed-bfe3-dac502259ad0.jpg

代碼模版

代碼生成的原理

在說代碼模版具體怎么配置之前,先給大家講一下代碼自動(dòng)生成的原理

它由代碼模版和動(dòng)態(tài)參數(shù)組成,核心就是匹配 - 替換

首先,工具提供了很多動(dòng)態(tài)參數(shù),這些動(dòng)態(tài)參數(shù),對(duì)應(yīng)的是我們填寫的表名、字段名等等這些信息的原始值,或者處理過后的值。

然后,代碼模版由用戶自行定義,在代碼的關(guān)鍵位置,插入動(dòng)態(tài)參數(shù),即可形成一份代碼模版。

最后,工具通過匹配和替換動(dòng)態(tài)參數(shù),最終生成了代碼。

理論上,不論什么語(yǔ)言,你都可以配置專屬于你自己的代碼模版。

舉個(gè)簡(jiǎn)單的栗子:

我們配置了一份這樣的代碼模版,如下:

/**
*$table_desc$Model模型
*Createdby創(chuàng)建人on$current_time$.
*/
publicclass$table_name_hump_A$ModelextendsToString{
}

可以看到,模版里分別使用了$table_desc$(表中文名)、$current_time$(當(dāng)前時(shí)間)、$table_name_hump_A$(表名轉(zhuǎn)首字母大寫駝峰) 這三個(gè)動(dòng)態(tài)參數(shù)。

當(dāng)我們?cè)O(shè)置 表名 = goods_order、表中文名 = 商品訂單 時(shí),代碼生成的結(jié)果如下所示:

/**
*商品訂單Model模型
*Createdby創(chuàng)建人on2023-02-051732.
*/
publicclassGoodsOrderModelextendsToString{
}

動(dòng)態(tài)參數(shù)部分,全部替換成了我們輸入的表信息。

最后希望這個(gè)項(xiàng)目對(duì)大家有用,之后我會(huì)開發(fā)更多有意思的項(xiàng)目。

由于這個(gè)項(xiàng)目都是晚上加班肝出來的,可能會(huì)存在一些BUG,發(fā)現(xiàn)了我會(huì)盡快修復(fù)的,也請(qǐng)大家多多包涵。

代碼模版參考

以下是當(dāng)前工具里默認(rèn)的代碼模版,你可以通過參考這些模版,舉一反三,配置出專屬于你自己的代碼模版。

工具提供了模版的導(dǎo)入和導(dǎo)出功能,如果你創(chuàng)建好了一份非常滿意的模版,可以導(dǎo)出,然后發(fā)給你的同事直接使用,這樣它就不用重復(fù)創(chuàng)建了,你也可以忽悠你的同事來創(chuàng)建,然后分享給你。

建表SQL模版

CREATETABLE`$table_name$`(
$create_table_field_list$
PRIMARYKEY(`$primary_key$`)
)ENGINE=$db_engine$DEFAULTCHARSET=$db_encoded$;

實(shí)體類模版

主體

/**
*$table_desc$DTO模型
*Createdby創(chuàng)建人on$current_time$.
*/
publicclass$table_name_hump_A$DO{
$member_param_list$
$get_set_method_list$
}

成員代碼塊 成員變量列表(member_param_list)

/**$field_comment$*/
private$field_type_java$$field_name_hump$;

成員代碼塊 GetSet方法列表(get_set_method_list)

public$field_type_java$get$field_name_hump_A$(){
return$field_name_hump$;
}

publicvoidset$field_name_hump_A$($field_type_java$$field_name_hump$){
this.$field_name_hump$=$field_name_hump$;
}

接口類模版(DB層)

importorg.apache.ibatis.annotations.Mapper;
importorg.apache.ibatis.annotations.Param;

importjava.util.List;
importjava.util.Map;

/**
*$table_desc$DB接口
*Createdby創(chuàng)建人on$current_time$
*/
@Mapper
publicinterface$table_name_hump_A$DAO{

/**
*添加
*@paramdata
*return影響行數(shù)
*/
intinsert($table_name_hump_A$DOdata);

/**
*修改
*@paramdata
*return影響行數(shù)
*/
intupdate($table_name_hump_A$DOdata);

/**
*分頁(yè)查詢
*@paramparam
*return結(jié)果列表
*/
List<$table_name_hump_A$DO>pageQuery(Mapparam);

/**
*查詢count
*@paramparam
*returncount條數(shù)
*/
LongpageQueryCount(Mapparam);

/**
*根據(jù)ID查詢
*@paramid
*return結(jié)果DO對(duì)象
*/
$table_name_hump_A$DOqueryById(@Param("$primary_key_hump$")$primary_key_type_java$$primary_key_hump$);

/**
*根據(jù)ID查詢(帶鎖)
*@paramid
*return結(jié)果DO對(duì)象
*/
$table_name_hump_A$DOqueryByIdLock(@Param("$primary_key_hump$")$primary_key_type_java$$primary_key_hump$);
}

CRUD SQL模版


 




INSERTINTO$table_name$($insert_field_name_list$)
VALUES($insert_field_value_list$);



UPDATE$table_name$SET
$update_field_list$
WHERE$primary_key$=#{$primary_key_hump$};



SELECT$select_field_list$FROM$table_name$
WHERE1=1
$while_field_list$

ORDERBY$primary_key$DESC


LIMIT#{offset},#{rows}




SELECTCOUNT(1)astotalFROM$table_name$
WHERE1=1
$while_field_list$



SELECT$select_field_list$FROM$table_name$
WHERE$primary_key$=#{$primary_key_hump$};



SELECT$select_field_list$FROM$table_name$
WHERE$primary_key$=#{$primary_key_hump$}FORUPDATE;



模型轉(zhuǎn)換器模版

不同層級(jí)間,可能會(huì)有不同的實(shí)體類,那么它們相互之間的數(shù)據(jù)轉(zhuǎn)換,也是一個(gè)重復(fù)且浪費(fèi)時(shí)間的工作,所以也可以配置一個(gè)模版。

importorg.springframework.util.CollectionUtils;

importjava.util.ArrayList;
importjava.util.List;

/**
*$table_desc$模型轉(zhuǎn)換器
*Createdby創(chuàng)建人on$current_time$
*/
publicclass$table_name_hump_A$Converter{

/**
*dto轉(zhuǎn)do
*@paramsource
*returndo模型
*/
publicstatic$table_name_hump_A$DOtoDo($table_name_hump_A$DTOsource){
$table_name_hump_A$DOtarget=new$table_name_hump_A$DO();
$converter_source_to_target_params_list$
returntarget;
}

/**
*do轉(zhuǎn)dto
*@paramsource
*returndto模型
*/
publicstatic$table_name_hump_A$DTOtoDto($table_name_hump_A$DOsource){
$table_name_hump_A$DTOtarget=new$table_name_hump_A$DTO();
$converter_source_to_target_params_list$
returntarget;
}

/**
*dolist轉(zhuǎn)dto
*@paramdata
*returnlistdto模型
*/
publicstaticList<$table_name_hump_A$DTO>toDtoList(List<$table_name_hump_A$DO>data){
if(CollectionUtils.isEmpty(data)){
returnnull;
}
List<$table_name_hump_A$DTO>list=newArrayList<>();
for($table_name_hump_A$DOitem:data){
list.add($table_name_hump_A$Converter.toDto(item));
}
returnlist;
}
}

成員代碼塊 模型轉(zhuǎn)換器參數(shù)列表(converter_source_to_target_params_list)

target.set$field_name_hump_A$(source.get$field_name_hump_A$());

業(yè)務(wù)接口實(shí)現(xiàn)類模版

importcom.alibaba.fastjson.JSONObject;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
importorg.springframework.stereotype.Service;

/**
*$table_desc$業(yè)務(wù)實(shí)現(xiàn)
*Createdby創(chuàng)建人on$current_time$
*/
@Service
publicclass$table_name_hump_A$ServiceImplimplements$table_name_hump_A$Service{

privatestaticfinalLoggerLOGGER=LoggerFactory.getLogger($table_name_hump_A$ServiceImpl.class);

@Resource
private$table_name_hump_A$DAO$table_name_hump$DAO;

@Override
publicCommonResultcreate(JSONObjectrequest){

//入?yún)⑥D(zhuǎn)成對(duì)應(yīng)類型
CommonAssert.isNoEmptyObj(request,"請(qǐng)求參數(shù)不可空");
$table_name_hump_A$DTOdto=JSON.toJavaObject(request,$table_name_hump_A$DTO.class);

//參數(shù)校驗(yàn)
$biz_check_required_params$

//轉(zhuǎn)成do模型
$table_name_hump_A$DOdataDo=$table_name_hump_A$Converter.toDo(dto);

//落庫(kù)
intcount=$table_name_hump$DAO.insert(dataDo);
CommonAssert.isTrue(count>0,"創(chuàng)建失敗,請(qǐng)重試");

//返回創(chuàng)建成功的ID數(shù)據(jù)
returnnewCommonResult(dataDo.get$primary_key_hump_A$());
}

@Override
publicCommonResultmodify(JSONObjectrequest){

//入?yún)⑥D(zhuǎn)成對(duì)應(yīng)類型
CommonAssert.isNoEmptyObj(request,"請(qǐng)求參數(shù)不可空");
$table_name_hump_A$DTOdto=JSON.toJavaObject(request,$table_name_hump_A$DTO.class);

//參數(shù)校驗(yàn)
$biz_check_required_params$

//轉(zhuǎn)成do模型
$table_name_hump_A$DOdataDo=$table_name_hump_A$Converter.toDo(dto);

//落庫(kù)
intcount=$table_name_hump$DAO.update(dataDo);
CommonAssert.greaterThanZero(count,"修改失敗,請(qǐng)重試");

//返回修改成功的ID數(shù)據(jù)
returnnewCommonResult(dataDo.get$primary_key_hump_A$());
}

@Override
publicCommonResultpageQuery(JSONObjectrequest){

//入?yún)⒒拘r?yàn)
CommonAssert.isNoEmptyObj(request,"請(qǐng)求參數(shù)不可空");

//分頁(yè)信息校驗(yàn)
PaginationDOpagination=PaginationDO.setRequestOffsetAndRows(request);
CommonAssert.isNoEmptyObj(pagination,"分頁(yè)參數(shù)$pageIndex、$pageSize不可空");
CommonAssert.isTrue(pagination.getPageSize()<=?100,?"單次查詢條數(shù)不可超過100條");

????????//?取分頁(yè)列表數(shù)據(jù)
????????List<$table_name_hump_A$DO>dbResult=$table_name_hump$DAO.pageQuery(request);

//取count數(shù)據(jù)
longcount=$table_name_hump$DAO.pageQueryCount(request);

//空返回
if(CollectionUtils.isEmpty(dbResult)){
returnnewCommonResult(newPaginationResult(null,request,count));
}

//模型轉(zhuǎn)換
List<$table_name_hump_A$DTO>list=$table_name_hump_A$Converter.toDtoList(dbResult);

//返回分頁(yè)結(jié)果
returnnewCommonResult(newPaginationResult(list,request,count));
}

@Override
publicCommonResultqueryById(JSONObjectrequest){

//取入?yún)?CommonAssert.isNoEmptyObj(request,"請(qǐng)求參數(shù)不可空");

//根據(jù)ID獲取數(shù)據(jù)
$primary_key_type_java$$primary_key_hump$=request.get$primary_key_type_java$("$primary_key_hump$");
CommonAssert.isNoEmptyObj($primary_key_hump$,"參數(shù)錯(cuò)誤,無法執(zhí)行查詢");
$table_name_hump_A$DOdbResult=$table_name_hump$DAO.queryById($primary_key_hump$);

//未查詢到結(jié)果,返回
if(null==dbResult){
returnnewCommonResult();
}

//模型轉(zhuǎn)換
$table_name_hump_A$DTOresult=$table_name_hump_A$Converter.toDto(dbResult);

//返回結(jié)果對(duì)象
returnnewCommonResult(result);
}
}

成員代碼塊 必填項(xiàng)業(yè)務(wù)校驗(yàn)(biz_check_required_params)

CommonAssert.$java_type_adapter_assert_method$(dto.get$field_name_hump_A$(),"$field_comment$不可空");

Controller模版

importcom.alibaba.fastjson.JSONObject;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
importorg.springframework.web.bind.annotation.*;

importjavax.annotation.Resource;

/**
*$table_desc$HTTP請(qǐng)求控制器
*Createdby創(chuàng)建人on$current_time$.
*/
@CrossOrigin
@RestController
@RequestMapping(value="/$table_name_hump$/")
publicclass$table_name_hump_A$Controller{

privatestaticfinalLoggerLOGGER=LoggerFactory.getLogger($table_name_hump_A$Controller.class);

@Resource
private$table_name_hump_A$Service$table_name_hump$Service;

/**
*創(chuàng)建
*@paramrequest
*@return
*/
@RequestMapping(value="create.json",method={RequestMethod.GET,RequestMethod.POST})
@ResponseBody
publicObjectcreate(@RequestBodyJSONObjectrequest){
returnCommonTemplate.run(LOGGER,newCommonTemplate(){
@Override
protectedObjectbusiness(){
return$table_name_hump$Service.create(request);
}
},request);
}

/**
*修改
*@paramrequest
*@return
*/
@RequestMapping(value="modify.json",method={RequestMethod.GET,RequestMethod.POST})
@ResponseBody
publicObjectmodify(@RequestBodyJSONObjectrequest){
returnCommonTemplate.run(LOGGER,newCommonTemplate(){
@Override
protectedObjectbusiness(){
return$table_name_hump$Service.modify(request);
}
},request);
}

/**
*分頁(yè)查詢
*@paramrequest
*@return
*/
@RequestMapping(value="pageQuery.json",method={RequestMethod.GET,RequestMethod.POST})
@ResponseBody
publicObjectpageQuery(@RequestBodyJSONObjectrequest){
returnCommonTemplate.run(LOGGER,newCommonTemplate(){
@Override
protectedObjectbusiness(){
return$table_name_hump$Service.pageQuery(request);
}
},request);
}

/**
*通過主鍵查詢
*@paramrequest
*@return
*/
@RequestMapping(value="queryById.json",method={RequestMethod.GET,RequestMethod.POST})
@ResponseBody
publicObjectqueryById(@RequestBodyJSONObjectrequest){
returnCommonTemplate.run(LOGGER,newCommonTemplate(){
@Override
protectedObjectbusiness(){
return$table_name_hump$Service.queryById(request);
}
},request);
}
}

動(dòng)態(tài)參數(shù)

原始表名 $table_name$

?

用戶輸入的表名,不做任何處理。

?

表名駝峰首字母小寫 $table_name_hump$

?

用戶輸入的表名,經(jīng)過駝峰處理。例如輸入:goods_order ,輸出:goodsOrder

?

表名駝峰首字母大寫 $table_name_hump_A$

?

用戶輸入的表名,經(jīng)過駝峰處理。例如輸入:goods_order ,輸出:GoodsOrder

?

原始字段名 $field_name$

?

用戶輸入的表字段名,不做任何處理。

?

字段名駝峰首字母小寫 $field_name_hump$

?

用戶輸入的表字段名,經(jīng)過駝峰處理。例如輸入:order_number ,輸出:orderNumber

?

字段名駝峰首字母大寫 $field_name_hump_A$

?

用戶輸入的表字段名,經(jīng)過駝峰處理。例如輸入:order_number ,輸出:OrderNumber

?

字段說明 $field_comment$

?

用戶輸入的表字段說明,不做任何處理。

?

字段數(shù)據(jù)類型(對(duì)應(yīng)DB)$field_type_db$

?

用戶選擇的表字段類型,不做任何處理。

?

字段數(shù)據(jù)類型(對(duì)應(yīng)Java)$field_type_java$

?

用戶選擇的表字段類型,會(huì)自動(dòng)匹配對(duì)應(yīng)的Java類型。例如輸入:VARCHAR(),輸出:String

?

主鍵字段名 $primary_key$

?

用戶選擇的主鍵字段,不做任何處理。例如用戶定義的主鍵是id,那么輸出就是:id

?

主鍵字段名駝峰首字母小寫 $primary_key_hump$

?

用戶選擇的主鍵字段,經(jīng)過駝峰處理。例如輸入:order_number ,輸出:orderNumber

?

主鍵字段名駝峰首字母大寫 $primary_key_hump_A$

?

用戶選擇的主鍵字段,經(jīng)過駝峰處理。例如輸入:order_number ,輸出:OrderNumber

?

主鍵字段數(shù)據(jù)類型(對(duì)應(yīng)Java)$primary_key_type_java$

?

用戶選擇的主鍵字段類型,會(huì)自動(dòng)匹配對(duì)應(yīng)的Java類型。例如輸入:VARCHAR(),輸出:String

?

插入數(shù)據(jù)sql,字段名列表 $insert_field_name_list$

?

例如表中有三個(gè)字段:id(主鍵)、goods_name、price,輸出:goods_name,price 。會(huì)自動(dòng)排除主鍵 不僅插入數(shù)據(jù)時(shí)可用,任何需要排除ID,然后使用英文逗號(hào)拼接表所有字段信息的地方,都可以使用它

?

插入數(shù)據(jù)sql,字段值列表 $insert_field_value_list$

?

例如表中有三個(gè)字段:id(主鍵)、goods_name、price,輸出:#{goodsName},#{price} 。會(huì)自動(dòng)排除主鍵 不僅插入數(shù)據(jù)時(shí)可用,任何需要排除ID,然后使用英文逗號(hào)拼接表所有字段信息的地方,都可以使用它

?

修改數(shù)據(jù)sql,字段名列表 $update_field_list$

?

例如表中有三個(gè)字段:id(主鍵)、goods_name、price 輸出(會(huì)自動(dòng)換行,會(huì)攜帶以下縮進(jìn),會(huì)自動(dòng)排除主鍵):

?

goods_name=#{goodsName},
price=#{price}

查詢數(shù)據(jù)sql,字段名列表 $select_field_list$

?

例如表中有三個(gè)字段:id(主鍵)、goods_name、price,輸出:id,goods_name,price 。帶主鍵

?

whele字段條件sql,字段名列表 $whele_field_list$

?

例如表中有三個(gè)字段:id(主鍵)、goods_name、price, 輸出(會(huì)自動(dòng)換行,會(huì)攜帶以下縮進(jìn)):

?


ANDid=#{id}


ANDgoods_name=#{goodsName}


ANDprice=#{price}

創(chuàng)建表-表字段列表 $create_table_field_list$

?

例如表中有三個(gè)字段:id(自增主鍵)、goods_name、price 輸出(會(huì)自動(dòng)換行,會(huì)攜帶以下縮進(jìn)):

?

`id`INT(11)NOTNULLAUTO_INCREMENT,
`goods_name`VARCHAR(128)NOTNULLDEFAULT'NULL',
`price`DECIMAL(10,2)NOTNULLDEFAULT'NULL'

當(dāng)前時(shí)間 $current_time$

?

自動(dòng)獲取當(dāng)前時(shí)間,格式:yyyy-MM-DD hhss,示例值:2023-02-05 1718

?

自動(dòng)根據(jù)數(shù)據(jù)類型,匹配斷言方法 $java_type_adapter_assert_method$

?

對(duì)于Java數(shù)據(jù)類型等于String的字段,使用isNoBlankStr方法,其他的類型都使用isNoEmptyObj方法 這是一個(gè)定制化很高的動(dòng)態(tài)參數(shù),可忽略它。

?

動(dòng)態(tài)代碼塊

動(dòng)態(tài)代碼塊由用戶自行定義,代碼塊中也可以設(shè)置動(dòng)態(tài)參數(shù),目前僅提供4種明確的動(dòng)態(tài)代碼塊

成員變量列表 $member_param_list$

例如表中有三個(gè)字段:id(主鍵)、goods_name、price

假設(shè)用戶定義了如下代碼塊內(nèi)容:

/**$field_comment$*/
private$field_type_java$$field_name_hump$;

輸出(會(huì)自動(dòng)根據(jù)字段數(shù)量,累加輸出自定義代碼塊內(nèi)容):

/**id*/
privateIntegerid;
/**商品名稱*/
privateStringgoodsName;
/**商品價(jià)格*/
privateStringprice;

GetSet方法列表 $get_set_method_list$

例如表中有三個(gè)字段:id(主鍵)、goods_name、price

假設(shè)用戶定義了如下代碼塊內(nèi)容:

public$field_type_java$get$field_name_hump_A$(){
return$field_name_hump$;
}

publicvoidset$field_name_hump_A$($field_type_java$$field_name_hump$){
this.$field_name_hump$=$field_name_hump$;
}

輸出(會(huì)自動(dòng)根據(jù)字段數(shù)量,累加輸出自定義代碼塊內(nèi)容):

publicIntegergetId(){
returnid;
}

publicvoidsetId(Integerid){
this.id=id;
}

publicStringgetGoodsName(){
returngoodsName;
}

publicvoidsetGoodsName(StringgoodsName){
this.goodsName=goodsName;
}

publicStringgetPrice(){
returnprice;
}

publicvoidsetPrice(Stringprice){
this.price=price;
}

模型轉(zhuǎn)換器參數(shù)列表 $converter_source_to_target_params_list$

例如表中有三個(gè)字段:id(主鍵)、goods_name、price

假設(shè)用戶定義了如下代碼塊內(nèi)容:

target.set$field_name_hump_A$(source.get$field_name_hump_A$());

輸出(會(huì)自動(dòng)根據(jù)字段數(shù)量,累加輸出自定義代碼塊內(nèi)容):

target.setId(source.getId());
target.setGoodsName(source.getGoodsName());
target.setPrice(source.getPrice());

必填項(xiàng)業(yè)務(wù)校驗(yàn) $biz_check_required_params$

例如表中有三個(gè)字段:id(主鍵)、goods_name、price

假設(shè)用戶定義了如下代碼塊內(nèi)容:

CommonAssert.$java_type_adapter_assert_method$(dto.get$field_name_hump_A$(),"$field_comment$不可空");

輸出(會(huì)自動(dòng)根據(jù)字段數(shù)量,累加輸出自定義代碼塊內(nèi)容):

CommonAssert.isNoBlankStr(dto.getGoodsName(),"goodsName不可空");
CommonAssert.isNoBlankStr(dto.getPrice(),"price不可空");






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 轉(zhuǎn)換器
    +關(guān)注

    關(guān)注

    27

    文章

    8961

    瀏覽量

    150773
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    780

    瀏覽量

    44816
  • 代碼生成器
    +關(guān)注

    關(guān)注

    0

    文章

    25

    瀏覽量

    9315

原文標(biāo)題:非低代碼,我寫了一個(gè)比ChatGPT還牛的CRUD代碼生成器

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    介紹下ABOV提供的代碼生成器

    的開發(fā),下面介紹下ABOV提供的代碼生成器,絲毫不輸CUBEMX,且ABOV單片機(jī)基本都支持keil開發(fā)環(huán)境。。2. ABOV的代碼生成器
    發(fā)表于 11-19 08:06

    python生成器

    了,但是函數(shù)并沒有結(jié)束請(qǐng)看如下代碼,我定義了個(gè) generator_factory 函數(shù),當(dāng)我執(zhí)行 gen = generator_factory() 時(shí),gen 就是
    發(fā)表于 02-24 15:56

    利用LabVIEW代碼生成器簡(jiǎn)化應(yīng)用項(xiàng)目

    利用LabVIEW代碼生成器簡(jiǎn)化應(yīng)用項(xiàng)目
    發(fā)表于 02-26 14:01 ?24次下載
    利用LabVIEW<b class='flag-5'>代碼</b><b class='flag-5'>生成器</b>簡(jiǎn)化應(yīng)用項(xiàng)目

    代碼生成器的應(yīng)用

    jeesite框架代碼生成器,可以很方便的生成代碼,挺不錯(cuò)的。
    發(fā)表于 01-14 15:19 ?0次下載

    數(shù)碼管代碼生成器

    數(shù)碼管代碼生成器,迅速生成數(shù)碼管的相應(yīng)代碼
    發(fā)表于 04-25 10:54 ?44次下載

    STM32庫(kù)函數(shù)代碼自動(dòng)生成器V1.2

    stm32庫(kù)函數(shù)代碼自動(dòng)生成器是STM32學(xué)習(xí)的小工具。 stm32庫(kù)函數(shù)代碼自動(dòng)生成器可以根據(jù)你的配置生成相應(yīng)的庫(kù)函數(shù)
    發(fā)表于 06-17 17:55 ?0次下載

    STM32庫(kù)函數(shù)代碼自動(dòng)生成器正式版

    STM32庫(kù)函數(shù)代碼自動(dòng)生成器正式版,感興趣的可以看看。
    發(fā)表于 07-13 16:55 ?0次下載

    STM32庫(kù)函數(shù)代碼自動(dòng)生成器正式版

    STM32庫(kù)函數(shù)代碼自動(dòng)生成器正式版 STM32庫(kù)函數(shù)代碼自動(dòng)生成器正式版
    發(fā)表于 07-25 18:52 ?0次下載

    個(gè)進(jìn)位保留加法陣列的HDL代碼生成器

    個(gè)進(jìn)位保留加法陣列的HDL代碼生成器,感興趣的小伙伴們可以看看。
    發(fā)表于 08-08 18:20 ?10次下載

    python生成器是什么

    python生成器 1. 什么是生成器生成器(英文名 Generator ),是個(gè)可以像迭代器那樣使用for循環(huán)來獲取元素的函數(shù)。
    的頭像 發(fā)表于 02-24 15:53 ?3891次閱讀

    如何擴(kuò)展自定義功能塊,以及代碼生成器的用法

    被動(dòng)代碼生成器 目標(biāo)代碼生成之后,需要進(jìn)行修改和完善,然后獨(dú)立發(fā)展和維護(hù),與代碼生成器再與關(guān)系。
    的頭像 發(fā)表于 11-02 13:26 ?1390次閱讀

    將使用代碼生成器生成的項(xiàng)目移植到與智能配置器起使用的項(xiàng)目

    將使用代碼生成器生成的項(xiàng)目移植到與智能配置器起使用的項(xiàng)目
    發(fā)表于 01-11 19:00 ?0次下載
    將使用<b class='flag-5'>代碼</b><b class='flag-5'>生成器</b><b class='flag-5'>生成</b>的項(xiàng)目移植到與智能配置器<b class='flag-5'>一</b>起使用的項(xiàng)目

    個(gè)性化地定制自己的uvm代碼生成器模板和腳本

    使用uvm代碼生成器創(chuàng)建基本的uvm驗(yàn)證環(huán)境框架,然后丟棄代碼生成器模板并擴(kuò)展和維護(hù)生成出來的代碼
    的頭像 發(fā)表于 05-14 16:51 ?2491次閱讀
    個(gè)性化地定制自己的uvm<b class='flag-5'>代碼</b><b class='flag-5'>生成器</b>模板和腳本

    將使用代碼生成器生成的項(xiàng)目移植到與智能配置器起使用的項(xiàng)目

    將使用代碼生成器生成的項(xiàng)目移植到與智能配置器起使用的項(xiàng)目
    發(fā)表于 06-30 20:54 ?0次下載
    將使用<b class='flag-5'>代碼</b><b class='flag-5'>生成器</b><b class='flag-5'>生成</b>的項(xiàng)目移植到與智能配置器<b class='flag-5'>一</b>起使用的項(xiàng)目

    RL78的代碼生成器發(fā)布說明

    電子發(fā)燒友網(wǎng)站提供《RL78的代碼生成器發(fā)布說明.pdf》資料免費(fèi)下載
    發(fā)表于 01-30 09:48 ?0次下載
    RL78的<b class='flag-5'>代碼</b><b class='flag-5'>生成器</b>發(fā)布說明
    主站蜘蛛池模板: 一级毛片美国一级j毛片不卡 | 国产小毛片 | 人人干夜夜操 | 国产h视频在线观看高清 | 唐人社电亚洲一区二区三区 | 黄色一级片播放 | 国产五月婷婷 | 欧美簧片 | 狠狠干在线观看 | a在线免费| 丝袜紧身裙国产在线播放 | 欧美高清一级片 | www.av在线.com | 一级毛片免费全部播放完整 | 亚洲福利一区二区三区 | 久操久操久操 | 国产一区中文字幕 | 天天想夜夜操 | 国产精品欧美一区二区 | 日日夜操| 在线亚洲成人 | 狼色视频在线观免费观看 | 午夜无遮挡怕怕怕免费视频 | 四虎国产精品永久免费网址 | 未成人禁止视频高清在线观看 | 亚洲欧洲无码一区二区三区 | 亚洲欧美一区二区三区麻豆 | 亚洲一区二区三区在线网站 | 国产成人精品日本亚洲语音1 | 欧美一区二区三区四区视频 | 免费人成在线观看网站品爱网 | 加勒比一木道|视频在线看 加勒比在线免费视频 | 亚洲图片 欧美色图 | 老湿成人影院 | 乱说欲小说又粗又长 | 日本一区二区视频在线观看 | 国产色视频网站免费观看 | 欧美综合色区 | 热久久这里只有精品 | 一级毛片不卡 | 亚洲一区在线免费观看 |