非低代码,我写了一个比ChatGPT还牛的CRUD代码生成器 下

简介: 非低代码,我写了一个比ChatGPT还牛的CRUD代码生成器 下

业务接口实现类模版

import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
/**
 * $table_desc$业务实现
 * Created by 创建人 on $current_time$
 */
@Service
public class $table_name_hump_A$ServiceImpl implements $table_name_hump_A$Service {
    private static final Logger LOGGER = LoggerFactory.getLogger($table_name_hump_A$ServiceImpl.class);
    @Resource
    private $table_name_hump_A$DAO $table_name_hump$DAO;
    @Override
    public CommonResult create(JSONObject request) {
        // 入参转成对应类型
        CommonAssert.isNoEmptyObj(request, "请求参数不可空");
        $table_name_hump_A$DTO dto = JSON.toJavaObject(request, $table_name_hump_A$DTO.class);
        // 参数校验
     $biz_check_required_params$
        // 转成do模型
        $table_name_hump_A$DO dataDo = $table_name_hump_A$Converter.toDo(dto);
        // 落库
        int count = $table_name_hump$DAO.insert(dataDo);
        CommonAssert.isTrue(count > 0, "创建失败,请重试");
        // 返回创建成功的ID数据
        return new CommonResult(dataDo.get$primary_key_hump_A$());
    }
    @Override
    public CommonResult modify(JSONObject request) {
        // 入参转成对应类型
        CommonAssert.isNoEmptyObj(request, "请求参数不可空");
        $table_name_hump_A$DTO dto = JSON.toJavaObject(request, $table_name_hump_A$DTO.class);
        // 参数校验
     $biz_check_required_params$
        // 转成do模型
        $table_name_hump_A$DO dataDo = $table_name_hump_A$Converter.toDo(dto);
        // 落库
        int count = $table_name_hump$DAO.update(dataDo);
        CommonAssert.greaterThanZero(count, "修改失败,请重试");
        // 返回修改成功的ID数据
        return new CommonResult(dataDo.get$primary_key_hump_A$());
    }
    @Override
    public CommonResult pageQuery(JSONObject request) {
        // 入参基本校验
        CommonAssert.isNoEmptyObj(request, "请求参数不可空");
        // 分页信息校验
        PaginationDO pagination = PaginationDO.setRequestOffsetAndRows(request);
        CommonAssert.isNoEmptyObj(pagination, "分页参数 $pageIndex、$pageSize 不可空");
        CommonAssert.isTrue(pagination.getPageSize() <= 100, "单次查询条数不可超过100条");
        // 取分页列表数据
        List<$table_name_hump_A$DO> dbResult = $table_name_hump$DAO.pageQuery(request);
        // 取count数据
        long count = $table_name_hump$DAO.pageQueryCount(request);
        // 空返回
        if (CollectionUtils.isEmpty(dbResult)){
            return new CommonResult(new PaginationResult(null, request, count));
        }
        // 模型转换
        List<$table_name_hump_A$DTO> list = $table_name_hump_A$Converter.toDtoList(dbResult);
        // 返回分页结果
        return new CommonResult(new PaginationResult(list, request, count));
    }
    @Override
    public CommonResult queryById(JSONObject request) {
        // 取入参
        CommonAssert.isNoEmptyObj(request, "请求参数不可空");
        // 根据ID获取数据
        $primary_key_type_java$ $primary_key_hump$ = request.get$primary_key_type_java$("$primary_key_hump$");
        CommonAssert.isNoEmptyObj($primary_key_hump$, "参数错误,无法执行查询");
        $table_name_hump_A$DO dbResult = $table_name_hump$DAO.queryById($primary_key_hump$);
        // 未查询到结果,返回
        if (null == dbResult){
            return new CommonResult();
        }
        // 模型转换
        $table_name_hump_A$DTO result = $table_name_hump_A$Converter.toDto(dbResult);
        // 返回结果对象
        return new CommonResult(result);
    }
}

成员代码块 必填项业务校验(biz_check_required_params)

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

Controller模版

import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
 * $table_desc$HTTP请求控制器
 * Created by 创建人 on $current_time$.
 */
