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

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

时间: 2024-11-08 22:37:41

Hibernate生成实体类-手工写法(一)的相关文章

MyEclipse从数据库反向生成实体类之Hibernate方式 反向工程

步骤大致如下: 第一步: window-->open Perspective-->MyEclipse Java Persistence 操作后会出现一个视图DB Brower:MyEclipse Derby 在空白区点击右键,新建一个数据库对象.我用的是mysql,其实我一直想用oracle之类的,只是机子内存小,又懒得倒腾别的,结果截个图吧: 左边的属性按照自己使用的数据库填就行了,左边部分是我建好以后的结果,数据库名叫mydb,有个customer表 是专门这次测试用的 第二步: 新建一个

蜗牛—Hibernate反向生成实体类及配置文件

今天学习了Hibernate的一些知识 第一步,打开myeclipse中的database视图,找到相应的表,选中后右键单击, 接下来, 蜗牛-Hibernate反向生成实体类及配置文件

eclipse逆向生成hibernate的实体类

eclipse从数据库逆向生成Hibernate实体类(注解和配置文件) 分类: hibernate 数据库 java 2011-10-22 21:28 2915人阅读 评论(8) 收藏 举报 做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理所当然的,但是到公司里做项目后,让我认识到,没有说既进行完数据库设计后还要再"自己"建立一变VO.意思是,在项目设计时,要么根据需求分析建立实体类,由正向生成数据库表:要么就先进行数据库表设计,再逆向生成实体类.没有说进

MyEclipse Hibernate反向工程生成实体类

不废话,直接上步骤 step1.Window -> Open Perspective -> MyEclipse Database Explorer 到DB Broswer界面 step2.右键 -> New,新建一个数据库连接 step3.创建一个java项目 step4.给项目添加Hibernate Capabilities 项目 -> 右键 -> MyEclipse -> Add Hibernate Capabilities Add Hibernate Capabi

eclipse逆向生成实体类

(转自:http://blog.csdn.net/wangpeng047/article/details/6877720) 做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理所当然的,但是到公司里做项目后,让我认识到,没有说既进行完数据库设计后还要再"自己"建立一变VO.意思是,在项目设计时,要么根据需求分析建立实体类,由正向生成数据库表:要么就先进行数据库表设计,再逆向生成实体类.没有说进行完任意一方的设计后再去花时间去自己匹配建立另一方的设计. 原因是:

通过MyEclipse生成实体类及映射文件

1.在工程上添加hibernate支持,导入相关包,修改配置文件为如下: hibernate.cfg.xml文件 <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate

mybatis怎么自动生成实体类,Mapper配置文件和Dao接口

1.首先准备好jar包 https://github.com/mybatis/generator/releases下载MyBatis Generator 下载压缩包后,打开可以看到lib目录下有我们需要的jar包,添加到项目引用 2.和Hibernate逆向生成一样,这里也需要一个配置文件: generator.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfigu

如何通过java反射将数据库表生成实体类?

首先有几点声明: 1.代码是在别人的基础进行改写的: 2.大家有什么改进的意见可以告诉我,也可以自己改好共享给其他人: 3.刚刚毕业,水平有限,肯定有许多不足之处: 4.希望刚刚学习java的同学能有所启发. //这个是做转换的类,里面的DB只是封装了数据库的连接,大家可以用自己的,随意 package com.tt.util.gen.entity.tool; import java.io.File;import java.io.FileWriter;import java.io.IOExcep

T4模板_根据DB生成实体类

为了减少重复劳动,可以通过T4读取数据库表结构,生成实体类,用下面的实例测试了一下 1.首先创建一个项目,并添加文本模板: 2.添加 文本模板: 3.向T4文本模板文件添加代码: <#@ template language="C#" debug="True" hostspecific="True" #> <#@ assembly name="System.Data" #> <#@ assembly