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生成实体类-手工写法(一)的更多相关文章
- (转)使用myeclipse生成实体类和hibernate映射文件
转至:http://blog.sina.com.cn/s/blog_9658bdb40100uiod.html 1.下载并安装myeclipse,如果已经安装,则忽略该步骤; 2.打开myeclips ...
- MyEclipse从数据库反向生成实体类之Hibernate方式 反向工程
前文: hibernate带给我们的O/RMapping思想是很正确的,即从面相对象的角度来设计工程中的实体对象,建立pojo,然后在编写hbm.xml映射文件来生成数据表.但是在实际开发中,往往我们 ...
- 使用MyEclipse生成实体类和Hibernate映射文件
1.打开MyEclipse DataBase Explorer. 如上图,点击图中2便可切换到MyEclipse DataBase Explorer,若没有该图标,则点击图中1,便可选择MyEclip ...
- J2EE进阶(十五)MyEclipse反向工程实现从数据库反向生成实体类之Hibernate方式
J2EE进阶(十五)MyEclipse反向工程实现从数据库反向生成实体类之Hibernate方式 反向工程又称逆向工程. 开发项目涉及到的表太多,一个一个的写JAVA实体类很是费事.MyEcl ...
- 在Intellij IDEA下通过Hibernate逆向生成实体类
前言:在IDEA中,通过相关插件,可以利用Hibernate逆向生成数据表对应的实体类.具体操作及注意事项见本篇随笔. 1.创建一个基于maven的hibernate工程.并在工程中添夹hiberna ...
- eclipse逆向生成hibernate的实体类(注解和配置文件)
eclipse从数据库逆向生成Hibernate实体类(注解和配置文件) 分类: hibernate 数据库 java 2011-10-22 21:28 2915人阅读 评论(8) 收藏 举报 做项目 ...
- idea hibernate jpa 生成实体类
0,添加mysql数据库连接 1,生成个hibernate.cfg.xml 2,打开Persisitence 3,Import Databases Schema 4,选择表生成实体类
- Eclipse使用hibernate插件反向生成实体类和映射文件
一般dao层的开发是这样的,先进行数据库的设计,什么E-R图之类的那些,然后选择一款数据库产品,建好表.最后反向生成Java实体和映射文件,这样可以保证一致性和便捷性. 如果用myeclipse,逆向 ...
- MyEclipse从数据库反向生成实体类通过Hibernate的方式----mysql数据库实例
1.我们通过DB与数据库建立连接 2.建立web工程,构建Hibernate框架 3.通过table生成实体类
随机推荐
- HDU 2553 N皇后问题(深搜DFS)
N皇后问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- ROWID面试题-删除表中重复数据(重复数据保留一个)
/* ROWID是行ID,通过它一定可以定位到r任意一行的数据记录 ROWID DNAME DEPTNO LOC ------------------ ------------------------ ...
- js面向对象写页面
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- SQLServer存储过程返回值总结
1. 存储过程没有返回值的情况(即存储过程语句中没有return之类的语句) 用方法 int count = ExecuteNonQuery(..)执行存储过程其返回值只有两种情况 (1)假如通 ...
- C# 标签(条码)的打印与设计(二)
上一篇说到条码的打印,主要是通过读取模板定义文件(XML文件),然后结合从数据库中读取的动态数据结合而产生条码.下面主要说一下如何设计这个条码模板.设计过程也很简单,只需要简单的拖拉即可.然后点击小箭 ...
- 分布式中使用redis进行session共享
摘要 在asp.net web中,session经常用来存储当前用户信息,或者通过session进行登录权限的验证.如果是一台服务器,session的使用没问题,如果使用nginx等实现反向代理,将站 ...
- 在Windows Phone项目中调用C语言DLL
在Windows Phone项目中调用C语言写的DLL 最近接到一个需求,需要在WP里调用一个C语言写的DLL,并且说Android和iOS都可以,问我WP是否可以这样? 我说我调研一下,就有了下面的 ...
- Mac 在启动eclipse时 Failed to load JavaHL Library解决方法
在Mac 10.9.1系统里, 在Eclipse中安装svn的插件,出现如下提示 方法一: 1.根据提示进入链接 http://subclipse.tigris.org/wiki/JavaHL 2. ...
- Derby安装,创建数据库,在Java程序中使用Derby
1,下载并安装Derby: 下载地址:http://db.apache.org/derby /derby_downloads.html,下载最新版本. 我用的是10.5.3.0. 解压缩到任意文件夹, ...
- [17] 楼梯(Stairs)图形的生成算法
感觉这图形怎么看怎么像搓衣板. 顶点数据的生成 bool YfBuildStairsVertices ( Yreal width, Yreal length, Yreal height, Yuint ...