@CrossOrigin
@RestController
@RequestMapping(value = "/$table_name_hump$/")
public class $table_name_hump_A$Controller {
    private static final Logger LOGGER = LoggerFactory.getLogger($table_name_hump_A$Controller.class);
    @Resource
    private $table_name_hump_A$Service $table_name_hump$Service;
    /**
     * 创建
     * @param request
     * @return
     */
    @RequestMapping(value = "create.json", method = {RequestMethod.GET, RequestMethod.POST})
    @ResponseBody
    public Object create(@RequestBody JSONObject request){
        return CommonTemplate.run(LOGGER, new CommonTemplate() {
            @Override
            protected Object business() {
                return $table_name_hump$Service.create(request);
            }
        }, request);
    }
    /**
     * 修改
     * @param request
     * @return
     */
    @RequestMapping(value = "modify.json", method = {RequestMethod.GET, RequestMethod.POST})
    @ResponseBody
    public Object modify(@RequestBody JSONObject request){
        return CommonTemplate.run(LOGGER, new CommonTemplate() {
            @Override
            protected Object business() {
                return $table_name_hump$Service.modify(request);
            }
        }, request);
    }
    /**
     * 分页查询
     * @param request
     * @return
     */
    @RequestMapping(value = "pageQuery.json", method = {RequestMethod.GET, RequestMethod.POST})
    @ResponseBody
    public Object pageQuery(@RequestBody JSONObject request){
        return CommonTemplate.run(LOGGER, new CommonTemplate() {
            @Override
            protected Object business() {
                return $table_name_hump$Service.pageQuery(request);
            }
        }, request);
    }
    /**
     * 通过主键查询
     * @param request
     * @return
     */
    @RequestMapping(value = "queryById.json", method = {RequestMethod.GET, RequestMethod.POST})
    @ResponseBody
    public Object queryById(@RequestBody JSONObject request){
        return CommonTemplate.run(LOGGER, new CommonTemplate() {
            @Override
            protected Object business() {
                return $table_name_hump$Service.queryById(request);
            }
        }, request);
    }
}

动态参数

原始表名 $table_name$

用户输入的表名,不做任何处理。

表名驼峰首字母小写 $table_name_hump$

用户输入的表名,经过驼峰处理。例如输入:goods_order ,输出:goodsOrder

表名驼峰首字母大写 $table_name_hump_A$

用户输入的表名,经过驼峰处理。例如输入:goods_order ,输出:GoodsOrder

原始字段名 $field_name$

用户输入的表字段名,不做任何处理。

字段名驼峰首字母小写 $field_name_hump$

用户输入的表字段名,经过驼峰处理。例如输入:order_number ,输出:orderNumber

字段名驼峰首字母大写 $field_name_hump_A$

用户输入的表字段名,经过驼峰处理。例如输入:order_number ,输出:OrderNumber

字段说明 $field_comment$

用户输入的表字段说明,不做任何处理。

字段数据类型(对应DB)$field_type_db$

用户选择的表字段类型,不做任何处理。

字段数据类型(对应Java)$field_type_java$

用户选择的表字段类型,会自动匹配对应的Java类型。例如输入:VARCHAR(),输出:String

主键字段名 $primary_key$

用户选择的主键字段,不做任何处理。例如用户定义的主键是id,那么输出就是:id

主键字段名驼峰首字母小写 $primary_key_hump$

用户选择的主键字段,经过驼峰处理。例如输入:order_number ,输出:orderNumber

主键字段名驼峰首字母大写 $primary_key_hump_A$

用户选择的主键字段,经过驼峰处理。例如输入:order_number ,输出:OrderNumber

主键字段数据类型(对应Java)$primary_key_type_java$

用户选择的主键字段类型,会自动匹配对应的Java类型。例如输入:VARCHAR(),输出:String

插入数据sql,字段名列表 $insert_field_name_list$

例如表中有三个字段:id(主键)、goods_name、price,输出:goods_name,price 。会自动排除主键 不仅插入数据时可用,任何需要排除ID,然后使用英文逗号拼接表所有字段信息的地方,都可以使用它

插入数据sql,字段值列表 $insert_field_value_list$

例如表中有三个字段:id(主键)、goods_name、price,输出:#{goodsName},#{price} 。会自动排除主键 不仅插入数据时可用,任何需要排除ID,然后使用英文逗号拼接表所有字段信息的地方,都可以使用它

修改数据sql,字段名列表 $update_field_list$

例如表中有三个字段:id(主键)、goods_name、price 输出(会自动换行,会携带以下缩进,会自动排除主键):

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

查询数据sql,字段名列表 $select_field_list$

例如表中有三个字段:id(主键)、goods_name、price,输出:id,goods_name,price 。带主键

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

例如表中有三个字段:id(主键)、goods_name、price, 输出(会自动换行,会携带以下缩进):

<if test="id != null">
    AND id = #{id}
</if>
<if test="goodsName != null">
    AND goods_name = #{goodsName}
</if>
<if test="price != null">
    AND price = #{price}
</if>

创建表-表字段列表 $create_table_field_list$

例如表中有三个字段:id(自增主键)、goods_name、price 输出(会自动换行,会携带以下缩进):

  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `goods_name` VARCHAR(128) NOT NULL DEFAULT 'NULL',
  `price` DECIMAL(10,2) NOT NULL DEFAULT 'NULL'

当前时间 $current_time$

自动获取当前时间,格式:yyyy-MM-DD hh:mm:ss,示例值:2023-02-05 17:31:18

自动根据数据类型,匹配断言方法 $java_type_adapter_assert_method$

对于Java数据类型等于String的字段,使用isNoBlankStr方法,其他的类型都使用isNoEmptyObj方法 这是一个定制化很高的动态参数,可忽略它。

动态代码块

