900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Spring逆向生成封装实体类

Spring逆向生成封装实体类

时间:2022-02-12 11:35:03

相关推荐

Spring逆向生成封装实体类

首先连接数据库: 创建包 com.hnsl.util 在里边建DBHelper类

package com.yzx.util;import java.sql.*;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class DBHelper {//驱动private static String driver = "com.mysql.jdbc.Driver";//访问数据的链接路径private static String url = "jdbc:mysql:///stu?useSSL=false&serverTimezone=UTC&characterEncoding=utf8";private static String name = "root";private static String pwd = "123456";private static Connection conn;private static PreparedStatement ps;private static ResultSet rs;private DBHelper() {}static {try {Class.forName(driver);System.out.println("驱动加载成功!");} catch (ClassNotFoundException e) {e.printStackTrace();}}/*** 获取链接*/public static Connection getConn() {try {conn = DriverManager.getConnection(url, name, pwd);System.out.println("数据库链接建立成功!");} catch (SQLException e) {e.printStackTrace();}return conn;}/*** 关闭资源*/public static void close(Connection conn, PreparedStatement ps, ResultSet rs) {try {if (conn != null) {conn.close();}if (ps != null) {ps.close();}if (rs != null) {rs.close();}} catch (SQLException e) {e.printStackTrace();}}public static void close(Connection conn, PreparedStatement ps) {close(conn, ps, null);}public static void close(Connection conn) {close(conn, null, null);}/*** 查询方法** @param sql sql语句* @param obj 参数* @return List<Map>*/public static List<Map> select(String sql, Object... obj) {List<Map> list=new ArrayList<>();// 1.建立连接getConn();try {// 2.创建语句对象,预编译ps = conn.prepareStatement(sql);System.out.println("sql语句:"+sql);// 3.参数处理 itar 普通for循环for (int i = 0; i < obj.length; i++) {System.out.println("第"+(i+1)+"个参数:"+obj[i]);ps.setObject(i + 1, obj[i]);}// 4.执行sql,得到结果集rs = ps.executeQuery();ResultSetMetaData metaData = rs.getMetaData();//元数据,查询的数据结构while (rs.next()) {Map map = new HashMap();int columnCount = metaData.getColumnCount();//字段的列数,id,name 获取的就是2for (int i = 0; i < columnCount; i++) {//metaData.getColumnLabel(i+1)//这个的从1开始获取第几列的字段名称//rs.getObject(i+1)//根据列数(从1开始)数据集中的数据map.put(metaData.getColumnLabel(i + 1), rs.getObject(i + 1));}list.add(map);}return list;} catch (SQLException e) {e.printStackTrace();} finally {close(conn, ps, rs);}return null;}/*** 编辑方法** @param sql sql语句* @param obj 参数* @return List<Map>*/public static int update(String sql, Object... obj) {int l = 0;// 1.建立连接getConn();try {// 2.创建语句对象,预编译ps = conn.prepareStatement(sql);System.out.println("sql语句:"+sql);// 3.参数处理 itar 普通for循环for (int i = 0; i < obj.length; i++) {System.out.println("第"+(i+1)+"个参数:"+obj[i]);ps.setObject(i + 1, obj[i]);}// 4.执行sql,得到结果集l = ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();} finally {close(conn, ps, rs);return l;}}public static void main(String[] args) {System.out.println(getConn());}}

效果:

然后在com.hnsl.util包里 创建Gen类

package com.yzx.util;import java.io.PrintWriter;import java.util.List;import java.util.Map;/*** 代码生成类*/public class Gen {//name:字段名 type:字段类型 comment:字段注释static String sql="SELECT COLUMN_NAME name,DATA_TYPE type,COLUMN_COMMENT comment from information_schema.`COLUMNS` where TABLE_SCHEMA=? AND TABLE_NAME=?";static String [] table={"stu","student"};//stu:数据库名 student:表名static String packages="com.hnsl";//路径static String tableName=Change_Upper(table[1]);static StringBuffer parameter=new StringBuffer();//parameter 参数public static void main(String[] args) {String clz="package ${packages}.entity;\n" +"\n" +"import lombok.Data;\n" +"\n" +"@Data\n" +"public class ${tableName} {\n" +" ${parameter}\n" +"}";List<Map> list=DBHelper.select(sql,table);for(Map map:list){parameter.append(" /**\n").append(" *"+map.get("comment")+"\n").append(" **/\n").append(" private "+convertDataType(map.get("type").toString())+" "+map.get("name")+";\n");}System.out.println(clz.replace("${packages}",packages).replace("${tableName}",tableName).replace("${parameter}",parameter.toString()));outPW(clz.replace("${packages}",packages).replace("${tableName}",tableName).replace("${parameter}",parameter.toString()),tableName.concat(".java"));}//将更改后的文件输出public static void outPW(String clz,String path){PrintWriter pw=null;try {pw = new PrintWriter(path,"UTF-8");pw.write(clz);} catch (Exception e) {e.printStackTrace();}finally {if(pw!=null){pw.close();}}}//首字母大写,如果有下划线_,下划线_移除之后的第一个字母大写public static String Change_Upper(String s1) {String r = "";String[] a = s1.split("_");//以_为分隔符,将单词分开String[] b = new String[a.length + 1];for (int i = 0; i < a.length; i++) {//substring(0,1)首字母,toUpperCase()大写b[i] = a[i].substring(0, 1).toUpperCase() + a[i].substring(1, a[i].length());r = r + b[i];}return r;}//类型转换public static String convertDataType(String dataType) {switch (dataType) {case "varchar":case "longtext":case "text":return "String";case "double":return "Double";case "int":case "tinyint":return "Integer";case "bigint":return "Long";case "datetime":case "timestamp":case "Date":return "Date";case "decimal":return "BigDecimal";case "char":return "Character";default:return "";}}}

运行结果:封装实体类生成

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。