mysql自定义实体类框架
根据表结构自动生产实体类和方法,根据反射与io生成,可自定义扩展方法
package com.digital.web.front; /*** pom依赖* <dependency>* <groupId>mysql</groupId>* <artifactId>mysql-connector-java</artifactId>* <version>5.1.27</version>* </dependency>* <dependency>* <groupId>org.projectlombok</groupId>* <artifactId>lombok</artifactId>* <version>1.16.10</version>* </dependency>*/import com.alibaba.fastjson.JSONObject;
import com.mchange.v2.collection.MapEntry;
import lombok.Data;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.*;
import java.util.*;/*** 自定义框架* 生成mysql表对应的实体类*/
public class MySqlMapper {/*** 配制参数*/static class Config {//mysql地址,数据库,用户名,密码final static private String address = "12.0.0.1:3306";final static private String dbName = "henan";final static private String username = "root";final static private String password = "12346";//模型保存的位置final static private String modelPath = "G:\\IdeaProject\\中文\\src\\main\\java\\com\\digital\\web\\front\\model";//mysql数据类型与java数据类型转换final static MapEntry[] map = {new MapEntry("INT", "Integer"),new MapEntry("VARCHAR", "String"),new MapEntry("TIMESTAMP", "String"),new MapEntry("DOUBLE", "Double")};}/*** 内存参数*/static class Variable {final static private String packagePath = Config.modelPath.split("java\\\\")[1].replace("\\", ".");static private Map<String, String> mapper = new HashMap<>();static {for (MapEntry mapEntry : Config.map) {mapper.put(String.valueOf(mapEntry.getKey()), String.valueOf(mapEntry.getValue()));}}}/*** 获取连接** @return* @throws SQLException* @throws ClassNotFoundException*/public static Connection getConn() throws SQLException, ClassNotFoundException {Class.forName("com.mysql.jdbc.Driver");String url = "jdbc:mysql://" + Config.address + "/" + Config.dbName + "?useUnicode=true&characterEncoding=UTF-8";Connection conn = DriverManager.getConnection(url, Config.username, Config.password);return conn;}public static void main(String[] args) throws Exception {Connection conn = getConn();List<ModelTable> modelTableList = Business.getModelTable(conn);//获取数据库下的表结构conn.close();Business.foreach(modelTableList);//遍历结构数据}static class Business {//业务类/*** 获取数据库中表与字段的集合** @param conn* @return*/public static List<ModelTable> getModelTable(Connection conn) throws Exception {List<ModelTable> modelTableList = new LinkedList<>();Map<String, String> tableMsg = Business.getTableNameList(conn);for (Map.Entry<String, String> line : tableMsg.entrySet()) {ModelTable tableFieldMap = getTableFieldMap(conn, line);modelTableList.add(tableFieldMap);}return modelTableList;}/*** 获取表名称** @param conn* @return* @throws Exception*/public static Map<String, String> getTableNameList(Connection conn) throws Exception {String sql = "select TABLE_NAME,TABLE_COMMENT from information_schema.tables where table_schema=\"henan\"";List<Map<String, Object>> tableMap = Util.select(sql, conn);Map<String, String> tableMsg = new HashMap<>();for (Map<String, Object> line : tableMap) {String tableName = String.valueOf(line.get("TABLE_NAME"));String tableComment = String.valueOf(line.get("TABLE_COMMENT"));tableMsg.put(tableName, tableComment);}return tableMsg;}/*** 获取表中的字段信息** @param conn* @return* @throws Exception*/public static ModelTable getTableFieldMap(Connection conn, Map.Entry<String, String> line) throws Exception {DatabaseMetaData meta = conn.getMetaData();String tableName = line.getKey();String tableComment = line.getValue();ResultSet rs = meta.getColumns(null, "%", tableName, "%");Map<String, MapEntry> tableFieldMap = new HashMap<>();ModelTable modelTable = new ModelTable();modelTable.setTableName(tableName);modelTable.setFields(tableFieldMap);modelTable.setTableComment(tableComment);while (rs.next()) {String columnName = rs.getString("COLUMN_NAME");String dataTypeName = rs.getString("TYPE_NAME");String remarks = rs.getString("REMARKS");tableFieldMap.put(columnName, new MapEntry(dataTypeName, remarks));//字段名称,字段类型}return modelTable;}/*** 遍历model信息** @param modelTableList*/public static void foreach(List<ModelTable> modelTableList) throws IOException {for (ModelTable modelTable : modelTableList) {writerModelTable(modelTable);}}/*** 写入model信息到文件** @param modelTable*/public static void writerModelTable(ModelTable modelTable) throws IOException {String msg = getMsg(modelTable);//计算需要写入的信息String filePath = Config.modelPath + "/" + modelTable.tableName + ".java";Util.writer(filePath, msg);}/*** 生成model的信息** @param modelTable* @return*/public static String getMsg(ModelTable modelTable) {String packagePath = "package " + Variable.packagePath + ";";String fastjson = "import com.alibaba.fastjson.JSONObject;";String lombok = "import lombok.Data;";String javaUtil = "import java.util.*;";String data = "@Data";String headClass = "public class " + modelTable.tableName + "{";String tailClass = "}";StringBuilder sbr = new StringBuilder();sbr.append(packagePath).append("\n").append("\n");sbr.append(fastjson).append("\n");sbr.append(lombok).append("\n");sbr.append(javaUtil).append("\n").append("\n");sbr.append("/**").append("\n");//添加类备注sbr.append("/*").append(modelTable.tableComment).append("\n");sbr.append("*/").append("\n");sbr.append(data).append("\n");sbr.append(headClass).append("\n");//添加成员变量与备注for (Map.Entry<String, MapEntry> entry : modelTable.fields.entrySet()) {String fieldName = entry.getKey();MapEntry value = entry.getValue();String fieldType = String.valueOf(value.getKey());String remakes = String.valueOf(value.getValue());sbr.append("\tprivate ").append(Variable.mapper.get(fieldType)).append(" ").append(fieldName).append(";").append("//").append(remakes).append("\n");}sbr.append("\n");//自定义方法不需要的方式直接注释sbr.append(ModelFunc.getToJson(modelTable)).append("\n");sbr.append(ModelFunc.getToMap(modelTable)).append("\n");sbr.append(ModelFunc.setToJson(modelTable)).append("\n");sbr.append(ModelFunc.setToMap(modelTable)).append("\n");
// sbr.append(ModelFunc.getInsertSql(modelTable)).append("\n");//结束sbr.append(tailClass).append("\n");return sbr.toString();}}static class ModelFunc {//方法构造public static String getToJson(ModelTable modelTable) {//将成员变量转化为json对象StringBuilder sbr = new StringBuilder();sbr.append("\t").append("public JSONObject getToJson(){\n");Map<String, MapEntry> fields = modelTable.fields;sbr.append("\t\tJSONObject result = new JSONObject();").append("\n");for (Map.Entry<String, MapEntry> entry : fields.entrySet()) {String fieldName = entry.getKey();sbr.append("\t\t").append("result.put(\"").append(fieldName).append("\",").append(fieldName).append(");").append("\n");}sbr.append("\t\treturn result;\n");sbr.append("\t}\n");return sbr.toString();}public static String getToMap(ModelTable modelTable) {//将成员变量转化为Map对象StringBuilder sbr = new StringBuilder();sbr.append("\t").append("public Map<String,Object> getToMap(){\n");sbr.append("\t\t").append("Map<String,Object> result = new HashMap<>();\n");for (Map.Entry<String, MapEntry> entry : modelTable.fields.entrySet()) {String fieldName = entry.getKey();sbr.append("\t\t").append("result.put(\"").append(fieldName).append("\",").append(fieldName).append(");").append("\n");}sbr.append("\t\treturn result;\n");sbr.append("\t}\n");return sbr.toString();}public static String setToJson(ModelTable modelTable) {//json赋值StringBuilder sbr = new StringBuilder();sbr.append("\t").append("public void setToJson(JSONObject model){\n");JSONObject model = null;for (Map.Entry<String, MapEntry> entry : modelTable.fields.entrySet()) {String fieldName = entry.getKey();String fieldType = String.valueOf(entry.getValue().getKey());sbr.append("\t\t").append("this.").append(fieldName).append("=model.get").append(Variable.mapper.get(fieldType)).append("(\"").append(fieldName).append("\");").append("\n");}sbr.append("\t}\n");return sbr.toString();}public static String setToMap(ModelTable modelTable) {//Map赋值StringBuilder sbr = new StringBuilder();sbr.append("\t").append("public void setToMap(Map<String,Object> model){\n");for (Map.Entry<String, MapEntry> entry : modelTable.fields.entrySet()) {String fieldName = entry.getKey();String fieldType = String.valueOf(entry.getValue().getKey());sbr.append("\t\t").append("this.").append(fieldName).append("=").append(Variable.mapper.get(fieldType)).append(".valueOf(model.get(\"").append(fieldName).append("\").toString());").append("\n");}sbr.append("\t}\n");return sbr.toString();}public static String getInsertSql(ModelTable modelTable) {//获取新增sqlStringBuilder sbr = new StringBuilder();sbr.append("\t").append("public String getInsertSql(){\n");StringBuilder keys = new StringBuilder();StringBuilder values = new StringBuilder();sbr.append("\t\tStringBuilder values = new StringBuilder();").append("\n");for (Map.Entry<String, MapEntry> entry : modelTable.fields.entrySet()) {String fieldName = entry.getKey();keys.append(fieldName).append(",");values.append(".append(" +"\"this.").append(fieldName).append("/.").append(");");}sbr.append("\t\tString sql = values.append(").append("\"insert into ").append(modelTable.tableName).append("(").append(keys.substring(0,keys.length()-1)).append(")value(").append("\")").append(values.substring(0,values.length()-1));sbr.append("insert into ").append(modelTable.tableName).append("(").append(keys.substring(0,keys.length()-1)).append(")value(").append(values.substring(0,values.length()-1)).append(")\";\n");sbr.append("\treturn sql;");sbr.append("\t}\n");return sbr.toString();}}static class Util {//工具类/*** 查询数据** @param sql 请求sql* @param conn 数据库连接* @return 查询的响应数据* @throws Exception*/public static List<Map<String, Object>> select(String sql, Connection conn) throws Exception {List<Map<String, Object>> result = new LinkedList<>();PreparedStatement preparedStatement = null;//支出传递问号,防止sql注入ResultSet resultSet = null;try {preparedStatement = conn.prepareStatement(sql);//获取PreparedStatementresultSet = preparedStatement.executeQuery();//获取查询结果的字段信息ResultSetMetaData metaData = resultSet.getMetaData();int fieldCount = metaData.getColumnCount();//字段数量List<String> fields = new ArrayList<>(fieldCount);for (int i = 1; i <= fieldCount; i++) {fields.add(metaData.getColumnName(i));}//5、从结果集获取结果数据while (resultSet.next()) {Map<String, Object> line = new HashMap();for (String field : fields) {line.put(field, resultSet.getObject(field));}result.add(line);}} catch (SQLException e) {e.printStackTrace();} finally {resultSet.close();preparedStatement.close();}return result;}/*** 写入内容到文件** @param filePath 文件路径* @param msg 写入信息* @throws IOException*/public static void writer(String filePath, String msg) throws IOException {if (msg == null || "".equals(msg)) return;File file = new File(filePath);if (!file.exists()) file.createNewFile();FileOutputStream fileOutputStream = null;try {fileOutputStream = new FileOutputStream(file);fileOutputStream.write(msg.getBytes("UTF-8"));} catch (IOException e) {e.printStackTrace();} finally {fileOutputStream.close();//先打开的后关闭}}/*** 获取json内容的类型转换** @param fieldType* @return*/public static String getType(String fieldType) {String javaFieldType = Variable.mapper.get(fieldType);switch (javaFieldType) {case "Integer":return "getInteger";case "String":case "TIMESTAMP":return "getString";case "DOUBLE":return "getDouble";default:return "getObject";}}}@Datastatic class ModelTable {//数据库中表与字段的集合private String tableName;//表名称private String tableComment;//表备注private Map<String, MapEntry> fields;//字段列表,MapEntry<字段类型,备注>}
}
相关文章:
mysql自定义实体类框架
根据表结构自动生产实体类和方法,根据反射与io生成,可自定义扩展方法 package com.digital.web.front; /*** pom依赖* <dependency>* <groupId>mysql</groupId>* <artifactId>mysql-connector-java</artifactId>* <version>5.1.27</ve…...
批量将Excel中的第二列内容从拼音转换为汉字
要批量将Excel中的第二列内容从拼音转换为汉字,您可以使用Python的openpyxl库来实现。下面是一个示例代码,演示如何读取Excel文件并将第二列内容进行拼音转汉字: from openpyxl import load_workbook from xpinyin import Pinyin # 打开Exce…...
消息推送:精准推送,提升运营效果,增添平台活力
对于app开发者而言,没有什么途径比消息推送更能直接、即时地触及目标用户群体了。消息推送与我们的日常生活息息相关,各种APP的状态和通知都通过消息推送来告知用户,引起用户的注意,吸引用户点开app。总而言之,推送服务…...
[保研/考研机试] KY43 全排列 北京大学复试上机题 C++实现
题目链接: 全排列https://www.nowcoder.com/share/jump/437195121692001512368 描述 给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有a < b < ... < y < z,而且给定的字符串中的字…...
Java将时间戳转化为特定时区的日期字符串
先上代码: ZonedDateTime dateTime ZonedDateTime.ofInstant(Instant.ofEpochMilli(System.currentTimeMillis()),zone ); //2019-12-01T19:01:4608:00String formattedDate dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd") ); //2019-12-…...
【算法挨揍日记】day03——双指针算法_有效三角形的个数、和为s的两个数字
611. 有效三角形的个数 611. 有效三角形的个数https://leetcode.cn/problems/valid-triangle-number/ 题目描述: 给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。 解题思路: 本题是一个关于三角形是否能成立…...
通过 kk 创建 k8s 集群和 kubesphere
官方文档:多节点安装 确保从正确的区域下载 KubeKey export KKZONEcn下载 KubeKey curl -sfL https://get-kk.kubesphere.io | VERSIONv3.0.7 sh -为 kk 添加可执行权限: chmod x kk创建 config 文件 KubeSphere 版本:v3.3 支持的 Kuber…...
感觉和身边其他人有差距怎么办?
虽然清楚知识需要靠时间沉淀,但在看到自己做不出来的题别人会做,自己写不出的代码别人会写时还是会感到焦虑怎么办? 你是否也因为自身跟周围人的差距而产生过迷茫,这份迷茫如今是被你克服了还是仍旧让你感到困扰? 下…...
【C语言基础】宏定义的用法详解
📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…...
微服务系列文章之 SpringBoot 最佳实践
Spring Boot 是一种广泛使用且非常流行的企业级高性能框架。 以下是一些最佳实践和一些技巧,我们可以使用它们来改进 Spring Boot 应用程序并使其更加高效。 Spring Boot 的四大核心 1、自动配置 针对很多Spring应用程序和常见的应用功能,Spring Boo…...
C++并发多线程--std::async、std::packaged_task和std::promise的使用
目录 1--std::async的使用 2--std::packaged_task的使用 3--std::promise的使用 1--std::async的使用 std::async用于启动一个异步任务,并返回一个std::future对象;std::future对象里含有异步任务线程入口函数的结果; std::launch::deferr…...
opencv-目标追踪
import argparse import time import cv2 import numpy as np# 配置参数 ap argparse.ArgumentParser() ap.add_argument("-v", "--video", typestr,help"path to input video file") ap.add_argument("-t", "--tracker", …...
【数据结构】 单链表面试题讲解
文章目录 引言反转单链表题目描述示例:题解思路代码实现: 移除链表元素题目描述:示例思路解析: 链表的中间结点题目描述:示例:思路解析代码实现如下: 链表中倒数第k个结点题目描述示例思路解析&…...
C++ string类的模拟实现
模拟实现string类不是为了造一个更好的轮子,而是更加理解string类,从而来掌握string类的使用 string类的接口设计繁多,故而不会全部涵盖到,但是核心的会模拟实现 库中string类是封装在std的命名空间中的,所以在模拟…...
Qt实现简单的漫游器
文章目录 Qt的OpenGL窗口GLSL的实现摄像机类的实现简单的漫游器 Qt的OpenGL窗口 Qt主要是使用QOpenGLWidget来实现opengl的功能。 QOpenGLWidget 提供了三个便捷的虚函数,可以重载,用来重新实现典型的OpenGL任务: paintGL:渲染…...
【c语言】文件操作
朋友们,大家好,今天分享给大家的是文件操作的相关知识,跟着我一起学习吧!! 🎈什么是文件 磁盘上的文件是文件。 但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件 程序文…...
【Unity】坐标转换经纬度方法(应用篇)
【Unity】坐标转换经纬度方法(应用篇) 解决地图中经纬度坐标转换与unity坐标互转的问题。使用线性变换的方法,理论上可以解决小范围内所以坐标转换的问题。 之前有写过[Unity]坐标转换经纬度方法(原理篇),在实际使用中,…...
element时间选择器el-date-picter使用disabledDate指定禁用的日期
需要的效果 <el-date-pickerclass"selectstyle"v-model"year"value-format"yyyy"type"year":picker-options"disabledCli"placeholder"选择年"> </el-date-picker>data() {return {disabledCli: {/…...
出学校干了 5 年外包,已经废了
如果不是女朋友和我提分手,我估计现在还没醒悟 本科大专,17年通过校招进入某软件公司做测试,干了接近5年的功能。 今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经…...
day-23 代码随想录算法训练营(19)part09
669.修剪二叉搜索树 思路一:根据二叉搜索树的特性进行中间值与去区间值判断,有三种情况:1.在区间中,所以左右子树都可能在区间中; 2.在区间外面的左侧,必然只有右子树可能存在区间中;3.在区间外…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...
对象回调初步研究
_OBJECT_TYPE结构分析 在介绍什么是对象回调前,首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例,用_OBJECT_TYPE这个结构来解析它,0x80处就是今天要介绍的回调链表,但是先不着急,先把目光…...