动态代码块由用户自行定义,代码块中也可以设置动态参数,目前仅提供4种明确的动态代码块

成员变量列表 $member_param_list$

例如表中有三个字段:id(主键)、goods_name、price

假设用户定义了如下代码块内容:

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

输出(会自动根据字段数量,累加输出自定义代码块内容):

/** id */
private Integer id;
/** 商品名称 */
private String goodsName;
/** 商品价格 */
private String price;

GetSet方法列表 $get_set_method_list$

例如表中有三个字段:id(主键)、goods_name、price

假设用户定义了如下代码块内容:

public $field_type_java$ get$field_name_hump_A$() {
    return $field_name_hump$;
}
public void set$field_name_hump_A$($field_type_java$ $field_name_hump$) {
    this.$field_name_hump$ = $field_name_hump$;
}

输出(会自动根据字段数量,累加输出自定义代码块内容):

public Integer getId() {
    return id;
}
public void setId(Integer id) {
    this.id = id;
}
public String getGoodsName() {
    return goodsName;
}
public void setGoodsName(String goodsName) {
    this.goodsName = goodsName;
}
public String getPrice() {
    return price;
}
public void setPrice(String price) {
    this.price = price;
}

模型转换器参数列表 $converter_source_to_target_params_list$

例如表中有三个字段:id(主键)、goods_name、price

假设用户定义了如下代码块内容:

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

输出(会自动根据字段数量,累加输出自定义代码块内容):

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

必填项业务校验 $biz_check_required_params$

例如表中有三个字段:id(主键)、goods_name、price

假设用户定义了如下代码块内容:

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

输出(会自动根据字段数量,累加输出自定义代码块内容):

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

以上思路希望大家都能喜欢,如有更好想法,欢迎评论区交流起来!



相关文章
|
人工智能 自然语言处理 安全
【网安AIGC专题10.19】论文3代码生成:ChatGPT+自协作代码生成+角色扮演(分析员、程序员、测试员)+消融实验、用于MBPP+HumanEval数据集
【网安AIGC专题10.19】论文3代码生成:ChatGPT+自协作代码生成+角色扮演(分析员、程序员、测试员)+消融实验、用于MBPP+HumanEval数据集
405 0
|
机器学习/深度学习 人工智能 自然语言处理
ChatGPT发展到了什么程度?代码生成,程序员将被取代?
ChatGPT发展到了什么程度?代码生成,程序员将被取代?
225 0
|
人工智能 数据可视化 安全
科技 “新贵”ChatGPT 缘何 “昙花一现” ,仅低代码风靡至今
科技 “新贵”ChatGPT 缘何 “昙花一现” ,仅低代码风靡至今
234 1
|
SQL 消息中间件 JavaScript
非低代码,我写了一个比ChatGPT还牛的CRUD代码生成器 上
非低代码,我写了一个比ChatGPT还牛的CRUD代码生成器 上
非低代码,我写了一个比ChatGPT还牛的CRUD代码生成器 上
|
运维 Cloud Native 数据可视化
低代码是行业毒瘤吗?ChatGPT这样回答
低代码是行业毒瘤吗?ChatGPT这样回答
146 0
|
人工智能 自然语言处理 数据可视化
|
存储 人工智能 移动开发
探索低代码的新形态(D2C、ChatGPT)
探索低代码的新形态(D2C、ChatGPT)
768 0
|
2月前
|
机器学习/深度学习 数据采集 人工智能
从ChatGPT到文心一言:AI为什么能“懂人话”?——大语言模型的底层逻辑揭秘
从ChatGPT到文心一言:AI为什么能“懂人话”?——大语言模型的底层逻辑揭秘
389 9
|
5月前
|
传感器 存储 人工智能
ChatGPT让AI展现‘智能’魅力,函数调用和RAG如何助力迈向AI Agent?
本文由AI产品专家三桥君探讨了AI从被动响应到主动决策的演进路径,重点分析了函数调用和RAG技术在构建AI Agent中的关键作用。文章梳理了大模型能力的迭代(原生能力与涌现能力),技术演进的三个阶段(提示工程→函数调用→RAG),并提出AI Agent需具备环境感知、推理决策和行动执行的核心要素。AI产品专家三桥君认为,未来AGI需突破跨领域学习、实时更新和安全性挑战,最终实现如"贾维斯"般的智能伙伴。
215 1
ChatGPT让AI展现‘智能’魅力,函数调用和RAG如何助力迈向AI Agent?
|
10月前
|
人工智能 Linux API
Omnitool:开发者桌面革命!开源神器一键整合ChatGPT+Stable Diffusion等主流AI平台,本地运行不联网
Omnitool 是一款开源的 AI 桌面环境,支持本地运行,提供统一交互界面,快速接入 OpenAI、Stable Diffusion、Hugging Face 等主流 AI 平台,具备高度扩展性。
1099 94
Omnitool:开发者桌面革命!开源神器一键整合ChatGPT+Stable Diffusion等主流AI平台,本地运行不联网

热门文章

最新文章