加载中...

Hibernate生成实体类-手工写法(一)


BaseDao

  1. package com.pb.dao;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.PreparedStatement;
  5. import java.sql.ResultSet;
  6. import java.sql.SQLException;
  7. public class BaseDao {
  8. protected Connection conn;
  9. protected PreparedStatement ps;
  10. protected ResultSet rs;
  11. public Connection getConnection() {
  12. String driver = "oracle.jdbc.driver.OracleDriver";
  13. String url = "jdbc:oracle:thin:@localhost:1521:orcl";
  14. String username = "accp";
  15. String password = "accp";
  16. try {
  17. Class.forName(driver);
  18. conn = DriverManager.getConnection(url, username, password);
  19. } catch (ClassNotFoundException e) {
  20. e.printStackTrace();
  21. } catch (SQLException e) {
  22. e.printStackTrace();
  23. }
  24. return conn;
  25. }
  26. public void closeConnection() {
  27. if (rs != null) {
  28. try {
  29. rs.close();
  30. } catch (SQLException e) {
  31. e.printStackTrace();
  32. }
  33. }
  34. if (ps != null) {
  35. try {
  36. ps.close();
  37. } catch (SQLException e) {
  38. e.printStackTrace();
  39. }
  40. }
  41. if (conn != null) {
  42. try {
  43. conn.close();
  44. } catch (SQLException e) {
  45. e.printStackTrace();
  46. }
  47. }
  48. }
  49. public ResultSet executeQuery(String sql,Object [] params){
  50. getConnection();
  51. try {
  52. ps=conn.prepareStatement(sql);
  53. if(params!=null){
  54. for (int i = 0; i < params.length; i++) {
  55. ps.setObject(i+1, params[i]);
  56. }
  57. }
  58. rs=ps.executeQuery();
  59. } catch (SQLException e) {
  60. e.printStackTrace();
  61. }
  62. return rs;
  63. }
  64. public int executeUpdate(String sql,Object [] params){
  65. int updateNum=-1;
  66. getConnection();
  67. try {
  68. ps=conn.prepareStatement(sql);
  69. if(params!=null){
  70. for (int i = 0; i < params.length; i++) {
  71. ps.setObject(i+1, params[i]);
  72. }
  73. }
  74. updateNum=ps.executeUpdate();
  75. } catch (SQLException e) {
  76. e.printStackTrace();
  77. }finally{
  78. this.closeConnection();
  79. }
  80. return updateNum;
  81. }
  82. }

tableDao仍然是Dao层

  1. package com.pb.dao;
  2. import java.util.List;
  3. import java.util.Map;
  4. public interface TableDao {
  5. public List<String> getTableName();
  6. public Map<String, String> getCols(String tableName);
  7. }

tableDaoImpl实现数据访问

  1. package com.pb.dao.impl;
  2. import java.sql.ResultSet;
  3. import java.sql.SQLException;
  4. import java.util.ArrayList;
  5. import java.util.HashMap;
  6. import java.util.Iterator;
  7. import java.util.List;
  8. import java.util.Map;
  9. import com.pb.dao.BaseDao;
  10. import com.pb.dao.TableDao;
  11. public class TableDaoImpl extends BaseDao implements TableDao {
  12.  //当前用户下的所有表名
  13. @Override
  14. public List<String> getTableName() {
  15. List<String> tableNameList = null;
  16. try {
  17. String sql = "select * from user_tables";
  18. Object[] params = {};
  19. ResultSet rs = super.executeQuery(sql, params);
  20. if (rs != null) {
  21. tableNameList = new ArrayList<String>();
  22. while (rs.next()) {
  23. tableNameList.add(rs.getString("TABLE_NAME"));
  24. }
  25. }
  26. } catch (SQLException e) {
  27. e.printStackTrace();
  28. } finally {
  29. super.closeConnection();
  30. }
  31. return tableNameList;
  32. }
  33.   //指定表名的所有字段
  34. @Override
  35. public Map<String, String> getCols(String tableName) {
  36. Map<String, String> map=null;
  37. try {
  38. String sql="select * from user_tab_cols where table_name=?";
  39. Object [] params={tableName};
  40. ResultSet rs=super.executeQuery(sql, params);
  41. if(rs!=null){
  42. map=new HashMap<String, String>();
  43. while(rs.next()){
  44. map.put(rs.getString("COLUMN_NAME"), rs.getString("DATA_TYPE"));
  45. }
  46. }
  47. } catch (SQLException e) {
  48. e.printStackTrace();
  49. } finally {
  50. super.closeConnection();
  51. }
  52. return map;
  53. }
  54. }

