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生成实体类
随机推荐
- java值和地址值传递、字符串常量池的理解
#java值和地址值传递的理解: - 基本数据类型和基本数据类型的封装类都是:值传递 * 形式参数的改变不会影响实际参数的改变(相当于将值复制一份传递给形参,自身没做任何改变) - 引用数据 ...
- 精心收集整理的SQL Server 2014/2012/2008/2005/2000简体中文企业版下载地址
经常在网上看到有同学费尽心思的找SQL server数据库各版本的下载地址,看到别人的求助贴就不自觉的想去帮助他们,但是一个一个去帮助又不太现实,毕竟个人精力有限,既然大家有需求,那么笔者就本着乐于分 ...
- 国产Linux滋生腐败
回想过去,2002年12月11日至12日,信息产业部与科技部联合主办"Linux软件与应用猜測研讨会".影响中国IT业的重要人士,包含政府决策者.学界权威.主要Linux推动厂商等 ...
- MVC动态添加文本框,后台使用FormCollection接收
在"MVC批量添加,增加一条记录的同时添加N条集合属性所对应的个体"中,对于前台传来的多个TextBox值,在控制器方法中通过强类型来接收.使用FormCollection也可以接 ...
- MEF(Managed Extensibility Framework)使用全部扩展组件
MEF(Managed Extensibility Framework),所在命名空间是System.ComponentModel.Composition.dll.简单来说,MEF是将符合约定(一般是 ...
- EXC_BAD_ACCESS(code=2,address=0xcc 异常解决 及 建议不要在子线程中刷新界面
iOS 上不建议在非主线程进行UI操作,在非主线程进行UI操作有很大几率会导致程序崩溃,或者出现预期之外的效果. 我开始不知道这一点,在子线程中进行了弹窗操作,结果程序就出问题了! 报的错误是(EXC ...
- UI----------------Toggle
Is On:是否已经勾选上了 Toggle Transition:渐变效果 Graphic:勾选标志的图,就是那个勾 Group:多选组 On Value Changed:当选项改变时,触发事件 多选 ...
- python接口自动化26-参数关联和JSESSIONID(上个接口返回数据作为下个接口请求参数)
前言 参数关联是接口测试和性能测试最为重要的一个步骤,很多接口的请求参数是动态的,并且需要从上一个接口的返回值里面取出来,一般只能用一次就失效了. 最常见的案例就是网站的登录案例,很多网站的登录并不仅 ...
- mybatis 模糊查询和<![CDATA[ ]]>的作用
1. sql中字符串拼接 SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT('%', #{text}), '%'); 2. 使用 ${...} ...
- glassfish3 读不到web程序的jar包
现在项目中用到glassfish3,部署了一个web程序.可以访问到首页,但是在登陆的时候提示找不到数据库的驱动包.这个jar包我是放在web-inf/lib下的.但是glassfish就是报找不到j ...