JAVA - PO DTO 生成器

PO DTO 生成器

假设你是一个Java 高级程序员,我会提供一些信息,你需要帮我自动生成Java的PO、DTO 对象。
这些信息有着固定的形式,第一行是对象的类名,其后的每一行都是该对象的属性(简称“属性”)。
对于我属性,格式可能是小驼峰的形式,可能是全大写命名法的格式,我需要你自动帮我转换成小驼峰的格式。
其中生成的PO对象中,每个属性需要加上注解@Column,该注解是Mybatis的注解。该注解的值对应的是属性的全大写命名法的格式。
以下我会举个例子帮助你理解我的预期结果。

User
id
name
batchName

生成的PO对象如下:

public class UserPO{@Column("ID")private String id;@Column("NAME")private String name;@Column("BATCH_NAME")private String batchName;
}

生成的DTO对象如下:

public class UserDto{private String id;private String name;private String batchName;
}

测试集

Student
id
name
sex
grade
teacherNameTeacher
id
name
subject
studentCount

PO,DTO生成器-Java代码版本

import java.util.ArrayList;  
import java.util.List;  
import java.util.Scanner;  public class JavaCodeGenerator {  public static void main(String[] args) {  Scanner scanner = new Scanner(System.in);  // Read the class name  String className = scanner.nextLine().trim();  // Read the properties  List<String> properties = new ArrayList<>();  while (scanner.hasNextLine()) {  String property = scanner.nextLine().trim();  if (property.isEmpty()) {  break;  }  properties.add(property);  }  // Generate PO class  System.out.println("public class " + className + "PO {");  for (String property : properties) {  String columnName = toUpperCaseSnakeCase(property);  System.out.println("\t@Column(\"" + columnName + "\")");  System.out.println("\tprivate String " + property + ";");  System.out.println();  }  System.out.println("}");  System.out.println();  // Generate DTO class  System.out.println("public class " + className + "Dto {");  for (String property : properties) {  System.out.println("\tprivate String " + property + ";");  }  System.out.println("}");  }  private static String toUpperCaseSnakeCase(String property) {  StringBuilder sb = new StringBuilder();  for (int i = 0; i < property.length(); i++) {  char c = property.charAt(i);  if (Character.isUpperCase(c)) {  sb.append("_").append(c);  } else {  sb.append(Character.toUpperCase(c));  }  }        return sb.toString();  }  
}

PO DTO 生成器-html、js版本

把上面的java版本,改成js版本,需要一个html页面,该页面需要2个文本框,一个按钮,一个文本框输入用户输入的内容,第二个文本框生成PO、DTO对象

<!DOCTYPE html>
<html><head><title>Java PO/DTO Generator</title>
</head><body><h1>Java Code Generator</h1> <label for="className">Class Name:</label> <input type="text" id="className"><br><br><label for="properties">Properties:</label> <textarea id="properties" rows="5" cols="30"></textarea><br><br> <buttononclick="generateCode()">Generate Code</button><br><br> <label for="poCode">PO Code:</label> <textareaid="poCode" rows="10" cols="50" readonly></textarea><br><br> <label for="dtoCode">DTO Code:</label> <textareaid="dtoCode" rows="10" cols="50" readonly></textarea>
</body><script> function generateCode() { // Read input values var className = document.getElementById("className").value.trim(); var propertiesInput = document.getElementById("properties").value.trim();// Split properties by newlinevar properties = propertiesInput.split("\n");// Generate PO classvar poCode = "public class " + className + "PO {\n";for (var i = 0; i < properties.length; i++) {var property = properties[i].trim();var columnName = toUpperCaseSnakeCase(property);poCode += "\t@Column(\"" + columnName + "\")\n";poCode += "\tprivate String " + property + ";\n\n";}poCode += "}";// Generate DTO classvar dtoCode = "public class " + className + "DTO {\n";for (var i = 0; i < properties.length; i++) {var property = properties[i].trim();dtoCode += "\tprivate String " + property + ";\n";}dtoCode += "}";// Update output text areasdocument.getElementById("poCode").value = poCode;document.getElementById("dtoCode").value = dtoCode;}function toUpperCaseSnakeCase(property) {var snakeCase = "";for (var i = 0; i < property.length; i++) {var char = property.charAt(i);if (char === char.toUpperCase()) {snakeCase += "_" + char;} else {snakeCase += char.toUpperCase();}}return snakeCase;}</script>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/63915.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql的binlog參數詳解

mysql的binlog參數詳解 1. expire_logs_days expire_logs_days&#xff1a;這個參數用於設置binlog日誌文件的過期時間。默認情況下&#xff0c;binlog文件永不過期。如果將其設置為一個正整數值&#xff0c;則表示binlog文件在指定天數後會被自動刪除。 max_binlog_size m…

设计模式-6--装饰者模式(Decorator Pattern)

一、什么是装饰者模式&#xff08;Decorator Pattern&#xff09; 装饰者模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你在不修改现有对象的情况下&#xff0c;动态地将新功能附加到对象上。这种模式通过创建一个包装类&#xff0c;…

系统部署到不同云的比较与选择(SaaS平台、公有云、私有云、混合云)

选择正确的云部署策略对于企业的成功至关重要。关于系统部署到SaaS平台、公有云、私有云以及混合云的各种理由。通过详细分析各种策略的优势和劣势&#xff0c;帮助企业在复杂的决策中作出明智的选择。无论是追求成本效益、灵活性、安全性还是多样化&#xff0c;为企业提供全面…

网络端口安全问题解析:常见端口、安全隐患及推荐工具

导语&#xff1a; 网络安全是当今信息社会中至关重要的一个问题。随着互联网的普及和应用的广泛&#xff0c;各种网络服务也相继出现。然而&#xff0c;这些网络服务往往存在着各种潜在的安全隐患&#xff0c;如果不加以妥善管理和保护&#xff0c;就会给企业和个人带来极大的风…

Unity编辑器扩展 | 编辑器扩展基础入门

前言 Unity编辑器扩展 | 编辑器扩展基础一、基本概念二、核心知识点 简述三、相关API 总结 前言 当谈到游戏开发工具&#xff0c;Unity编辑器是一个备受赞誉的平台。它为开发者提供了一个强大且灵活的环境&#xff0c;使他们能够创建令人惊叹的游戏和交互式体验。然而&#xf…

MusicBrainz Picard for Mac :音乐文件ID3编辑器

MusicBrainz Picard for Mac是一款macOS平台的音乐文件ID3编辑器&#xff0c;能够帮助我们在Mac电脑上编辑音乐文件的ID3标签信息&#xff0c;包括艺人、专辑等信息&#xff0c;非常快速和简单方便。Picard是下一代MusicBrainz标记应用程序。 这个新的标签概念是面向专辑的&…

会计--出纳实操实务小白入门

文章目录 P1、出纳基础一、出纳与会计区别二、出纳的具体工作三、出纳的工作流程&#xff08;日、月、年工作安排&#xff09; P2、出纳技能1&#xff1a;大小写金额以及日期书写规范一、数字书写要求二、小写金额“封头”与“封尾”三、大写金额“封头”与“封尾”四、日期大写…

kafka配置SASL/PLAIN 安全认证

1 zookeeper配置启动 1.1 zookeeper添加SASL支持 为zookeeper添加SASL支持&#xff0c;在配置文件zoo.cfg添加 authProvider.1org.apache.zookeeper.server.auth.SASLAuthenticationProvider requireClientAuthSchemesasl jaasLoginRenew36000001.2 zk_server_jaas.conf文件…

微信小程序活动报名管理系统设计与实现

摘 要 随着当下的移动互联网技术的不断发展壮大&#xff0c;现在人们对于手机的应用已经非常的成熟&#xff0c;当下的时代基本上达到了人手一部手机&#xff0c;数字化、信息化已经成为了人们的主流生活。有数据统计&#xff0c;截止到2020年末我国的手机网民人数已经接近10亿…

sql:SQL优化知识点记录(五)

&#xff08;1&#xff09;explain之例子 &#xff08;2&#xff09;索引单表优化案例 上面的功能已经实现&#xff0c;但是分析功能&#xff0c; 使用explain分析这条sql&#xff1a; 发现type为All Extra&#xff1a;有Using filesort &#xff08;文件内排序&#xff09; 这…

stable diffusion实践操作-宽高设置以及高清修复

系列文章目录 stable diffusion实践操作 文章目录 系列文章目录前言一、SD宽高怎么设置&#xff1f;1.1 宽高历史 二、高清修复总结 前言 主要介绍SD的宽高设置以及高清修复 一、SD宽高怎么设置&#xff1f; 1.1 宽高历史 SD生成256256图片效果最好。512512是SD一直使用的画…

修改文件/文件夹名如何自动修改引入路径

场景&#xff1a; 在项目中修改文件夹结构或者文件名称后需要到引入了该文件的地方手动修改引入的路径。不想一个个修改&#xff0c;为了让引用了该文件的地方进行自动修改。 解决方案&#xff1a; 在 Visual Studio Code (VSCode) 中&#xff0c;你可以使用一些扩展或功能来…

RT-Thread 中断管理学习(一)

中断管理 什么是中断&#xff1f;简单的解释就是系统正在处理某一个正常事件&#xff0c;忽然被另一个需要马上处理的紧急事件打断&#xff0c;系统转而处理这个紧急事件&#xff0c;待处理完毕&#xff0c;再恢复运行刚才被打断的事件。生活中&#xff0c;我们经常会遇到这样…

OBS Studio 30.0 承诺在 Linux 上支持英特尔 QSV,为 DeckLink 提供 HDR 回放功能

导读OBS Studio 30.0 现已推出公开测试版&#xff0c;承诺为这款广受欢迎的免费开源截屏和流媒体应用程序提供多项令人兴奋的新功能&#xff0c;以及大量其他更改和错误修复。 OBS Studio 30.0 承诺在 Linux 上支持英特尔 QSV&#xff08;快速同步视频&#xff09;、WHIP/WebRT…

Android Native Code开发学习(三)对java中的对象变量进行操作

Android Native Code开发学习&#xff08;三&#xff09; 本教程为native code学习笔记&#xff0c;希望能够帮到有需要的人 我的电脑系统为ubuntu 22.04&#xff0c;当然windows也是可以的&#xff0c;区别不大 对java中的对象变量进行操作 首先我们新建一个java的类 pub…

xsschallenge靶场练习1-13关

文章目录 第一关第二关第三关第四关第五关第六关第七关第八关第九关第十关第十一关第十二关第十三关 第一关 观察页面 http://192.168.80.139/xsschallenge/level1.php?nametest尝试在name后面输入最近基本的xss语法 <script>alert(1)</script>第二关 查看页面源…

el-date-picker 等 点击无反应不回显问题解决

如上图&#xff0c;编辑回显正常&#xff0c;但是时间控件在拖动过程中时间不会跟随改变。 解决办法&#xff1a; <el-date-picker input"onInput()" ...><el-input input"onInput()" ...>js中onInput() {this.$forceUpdate();},

2.单链表练习

1. 链表的基本概念 链表&#xff08;Linked List&#xff09;是一种常见的数据结构&#xff0c;用于存储一系列元素&#xff0c;这些元素可以是任意类型的数据。链表中的每个元素被称为节点&#xff08;Node&#xff09;&#xff0c;每个节点包含两部分&#xff1a;一个存储数…

【Docker】02-安装mysql

参考教程&#xff1a; https://www.bilibili.com/video/BV1Qa4y1t7YH/?p5&spm_id_frompageDriver&vd_source4964ba5015a16eb57d0ac13401b0fe77 docker安装Mysql 1、拉取最新版本的镜像 docker pull mysq:latestl 2、运行mysql服务 docker run --name mysql -e MYSQL_…

2018ECCV Can 3D Pose be Learned from2D Projections Alone?

摘要 在计算机视觉中&#xff0c;从单个图像的三维姿态估计是一个具有挑战性的任务。我们提出了一种弱监督的方法来估计3D姿态点&#xff0c;仅给出2D姿态地标。我们的方法不需要2D和3D点之间的对应关系来建立明确的3D先验。我们利用一个对抗性的框架&#xff0c;强加在3D结构…