业务层biz

  1. TableService接口
  1. package com.pb.biz;
  2. import java.util.List;
  3. import java.util.Map;
  4. public interface TableService {
  5.   
  6. public List<String> getTableName();
  7. public Map<String, String> getCols(String tableName);
  8. }
  1. TableService接口业务层实现
  1. package com.pb.biz.impl;
  2. import java.util.List;
  3. import java.util.Map;
  4. import com.pb.biz.TableService;
  5. import com.pb.dao.TableDao;
  6. import com.pb.dao.impl.TableDaoImpl;
  7. public class TableServiceImpl implements TableService {
  8. private TableDao tableDao=new TableDaoImpl();
  9. @Override
  10. public List<String> getTableName() {
  11. return tableDao.getTableName();
  12. }
  13. @Override
  14. public Map<String, String> getCols(String tableName) {
  15. return tableDao.getCols(tableName);
  16. }
  17. }

测试类

  1. package com.pb.test;
  2. import java.io.File;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.util.List;
  7. import java.util.Map;
  8. import java.util.Scanner;
  9. import com.pb.biz.TableService;
  10. import com.pb.biz.impl.TableServiceImpl;
  11. public class DemoTest {
  12. public static TableService tableService=new TableServiceImpl();
  13. public static Scanner input=new Scanner(System.in);
  14. public static void main(String[] args) {
  15. Map<String, String> map;
  16. //类名
  17. String className=null;
  18. //获取accp用户下的全部表名
  19. List<String> tableNameList=getTableName();
  20. System.out.println("请输入你需要的表名");
  21. String tableName=input.next().toUpperCase();
  22. boolean flag=false;
  23. for (String s : tableNameList) {
  24. if(s.contains(tableName)){
  25. flag=true;
  26. }
  27. }
  28. if(flag==true){
  29. System.out.println("表已经找到表名为"+tableName);
  30. //输出表名并生成类名
  31. className ="public class " + tableName.substring(0,1)+tableName.substring(1).toLowerCase()+" { \n";
  32. //要建立的包名
  33. System.out.println("请输入要建立的包名:");
  34. String pack="package "+input.next()+" ;\n";
  35. //获取表中的字段
  36. map =tableService.getCols(tableName);
  37. //根据表名生成文件名
  38. String filename=tableName.substring(0,1)+tableName.substring(1).toLowerCase()+".java";
  39. //找到表中的字段
  40. map=getTableCols(tableName);
  41. //建立属性字符串
  42. String proerty=getProerty(map);
  43. //无参数构造方法
  44. String con=getconString(tableName);
  45. //get方法
  46. String getter=getMethod(map);
  47. //setter方法
  48. String setter=setMethod(map);
  49. //生成总字符串
  50. String str=pack+className+proerty+con+getter+setter+"}";
  51. //写入文件
  52. File file=new File("d:"+File.separator+filename);
  53. FileOutputStream fos=null;
  54. try {
  55. fos=new FileOutputStream(file);
  56. fos.write(str.getBytes());
  57. } catch (FileNotFoundException e) {
  58. e.printStackTrace();
  59. } catch (IOException e) {
  60. e.printStackTrace();
  61. }finally{
  62. try {
  63. fos.close();
  64. } catch (IOException e) {
  65. e.printStackTrace();
  66. }
  67. }
  68. }else{
  69. System.out.println("没有这个表"+tableName);
  70. }
  71. }
  72. //当前用户下所有表名
  73. public static List<String> getTableName(){
  74. return tableService.getTableName();
  75. }
  76. //字段
  77. public static Map<String,String> getTableCols(String tableName){
  78. return tableService.getCols(tableName);
  79. }
  80. //无参数构造方法
  81. public static String getconString(String tableName){
  82. String conString=" \n // 无参数构造方法\n public "+tableName.substring(0,1)+tableName.substring(1).toLowerCase()+"(){\n\n}\n";
  83. return conString;
  84. }
  85. //将字段转为字符串属性
  86. public static String getProerty(Map<String,String> map){
  87. String str="// Fields \n";
  88. for(String s:map.keySet()){
  89. if(map.get(s).equals("NUMBER")){
  90. str+=" \n private " +"int "+s.toLowerCase()+";\n";
  91. }else if(map.get(s).equals("VARCHAR2")){
  92. str+=" \n private " +"String "+s.toLowerCase()+";\n";
  93. }else if(map.get(s).equals("DATE")){
  94. str+=" \n private " +"Date "+s.toLowerCase()+";\n";
  95. }else{
  96. str+=" \n private " +map.get(s)+" "+s.toLowerCase()+";\n";
  97. }
  98. }
  99. return str;
  100. }
  101. //get方法
  102. //将字段转为get方法
  103. public static String getMethod(Map<String,String> map){
  104. String str="//getter方法\n";
  105. for(String s:map.keySet()){
  106. if(map.get(s).equals("NUMBER")){
  107. str+=" \n public " +"int "+"get"+s.substring(0,1)+s.substring(1).toLowerCase()+"(){\n return this."+s.toLowerCase()+"; \n}";
  108. }else if(map.get(s).equals("VARCHAR2")){
  109. str+=" \n public " +"String "+"get"+s.substring(0,1)+s.substring(1).toLowerCase()+"(){\n return this."+s.toLowerCase()+"; \n}";
  110. }else if(map.get(s).equals("DATE")){
  111. str+=" \n public " +"Date "+"get"+s.substring(0,1)+s.substring(1).toLowerCase()+"(){\n return this."+s.toLowerCase()+"; \n}";
  112. }else{
  113. str+=" \n public " +map.get(s)+" "+"get"+s.substring(0,1)+s.substring(1).toLowerCase()+"(){\n return this."+s.toLowerCase()+"; \n}";
  114. }
  115. }
  116. return str;
  117. }
  118. //set方法
  119. //将字段转为set方法
  120. public static String setMethod(Map<String,String> map){
  121. String str="\n//setter方法\n";
  122. for(String s:map.keySet()){
  123. if(map.get(s).equals("NUMBER")){
  124. str+=" \n public void " +"set"+s.substring(0,1)+s.substring(1).toLowerCase()+"("+"int "+s.toLowerCase()+") {\n this."+s.toLowerCase()+"="+s.toLowerCase()+";\n}\n";
  125. }else if(map.get(s).equals("VARCHAR2")){
  126. str+=" \n public void " +"set"+s.substring(0,1)+s.substring(1).toLowerCase()+"("+"String "+s.toLowerCase()+") {\n this."+s.toLowerCase()+"="+s.toLowerCase()+";\n}\n";
  127. }else if(map.get(s).equals("DATE")){
  128. str+=" \n public void " +"set"+s.substring(0,1)+s.substring(1).toLowerCase()+"("+"Date "+s.toLowerCase()+") {\n this."+s.toLowerCase()+"="+s.toLowerCase()+";\n}\n";
  129. }else{
  130. str+=" \n public void " +" "+"set"+s.substring(0,1)+s.substring(1).toLowerCase()+"("+map.get(s)+" "+s.toLowerCase()+") {\n this."+s.toLowerCase()+"="+s.toLowerCase()+";\n}\n";
  131. }
  132. }
  133. return str;
  134. }
  135. }

不用框架自己写的,还有漏吊的,还有很多,没有写明白的,望指正


还没有评论.