1. package cn.net.yto.aaa.dao.generator;
  2.  
  3. /**
  4. * 由数据库表生成jpa实体工具
  5. *
  6. * @author huike
  7. * Created by gf.liu on 2017/5/25.
  8. */
  9. public class GenEntityMysql {
  10.  
  11. private static final String URL = "jdbc:mysql://127.0.0.1:3306/yto_test?useUnicode=true&characterEncoding=utf8";
  12. private static final String NAME = "root";
  13. private static final String PASS = "root";
  14.  
  15. /**
  16. * //指定实体生成所在包的路径
  17. */
  18. private String entityPackage = "cn.net.yto.aaa.dao.entities";
  19. /**
  20. * 指定实体仓库接口生成所在包的路径
  21. */
  22. private String repositoryPackage = "cn.net.yto.aaa.dao.repositories";
  23. /**
  24. * 作者名字
  25. */
  26. private String authorName = "huike";
  27. /**
  28. * 根据表明创建entity实例类,每次一个
  29. */
  30. private String tableName = "tb_stu_cou_stu";
  31.  
  32. /**
  33. * 列名数组
  34. */
  35. private List<String> colNames = new ArrayList<>();
  36. /**
  37. * 列名类型数组
  38. */
  39. private List<String> colTypes = new ArrayList<>();
  40. /**
  41. * 列名大小数组
  42. */
  43. private List<Integer> colSizes = new ArrayList<>();
  44. /**
  45. * //列补充说明
  46. */
  47. private List<String> colExtras = new ArrayList<>();
  48. /**
  49. * 列注释
  50. */
  51. private List<String> colComment = new ArrayList<>();
  52.  
  53. private List<String> colNulls = new ArrayList<>();
  54.  
  55. /**
  56. * 是否需要导入包java.util.*
  57. */
  58. private boolean f_util = false;
  59. /**
  60. * 是否需要导入包java.sql.*
  61. */
  62. private boolean f_sql = false;
  63. /**
  64. * 是否需要导入包java.math.BigDecimal
  65. */
  66. private boolean f_bigDecimal = false;
  67.  
  68. private static final String DRIVER = "com.mysql.jdbc.Driver";
  69.  
  70. private static final String AUTO = "auto_increment";
  71.  
  72. private static final String NO = "NO";
  73.  
  74. /*
  75. * 构造函数
  76. */
  77. public GenEntityMysql() {
  78.  
  79. }
  80.  
  81. /**
  82. *
  83. */
  84. public static void main(String[] args) {
      
  85. // GenEntityMysql genEntityMysql = new GenEntityMysql();
  86. // genEntityMysql.generateEntry();
  87.  
  88. }
  89.  
  90. /**
  91. * 功能:生成实体类主体代码
  92. *
  93. * @return
  94. */
  95. private String parseEntity() {
  96. StringBuffer sb = new StringBuffer();
  97.  
  98. sb.append("package " + this.entityPackage + ";\r\n\r\n");
  99. sb.append("import javax.persistence.Entity;" + "\r\n");
  100. sb.append("import javax.persistence.Table;" + "\r\n");
  101. sb.append("import javax.persistence.Column;" + "\r\n");
  102. sb.append("import javax.persistence.Id;" + "\r\n");
  103. sb.append("import javax.persistence.GeneratedValue;" + "\r\n");
  104. sb.append("import javax.persistence.GenerationType;" + "\r\n");
  105. sb.append("import java.io.Serializable;" + "\r\n");
  106.  
  107. //判断是否导入工具包
  108. if (f_util) {
  109. sb.append("import java.util.Date;\r\n");
  110. }
  111. if (f_sql) {
  112. sb.append("import java.sql.*;\r\n");
  113. }
  114. if (f_bigDecimal) {
  115. sb.append("import java.math.BigDecimal;\r\n");
  116. }
  117.  
  118. sb.append("\r\n");
  119. //注释部分
  120. sb.append(" /**\r\n");
  121. sb.append(" * " + tableName + " 实体类\r\n");
  122. sb.append(" * Created by " + this.authorName + "\r\n");
  123. sb.append(" * " + new Date() + "\r\n");
  124. sb.append(" */ \r\n");
  125. //实体部分
  126. sb.append("@Entity " + "\r\n");
  127. sb.append("@Table(name = \"" + tableName + "\")" + "\r\n");
  128.  
  129. sb.append("public class " + this.allInitialCapital(tableName) + " implements Serializable{\r\n");
  130. processAllAttrs(sb);//属性
  131. processAllMethod(sb);//get set方法
  132. sb.append("}\r\n");
  133.  
  134. return sb.toString();
  135. }
  136.  
  137. /**
  138. * 功能:生成repository代码
  139. *
  140. * @return
  141. */
  142. private String parseRepository() {
  143. StringBuffer sb = new StringBuffer();
  144.  
  145. sb.append("package " + this.repositoryPackage + ";\r\n\r\n");
  146. sb.append("import cn.net.yto.base.dao.BaseRepository;" + "\r\n");
  147. sb.append("import org.springframework.stereotype.Repository;" + "\r\n");
  148. sb.append("import " + this.entityPackage + "." + this.allInitialCapital(tableName) + ";" + "\r\n");
  149. sb.append("\r\n");
  150. //注释部分
  151. sb.append(" /**\r\n");
  152. sb.append(" * " + tableName + " Repository\r\n");
  153. sb.append(" * Created by " + this.authorName + "\r\n");
  154. sb.append(" * " + new Date() + "\r\n");
  155. sb.append(" */ \r\n");
  156. //实体部分
  157. sb.append("@Repository " + "\r\n");
  158.  
  159. sb.append("public interface " + this.allInitialCapital(tableName) + "Repository extends BaseRepository<" + this.allInitialCapital(tableName) + ", Integer> {\r\n");
  160. sb.append("}\r\n");
  161.  
  162. return sb.toString();
  163. }
  164.  
  165. /**
  166. * 功能:生成所有属性
  167. *
  168. * @param sb
  169. */
  170. private void processAllAttrs(StringBuffer sb) {
  171.  
  172. for (int i = 0; i < colNames.size(); i++) {
  173. //注释部分
  174. sb.append(" /**\r\n");
  175. sb.append(" * " + colComment.get(i) + " \r\n");
  176. sb.append(" */ \r\n");
  177. if (AUTO.equalsIgnoreCase(colExtras.get(i))) {
  178. sb.append("\t@Id" + "\r\n");
  179. sb.append("\t@GeneratedValue(strategy = GenerationType.IDENTITY)" + "\r\n");
  180. }
  181. sb.append("\t@Column(name = \"" + colNames.get(i) + "\"");
  182. if (NO.equalsIgnoreCase(colNulls.get(i))) {
  183. sb.append(", nullable = false");
  184. }
  185. if (colSizes.get(i) > 0) {
  186. sb.append(", length = " + colSizes.get(i));
  187. }
  188. sb.append(")" + "\r\n");
  189. sb.append("\tprivate " + sqlType2JavaType(colTypes.get(i)) + " " + this.secInitialCapital(colNames.get(i)) + ";\r\n\r\n");
  190. }
  191. }
  192.  
  193. /**
  194. * 功能:生成所有方法
  195. *
  196. * @param sb
  197. */
  198. private void processAllMethod(StringBuffer sb) {
  199.  
  200. for (int i = 0; i < colNames.size(); i++) {
  201. sb.append("\tpublic " + sqlType2JavaType(colTypes.get(i)) + " get" + this.allInitialCapital(colNames.get(i)) + "(){\r\n");
  202. sb.append("\t\treturn " + this.secInitialCapital(colNames.get(i)) + ";\r\n");
  203. sb.append("\t}\r\n");
  204. sb.append("\tpublic void set" + this.allInitialCapital(colNames.get(i)) + "(" + sqlType2JavaType(colTypes.get(i)) + " " +
  205. this.secInitialCapital(colNames.get(i)) + "){\r\n");
  206. sb.append("\tthis." + this.secInitialCapital(colNames.get(i)) + "=" + this.secInitialCapital(colNames.get(i)) + ";\r\n");
  207. sb.append("\t}\r\n");
  208. }
  209.  
  210. }
  211.  
  212. /**
  213. * 功能:将输入字符串的首字母改成大写
  214. *
  215. * @param str
  216. * @return
  217. */
  218. private String initialCapital(String str) {
  219. char[] ch = str.toCharArray();
  220. if (ch[0] >= 'a' && ch[0] <= 'z') {
  221. ch[0] = (char) (ch[0] - 32);
  222. }
  223. return new String(ch);
  224. }
  225.  
  226. /**
  227. * 所有字母转成小写
  228. *
  229. * @return
  230. */
  231. private String allLowerCase(String str) {
  232. if (StringUtils.isEmpty(str)) {
  233. return str;
  234. }
  235. return str.toLowerCase();
  236. }
  237.  
  238. /**
  239. * 分解名称
  240. *
  241. * @param str
  242. * @return
  243. */
  244. private String[] splitName(String str) {
  245. if (StringUtils.isEmpty(str)) {
  246. return null;
  247. }
  248. return str.split("_");
  249. }
  250.  
  251. /**
  252. * 由数据库表名生成实体类名
  253. *
  254. * @param tableName
  255. * @return
  256. */
  257. private String allInitialCapital(String tableName) {
  258. if (StringUtils.isEmpty(tableName)) {
  259. return null;
  260. }
  261. tableName = this.allLowerCase(tableName);
  262. String[] tableNameArray = this.splitName(tableName);
  263. StringBuffer entryName = new StringBuffer();
  264. for (String part : tableNameArray) {
  265. entryName.append(this.initialCapital(part));
  266. }
  267. return entryName.toString();
  268. }
  269.  
  270. /**
  271. * 由数据库列名生成实体类属性名
  272. *
  273. * @param columnName
  274. * @return
  275. */
  276. private String secInitialCapital(String columnName) {
  277. if (StringUtils.isEmpty(columnName)) {
  278. return null;
  279. }
  280. columnName = this.allLowerCase(columnName);
  281. String[] columnNameArray = this.splitName(columnName);
  282. StringBuffer fieldName = new StringBuffer();
  283. for (int i = 0; i < columnNameArray.length; i++) {
  284. String part = columnNameArray[i];
  285. if (0 == i) {
  286. fieldName.append(part);
  287. } else {
  288. fieldName.append(this.initialCapital(part));
  289. }
  290. }
  291. return fieldName.toString();
  292. }
  293.  
  294. /**
  295. * 功能:获得列的数据类型
  296. *
  297. * @param sqlType
  298. * @return
  299. */
  300. private String sqlType2JavaType(String sqlType) {
  301.  
  302. if (sqlType.equalsIgnoreCase("bit")) {
  303. return "Boolean";
  304. } else if (sqlType.equalsIgnoreCase("tinyint")) {
  305. return "Byte";
  306. } else if (sqlType.equalsIgnoreCase("smallint")) {
  307. return "Short";
  308. } else if (sqlType.equalsIgnoreCase("int")) {
  309. return "Integer";
  310. } else if (sqlType.equalsIgnoreCase("bigint")) {
  311. return "Long";
  312. } else if (sqlType.equalsIgnoreCase("float")) {
  313. return "Float";
  314. } else if (sqlType.equalsIgnoreCase("decimal")) {
  315. return "BigDecimal";
  316. } else if (sqlType.equalsIgnoreCase("numeric")
  317. || sqlType.equalsIgnoreCase("real") || sqlType.equalsIgnoreCase("money")
  318. || sqlType.equalsIgnoreCase("smallmoney")) {
  319. return "Double";
  320. } else if (sqlType.equalsIgnoreCase("varchar") || sqlType.equalsIgnoreCase("char")
  321. || sqlType.equalsIgnoreCase("nvarchar") || sqlType.equalsIgnoreCase("nchar")
  322. || sqlType.equalsIgnoreCase("text")) {
  323. return "String";
  324. } else if (sqlType.equalsIgnoreCase("datetime")) {
  325. return "Date";
  326. } else if (sqlType.equalsIgnoreCase("image")) {
  327. return "Blod";
  328. }
  329.  
  330. return null;
  331. }
  332.  
  333. /**
  334. * 生成实体
  335. */
  336. public void generateEntry() {
  337. //
  338. this.getTableAttribute();
  339.  
  340. String entityContent = this.parseEntity();
  341. this.writerEntityToFile(entityContent);
  342. String repositoryContent = this.parseRepository();
  343. this.writerRepositoryToFile(repositoryContent);
  344. }
  345.  
  346. /**
  347. * 写入文件
  348. *
  349. * @param content
  350. */
  351. private void writerRepositoryToFile(String content) {
  352. try {
  353. String absolutePath = this.getClass().getResource("").getPath();
  354. absolutePath = absolutePath.substring(0, absolutePath.indexOf("target"));
  355. String outputPath = absolutePath + "src/main/java/" + this.repositoryPackage.replace(".", "/") + "/"
  356. + this.allInitialCapital(tableName) + "Repository" + ".java";
  357. System.out.println("Repository路径:" + outputPath);
  358. FileWriter fw = new FileWriter(outputPath);
  359. PrintWriter pw = new PrintWriter(fw);
  360. pw.println(content);
  361. pw.flush();
  362. pw.close();
  363. } catch (IOException e) {
  364. e.printStackTrace();
  365. }
  366. }
  367.  
  368. /**
  369. * 写入文件
  370. *
  371. * @param content
  372. */
  373. private void writerEntityToFile(String content) {
  374. try {
  375. String absolutePath = this.getClass().getResource("").getPath();
  376. absolutePath = absolutePath.substring(0, absolutePath.indexOf("target"));
  377. String outputPath = absolutePath + "src/main/java/" + this.entityPackage.replace(".", "/") + "/"
  378. + allInitialCapital(tableName) + ".java";
  379. System.out.println("Entity路径:" + outputPath);
  380. FileWriter fw = new FileWriter(outputPath);
  381. PrintWriter pw = new PrintWriter(fw);
  382. pw.println(content);
  383. pw.flush();
  384. pw.close();
  385. } catch (IOException e) {
  386. e.printStackTrace();
  387. }
  388. }
  389.  
  390. /**
  391. * 获取数据库信息
  392. */
  393. private void getTableAttribute() {
  394. //创建连接
  395. Connection con = null;
  396. //查要生成实体类的表
  397. String sql = "show full columns from " + tableName;
  398. Statement state = null;
  399. try {
  400. try {
  401. Class.forName(DRIVER);
  402. } catch (ClassNotFoundException e1) {
  403. e1.printStackTrace();
  404. }
  405. con = DriverManager.getConnection(URL, NAME, PASS);
  406. state = con.createStatement();
  407. ResultSet rs = state.executeQuery(sql);
  408. // ResultSetMetaData metaData = rs.getMetaData();
  409.  
  410. while (rs.next()) {
  411. colNames.add(rs.getString("Field"));
  412. String type = rs.getString("Type");
  413. String comment = rs.getString("Comment");
  414. String extra = rs.getString("Extra");
  415. String colNull = rs.getString("Null");
  416. int colSize = 0;
  417. if (type.contains("(")) {
  418. String colSizeStr = type.substring(type.indexOf("(") + 1, type.indexOf(")"));
  419. type = type.substring(0, type.indexOf("("));
  420. try {
  421. colSize = Integer.valueOf(colSizeStr);
  422. } catch (NumberFormatException e) {
  423.  
  424. }
  425. }
  426.  
  427. colTypes.add(type);
  428. colSizes.add(colSize);
  429. colComment.add(comment);
  430. colExtras.add(extra);
  431. colNulls.add(colNull);
  432. if (type.equalsIgnoreCase("datetime")) {
  433. f_util = true;
  434. }
  435. if (type.equalsIgnoreCase("image") || type.equalsIgnoreCase("text")) {
  436. f_sql = true;
  437. }
  438. if (type.equalsIgnoreCase("decimal")) {
  439. f_bigDecimal = true;
  440. }
  441. }
  442. } catch (SQLException e) {
  443. e.printStackTrace();
  444. } finally {
  445. if (null != con) {
  446. try {
  447. con.close();
  448. } catch (SQLException e) {
  449. e.printStackTrace();
  450. }
  451. }
  452. }
  453. }
  454.  
  455. }
  1. package cn.net.yto.aaa.dao.generator;
  2.  
  3. import org.apache.commons.lang.StringUtils;
  4.  
  5. import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.*;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
  6.  
  7. /**
    * 由数据库表生成jpa实体工具
    *
    * @author huike
    * Created by gf.liu on 2017/5/25.
    */
    public class GenEntityMysql {
  8.  
  9. private static final String URL = "jdbc:mysql://127.0.0.1:3306/yto_test?useUnicode=true&characterEncoding=utf8";
    private static final String NAME = "root";
    private static final String PASS = "root";
  10.  
  11. /**
    * //指定实体生成所在包的路径
    */
    private String entityPackage = "cn.net.yto.aaa.dao.entities";
    /**
    * 指定实体仓库接口生成所在包的路径
    */
    private String repositoryPackage = "cn.net.yto.aaa.dao.repositories";
    /**
    * 作者名字
    */
    private String authorName = "huike";
    /**
    * 根据表明创建entity实例类,每次一个
    */
    private String tableName = "tb_stu_cou_stu";
  12.  
  13. /**
    * 列名数组
    */
    private List<String> colNames = new ArrayList<>();
    /**
    * 列名类型数组
    */
    private List<String> colTypes = new ArrayList<>();
    /**
    * 列名大小数组
    */
    private List<Integer> colSizes = new ArrayList<>();
    /**
    * //列补充说明
    */
    private List<String> colExtras = new ArrayList<>();
    /**
    * 列注释
    */
    private List<String> colComment = new ArrayList<>();
  14.  
  15. private List<String> colNulls = new ArrayList<>();
  16.  
  17. /**
    * 是否需要导入包java.util.*
    */
    private boolean f_util = false;
    /**
    * 是否需要导入包java.sql.*
    */
    private boolean f_sql = false;
    /**
    * 是否需要导入包java.math.BigDecimal
    */
    private boolean f_bigDecimal = false;
  18.  
  19. private static final String DRIVER = "com.mysql.jdbc.Driver";
  20.  
  21. private static final String AUTO = "auto_increment";
  22.  
  23. private static final String NO = "NO";
  24.  
  25. /*
    * 构造函数
    */
    public GenEntityMysql() {
  26.  
  27. }
  28.  
  29. /**
    *
    */
    public static void main(String[] args) {
  30.  
  31. // GenEntityMysql genEntityMysql = new GenEntityMysql();
    // genEntityMysql.generateEntry();
  32.  
  33. }
  34.  
  35. /**
    * 功能:生成实体类主体代码
    *
    * @return
    */
    private String parseEntity() {
    StringBuffer sb = new StringBuffer();
  36.  
  37. sb.append("package " + this.entityPackage + ";\r\n\r\n");
    sb.append("import javax.persistence.Entity;" + "\r\n");
    sb.append("import javax.persistence.Table;" + "\r\n");
    sb.append("import javax.persistence.Column;" + "\r\n");
    sb.append("import javax.persistence.Id;" + "\r\n");
    sb.append("import javax.persistence.GeneratedValue;" + "\r\n");
    sb.append("import javax.persistence.GenerationType;" + "\r\n");
    sb.append("import java.io.Serializable;" + "\r\n");
  38.  
  39. //判断是否导入工具包
    if (f_util) {
    sb.append("import java.util.Date;\r\n");
    }
    if (f_sql) {
    sb.append("import java.sql.*;\r\n");
    }
    if (f_bigDecimal) {
    sb.append("import java.math.BigDecimal;\r\n");
    }
  40.  
  41. sb.append("\r\n");
    //注释部分
    sb.append(" /**\r\n");
    sb.append(" * " + tableName + " 实体类\r\n");
    sb.append(" * Created by " + this.authorName + "\r\n");
    sb.append(" * " + new Date() + "\r\n");
    sb.append(" */ \r\n");
    //实体部分
    sb.append("@Entity " + "\r\n");
    sb.append("@Table(name = \"" + tableName + "\")" + "\r\n");
  42.  
  43. sb.append("public class " + this.allInitialCapital(tableName) + " implements Serializable{\r\n");
    processAllAttrs(sb);//属性
    processAllMethod(sb);//get set方法
    sb.append("}\r\n");
  44.  
  45. return sb.toString();
    }
  46.  
  47. /**
    * 功能:生成repository代码
    *
    * @return
    */
    private String parseRepository() {
    StringBuffer sb = new StringBuffer();
  48.  
  49. sb.append("package " + this.repositoryPackage + ";\r\n\r\n");
    sb.append("import cn.net.yto.base.dao.BaseRepository;" + "\r\n");
    sb.append("import org.springframework.stereotype.Repository;" + "\r\n");
    sb.append("import " + this.entityPackage + "." + this.allInitialCapital(tableName) + ";" + "\r\n");
    sb.append("\r\n");
    //注释部分
    sb.append(" /**\r\n");
    sb.append(" * " + tableName + " Repository\r\n");
    sb.append(" * Created by " + this.authorName + "\r\n");
    sb.append(" * " + new Date() + "\r\n");
    sb.append(" */ \r\n");
    //实体部分
    sb.append("@Repository " + "\r\n");
  50.  
  51. sb.append("public interface " + this.allInitialCapital(tableName) + "Repository extends BaseRepository<" + this.allInitialCapital(tableName) + ", Integer> {\r\n");
    sb.append("}\r\n");
  52.  
  53. return sb.toString();
    }
  54.  
  55. /**
    * 功能:生成所有属性
    *
    * @param sb
    */
    private void processAllAttrs(StringBuffer sb) {
  56.  
  57. for (int i = ; i < colNames.size(); i++) {
    //注释部分
    sb.append(" /**\r\n");
    sb.append(" * " + colComment.get(i) + " \r\n");
    sb.append(" */ \r\n");
    if (AUTO.equalsIgnoreCase(colExtras.get(i))) {
    sb.append("\t@Id" + "\r\n");
    sb.append("\t@GeneratedValue(strategy = GenerationType.IDENTITY)" + "\r\n");
    }
    sb.append("\t@Column(name = \"" + colNames.get(i) + "\"");
    if (NO.equalsIgnoreCase(colNulls.get(i))) {
    sb.append(", nullable = false");
    }
    if (colSizes.get(i) > ) {
    sb.append(", length = " + colSizes.get(i));
    }
    sb.append(")" + "\r\n");
    sb.append("\tprivate " + sqlType2JavaType(colTypes.get(i)) + " " + this.secInitialCapital(colNames.get(i)) + ";\r\n\r\n");
    }
    }
  58.  
  59. /**
    * 功能:生成所有方法
    *
    * @param sb
    */
    private void processAllMethod(StringBuffer sb) {
  60.  
  61. for (int i = ; i < colNames.size(); i++) {
    sb.append("\tpublic " + sqlType2JavaType(colTypes.get(i)) + " get" + this.allInitialCapital(colNames.get(i)) + "(){\r\n");
    sb.append("\t\treturn " + this.secInitialCapital(colNames.get(i)) + ";\r\n");
    sb.append("\t}\r\n");
    sb.append("\tpublic void set" + this.allInitialCapital(colNames.get(i)) + "(" + sqlType2JavaType(colTypes.get(i)) + " " +
    this.secInitialCapital(colNames.get(i)) + "){\r\n");
    sb.append("\tthis." + this.secInitialCapital(colNames.get(i)) + "=" + this.secInitialCapital(colNames.get(i)) + ";\r\n");
    sb.append("\t}\r\n");
    }
  62.  
  63. }
  64.  
  65. /**
    * 功能:将输入字符串的首字母改成大写
    *
    * @param str
    * @return
    */
    private String initialCapital(String str) {
    char[] ch = str.toCharArray();
    if (ch[] >= 'a' && ch[] <= 'z') {
    ch[] = (char) (ch[] - );
    }
    return new String(ch);
    }
  66.  
  67. /**
    * 所有字母转成小写
    *
    * @return
    */
    private String allLowerCase(String str) {
    if (StringUtils.isEmpty(str)) {
    return str;
    }
    return str.toLowerCase();
    }
  68.  
  69. /**
    * 分解名称
    *
    * @param str
    * @return
    */
    private String[] splitName(String str) {
    if (StringUtils.isEmpty(str)) {
    return null;
    }
    return str.split("_");
    }
  70.  
  71. /**
    * 由数据库表名生成实体类名
    *
    * @param tableName
    * @return
    */
    private String allInitialCapital(String tableName) {
    if (StringUtils.isEmpty(tableName)) {
    return null;
    }
    tableName = this.allLowerCase(tableName);
    String[] tableNameArray = this.splitName(tableName);
    StringBuffer entryName = new StringBuffer();
    for (String part : tableNameArray) {
    entryName.append(this.initialCapital(part));
    }
    return entryName.toString();
    }
  72.  
  73. /**
    * 由数据库列名生成实体类属性名
    *
    * @param columnName
    * @return
    */
    private String secInitialCapital(String columnName) {
    if (StringUtils.isEmpty(columnName)) {
    return null;
    }
    columnName = this.allLowerCase(columnName);
    String[] columnNameArray = this.splitName(columnName);
    StringBuffer fieldName = new StringBuffer();
    for (int i = ; i < columnNameArray.length; i++) {
    String part = columnNameArray[i];
    if (0 == i) {
    fieldName.append(part);
    } else {
    fieldName.append(this.initialCapital(part));
    }
    }
    return fieldName.toString();
    }
  74.  
  75. /**
    * 功能:获得列的数据类型
    *
    * @param sqlType
    * @return
    */
    private String sqlType2JavaType(String sqlType) {
  76.  
  77. if (sqlType.equalsIgnoreCase("bit")) {
    return "Boolean";
    } else if (sqlType.equalsIgnoreCase("tinyint")) {
    return "Byte";
    } else if (sqlType.equalsIgnoreCase("smallint")) {
    return "Short";
    } else if (sqlType.equalsIgnoreCase("int")) {
    return "Integer";
    } else if (sqlType.equalsIgnoreCase("bigint")) {
    return "Long";
    } else if (sqlType.equalsIgnoreCase("float")) {
    return "Float";
    } else if (sqlType.equalsIgnoreCase("decimal")) {
    return "BigDecimal";
    } else if (sqlType.equalsIgnoreCase("numeric")
    || sqlType.equalsIgnoreCase("real") || sqlType.equalsIgnoreCase("money")
    || sqlType.equalsIgnoreCase("smallmoney")) {
    return "Double";
    } else if (sqlType.equalsIgnoreCase("varchar") || sqlType.equalsIgnoreCase("char")
    || sqlType.equalsIgnoreCase("nvarchar") || sqlType.equalsIgnoreCase("nchar")
    || sqlType.equalsIgnoreCase("text")) {
    return "String";
    } else if (sqlType.equalsIgnoreCase("datetime")) {
    return "Date";
    } else if (sqlType.equalsIgnoreCase("image")) {
    return "Blod";
    }
  78.  
  79. return null;
    }
  80.  
  81. /**
    * 生成实体
    */
    public void generateEntry() {
    //
    this.getTableAttribute();
  82.  
  83. String entityContent = this.parseEntity();
    this.writerEntityToFile(entityContent);
    String repositoryContent = this.parseRepository();
    this.writerRepositoryToFile(repositoryContent);
    }
  84.  
  85. /**
    * 写入文件
    *
    * @param content
    */
    private void writerRepositoryToFile(String content) {
    try {
    String absolutePath = this.getClass().getResource("").getPath();
    absolutePath = absolutePath.substring(, absolutePath.indexOf("target"));
    String outputPath = absolutePath + "src/main/java/" + this.repositoryPackage.replace(".", "/") + "/"
    + this.allInitialCapital(tableName) + "Repository" + ".java";
    System.out.println("Repository路径:" + outputPath);
    FileWriter fw = new FileWriter(outputPath);
    PrintWriter pw = new PrintWriter(fw);
    pw.println(content);
    pw.flush();
    pw.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
  86.  
  87. /**
    * 写入文件
    *
    * @param content
    */
    private void writerEntityToFile(String content) {
    try {
    String absolutePath = this.getClass().getResource("").getPath();
    absolutePath = absolutePath.substring(, absolutePath.indexOf("target"));
    String outputPath = absolutePath + "src/main/java/" + this.entityPackage.replace(".", "/") + "/"
    + allInitialCapital(tableName) + ".java";
    System.out.println("Entity路径:" + outputPath);
    FileWriter fw = new FileWriter(outputPath);
    PrintWriter pw = new PrintWriter(fw);
    pw.println(content);
    pw.flush();
    pw.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
  88.  
  89. /**
    * 获取数据库信息
    */
    private void getTableAttribute() {
    //创建连接
    Connection con = null;
    //查要生成实体类的表
    String sql = "show full columns from " + tableName;
    Statement state = null;
    try {
    try {
    Class.forName(DRIVER);
    } catch (ClassNotFoundException e1) {
    e1.printStackTrace();
    }
    con = DriverManager.getConnection(URL, NAME, PASS);
    state = con.createStatement();
    ResultSet rs = state.executeQuery(sql);
    // ResultSetMetaData metaData = rs.getMetaData();
  90.  
  91. while (rs.next()) {
    colNames.add(rs.getString("Field"));
    String type = rs.getString("Type");
    String comment = rs.getString("Comment");
    String extra = rs.getString("Extra");
    String colNull = rs.getString("Null");
    int colSize = ;
    if (type.contains("(")) {
    String colSizeStr = type.substring(type.indexOf("(") + , type.indexOf(")"));
    type = type.substring(, type.indexOf("("));
    try {
    colSize = Integer.valueOf(colSizeStr);
    } catch (NumberFormatException e) {
  92.  
  93. }
    }
  94.  
  95. colTypes.add(type);
    colSizes.add(colSize);
    colComment.add(comment);
    colExtras.add(extra);
    colNulls.add(colNull);
    if (type.equalsIgnoreCase("datetime")) {
    f_util = true;
    }
    if (type.equalsIgnoreCase("image") || type.equalsIgnoreCase("text")) {
    f_sql = true;
    }
    if (type.equalsIgnoreCase("decimal")) {
    f_bigDecimal = true;
    }
    }
    } catch (SQLException e) {
    e.printStackTrace();
    } finally {
    if (null != con) {
    try {
    con.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }
    }
  96.  
  97. }

由数据库表生成jpa实体工具的更多相关文章

  1. JAVA 自动生成对应数据库表的JPA代码工具

    http://blog.csdn.net/zheng2008hua/article/details/6274659 关键词:JPA 数据库表代码自动生成,JPA代码生成     自动生成对应数据库表的 ...

  2. IDEA 根据数据库表 生成 Model实体

    首先在 Idea中 配置数据源,测试ok(过程略) idea窗口中左下角是否 有显示Persistence 窗口  如果没有显示就要如下方法 添加显示: File - > Project Str ...

  3. net core天马行空系列-可用于依赖注入的,数据库表和c#实体类互相转换的接口实现

    1.前言 hi,大家好,我是三合.作为一名程序猿,日常开发中,我们在接到需求以后,一般都会先构思一个模型,然后根据模型写实体类,写完实体类后在数据库里建表,接着进行增删改查, 也有第二种情况,就是有些 ...

  4. myeclipse通过数据表生成jpa或hibernate实体---https://blog.csdn.net/partner4java/article/details/8560289

    myeclipse通过数据表生成jpa或hibernate实体-----https://blog.csdn.net/partner4java/article/details/8560289

  5. symfony 数据库表生成实体、迁移数据库

    从数据库表生成实体 1. 由数据库生成模型: php bin/console doctrine:mapping:convert --from-database yml D:\db\ D:\test_b ...

  6. JDBCUtils,根据当前MySQL数据库下面的表生成java实体类

    自己简单写的JDBCUtils,可以根据当前数据库下面的表生成java实体类,代码萌新,请多多包涵. 初始化配置: //驱动程序名//不固定,根据驱动 static String driver = & ...

  7. SqlServer数据库表生成C# Model实体类SQL语句——补充

    在sql语句最前边加上  use[数据库名] 原链接:https://www.cnblogs.com/jhli/p/11552105.html   --[SQL骚操作]SqlServer数据库表生成C ...

  8. GG_Model 类库与数据库表对应建立实体类

    3.4.GG_Model 类库与数据库表对应建立实体类 我这里不教大家写代码,直接用TT模板自动生成,省去写代码的麻烦. A. 三个文件MysqlDbhelper.ttinclude .mysqlMa ...

  9. eclipse从数据库逆向生成Hibernate实体类

    做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理所当然的,但是到公司里做项目后,让我认识到,没有说既进行完数据库设计后还要再“自己”建立一变VO.意思是,在项目设计时,要么 ...

随机推荐

  1. mysql和oracle分页查询

    MYSQL分页查询 方式1: select * from table order by id limit m, n; 该语句的意思为,查询m+n条记录,去掉前m条,返回后n条记录.无疑该查询能够实现分 ...

  2. VMware install MikroTik RouterOS

    1 download the vmdk from Mikro Tik official website 2 create a new vmware host with use an exited vm ...

  3. open-falcon部署v0.2.1版本

    环境准备 安装redis yum install redis -y systemctl start redis 安装mysql rpm -ivh http://dev.mysql.com/get/my ...

  4. raphael参数说明

    大纲 :first-child { margin-top: 0px; } .markdown-preview:not([data-use-github-style]) h1, .markdown-pr ...

  5. ajax错误类型大全

    https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html ajax错误类型大全

  6. buaacoding_2018算法期末上机G题.地铁建设题解

    // 标注:本文旨在为博主确立一种题解的基本范式,以避免博主的题解流于AC代码的粘贴.此基本范式为:完整而简洁明了的思路及其推导说明,力图触及问题的本质并衍生对同类问题的思路分析,使得题解具有泛用性, ...

  7. bzoj2054疯狂的馒头——线段树

    中文题面,一排有n个馒头,用刷子把整个连续的区间刷成一种颜色.因为颜色会覆盖掉之前的.所以我们可以用线段树来反着处理.如果这段区间之前刷到过就不要再遍历进去了,因为这次已经被上次刷的颜色给覆盖了.最后 ...

  8. 最简单获取appPackage和appActivity 的方法

    appPackage和appActivity 进行appium自动化测试必须的两个参数,我们所测试的APP项目不同,这两个参数肯定也是不一样的.我们启动的包都是靠这两个参数去驱动的,那么我们怎么可以快 ...

  9. wireshark基础学习—第四部分wireshark过滤器总结

    这两天一直在熟悉wireshark的过滤器语法规则,以前也接触过这个工具,但只是学校老师教的如何去选择一个接口进行抓取,以及如何去分析一个包的数据.可惜当时对此也没有过多深入.对于我当前,并未接触太多 ...

  10. ubuntu安装nvidia显卡驱动

    朋友挖矿,需要给Ubuntu(16.04版本)系统安装nvidia的显卡驱动,请我帮忙.最开始是进行手动安装.无奈的是安装完后进不了图形化界面.今天正好有时间,找了个硬盘装了个Ubuntu进行测试,成 ...