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

BaseDao

package com.pb.dao;



import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;





public class BaseDao {

    protected Connection conn;

    protected PreparedStatement ps;

    protected ResultSet rs;



    public Connection getConnection() {

        String driver = "oracle.jdbc.driver.OracleDriver";

        String url = "jdbc:oracle:thin:@localhost:1521:orcl";

        String username = "accp";

        String password = "accp";

        try {

            Class.forName(driver);



            conn = DriverManager.getConnection(url, username, password);

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        } catch (SQLException e) {

            e.printStackTrace();

        }

        return conn;

    }



    public void closeConnection() {

        if (rs != null) {

            try {

                rs.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

        if (ps != null) {

            try {

                ps.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

        if (conn != null) {

            try {

                conn.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

    }

    

    public ResultSet executeQuery(String sql,Object [] params){

        getConnection();

        

        try {

            ps=conn.prepareStatement(sql);

        if(params!=null){

            for (int i = 0; i < params.length; i++) {

            

                    ps.setObject(i+1, params[i]);

                

            }

        }

        rs=ps.executeQuery();

        } catch (SQLException e) {

            e.printStackTrace();

        }

        return rs;

    }

    public int executeUpdate(String sql,Object [] params){

        int updateNum=-1;

        getConnection();

        

        try {

            ps=conn.prepareStatement(sql);

        if(params!=null){

            for (int i = 0; i < params.length; i++) {

            

                    ps.setObject(i+1, params[i]);

                

            }

        }

        updateNum=ps.executeUpdate();

        } catch (SQLException e) {

            e.printStackTrace();

        }finally{

            this.closeConnection();

        }

        return updateNum;

    }

    

}

tableDao仍然是Dao层

package com.pb.dao;



import java.util.List;

import java.util.Map;







public interface TableDao {

    

    public List<String> getTableName();

    

    public Map<String, String> getCols(String tableName);



}

tableDaoImpl实现数据访问

package com.pb.dao.impl;



import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;



import com.pb.dao.BaseDao;

import com.pb.dao.TableDao;



public class TableDaoImpl extends BaseDao implements TableDao {

 //当前用户下的所有表名

    @Override

    public List<String> getTableName() {

        List<String> tableNameList = null;

        try {

            String sql = "select * from user_tables";

            Object[] params = {};

            ResultSet rs = super.executeQuery(sql, params);

            if (rs != null) {

                tableNameList = new ArrayList<String>();

                while (rs.next()) {

                    tableNameList.add(rs.getString("TABLE_NAME"));

                    

                }

            }

        } catch (SQLException e) {

            e.printStackTrace();

        } finally {

            super.closeConnection();

        }



        return tableNameList;

    }

  //指定表名的所有字段

    @Override

    public Map<String, String> getCols(String tableName) {

        Map<String, String> map=null;

        try {

        String sql="select * from user_tab_cols where table_name=?";

        Object [] params={tableName};

        ResultSet rs=super.executeQuery(sql, params);

        if(rs!=null){

            map=new HashMap<String, String>();

            while(rs.next()){

                map.put(rs.getString("COLUMN_NAME"), rs.getString("DATA_TYPE"));

            }

        }

        } catch (SQLException e) {

            e.printStackTrace();

        } finally {

            super.closeConnection();

        }

        return map;

    }



}

业务层biz

TableService接口
package com.pb.biz;



import java.util.List;

import java.util.Map;



public interface TableService {

  

    public List<String> getTableName();

    

    public Map<String, String> getCols(String tableName);

}
TableService接口业务层实现
package com.pb.biz.impl;



import java.util.List;

import java.util.Map;



import com.pb.biz.TableService;

import com.pb.dao.TableDao;

import com.pb.dao.impl.TableDaoImpl;



public class TableServiceImpl implements TableService {

    private TableDao tableDao=new TableDaoImpl();

    @Override

    public List<String> getTableName() {

        return tableDao.getTableName();

    }



    @Override

    public Map<String, String> getCols(String tableName) {

        return tableDao.getCols(tableName);

    }



}

测试类

package com.pb.test;



import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.List;

import java.util.Map;

import java.util.Scanner;



import com.pb.biz.TableService;

import com.pb.biz.impl.TableServiceImpl;







public class DemoTest {

    public static TableService tableService=new TableServiceImpl();

    public static Scanner input=new Scanner(System.in);

    public static void main(String[] args) {

        Map<String, String> map;

        //类名

        String className=null;

        

        //获取accp用户下的全部表名

    List<String> tableNameList=getTableName();

    System.out.println("请输入你需要的表名");

    String tableName=input.next().toUpperCase();

    boolean flag=false;

    for (String s : tableNameList) {

        if(s.contains(tableName)){

            flag=true;

            

        }

    }

    

    

    if(flag==true){

        System.out.println("表已经找到表名为"+tableName);

        //输出表名并生成类名

        className ="public class " + tableName.substring(0,1)+tableName.substring(1).toLowerCase()+" {  \n";

        //要建立的包名

        System.out.println("请输入要建立的包名:");

        String pack="package "+input.next()+" ;\n";

        //获取表中的字段

         map =tableService.getCols(tableName);

        //根据表名生成文件名

         String filename=tableName.substring(0,1)+tableName.substring(1).toLowerCase()+".java";

            //找到表中的字段

            map=getTableCols(tableName);

            //建立属性字符串

            String proerty=getProerty(map);

            //无参数构造方法

            String con=getconString(tableName);

            //get方法

            String getter=getMethod(map);

            //setter方法

            String setter=setMethod(map);

            //生成总字符串

            String str=pack+className+proerty+con+getter+setter+"}";

            //写入文件

            File file=new File("d:"+File.separator+filename);

            FileOutputStream fos=null;

            try {

                 fos=new FileOutputStream(file);

                fos.write(str.getBytes());

            } catch (FileNotFoundException e) {

                e.printStackTrace();

            } catch (IOException e) {

                e.printStackTrace();

            }finally{

                try {

                    fos.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

    }else{

        System.out.println("没有这个表"+tableName);

    }

    

    }

    //当前用户下所有表名

    public static List<String> getTableName(){

        return tableService.getTableName();

    }

    //字段

    public static Map<String,String> getTableCols(String tableName){

        return tableService.getCols(tableName);

    }

    //无参数构造方法

        public static String getconString(String tableName){

            String conString=" \n // 无参数构造方法\n public "+tableName.substring(0,1)+tableName.substring(1).toLowerCase()+"(){\n\n}\n";

            return conString;

        }

        

    //将字段转为字符串属性

    public static String getProerty(Map<String,String> map){

        String str="// Fields \n";

        for(String s:map.keySet()){

            if(map.get(s).equals("NUMBER")){

                str+=" \n private " +"int "+s.toLowerCase()+";\n";

            }else  if(map.get(s).equals("VARCHAR2")){

                str+=" \n private " +"String "+s.toLowerCase()+";\n";

            }else  if(map.get(s).equals("DATE")){

                str+=" \n private " +"Date "+s.toLowerCase()+";\n";

            }else{

                str+=" \n private " +map.get(s)+" "+s.toLowerCase()+";\n";

            }

        }

        return str;

    }

    //get方法

    //将字段转为get方法

        public static String getMethod(Map<String,String> map){

            String str="//getter方法\n";

            for(String s:map.keySet()){

                if(map.get(s).equals("NUMBER")){

                    str+=" \n public " +"int "+"get"+s.substring(0,1)+s.substring(1).toLowerCase()+"(){\n  return  this."+s.toLowerCase()+"; \n}";

                }else  if(map.get(s).equals("VARCHAR2")){

                    str+="  \n public " +"String "+"get"+s.substring(0,1)+s.substring(1).toLowerCase()+"(){\n  return  this."+s.toLowerCase()+"; \n}";

                }else  if(map.get(s).equals("DATE")){

                    str+="  \n public " +"Date "+"get"+s.substring(0,1)+s.substring(1).toLowerCase()+"(){\n  return  this."+s.toLowerCase()+"; \n}";

                }else{

                    str+=" \n public " +map.get(s)+" "+"get"+s.substring(0,1)+s.substring(1).toLowerCase()+"(){\n  return  this."+s.toLowerCase()+"; \n}";

                }

            }

            return str;

        }

        //set方法

        //将字段转为set方法

            public static String setMethod(Map<String,String> map){

                String str="\n//setter方法\n";

                for(String s:map.keySet()){

                    if(map.get(s).equals("NUMBER")){

                        str+=" \n public  void  " +"set"+s.substring(0,1)+s.substring(1).toLowerCase()+"("+"int "+s.toLowerCase()+") {\n this."+s.toLowerCase()+"="+s.toLowerCase()+";\n}\n";

                    }else  if(map.get(s).equals("VARCHAR2")){

                        str+="  \n public  void " +"set"+s.substring(0,1)+s.substring(1).toLowerCase()+"("+"String "+s.toLowerCase()+") {\n this."+s.toLowerCase()+"="+s.toLowerCase()+";\n}\n";

                    }else  if(map.get(s).equals("DATE")){

                        str+="  \n public  void " +"set"+s.substring(0,1)+s.substring(1).toLowerCase()+"("+"Date "+s.toLowerCase()+") {\n this."+s.toLowerCase()+"="+s.toLowerCase()+";\n}\n";

                    }else{

                        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";

                    }

                }

                return str;

            }

}

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

你可能感兴趣的:(Hibernate)