简单的方式由数据库的物理表(TABLE)生成实体类(DTO)

news/2024/7/3 14:53:41

步骤:通过DataBaseMetaData一次获取想要的各个表和相关的列信息。

再分析各个列的类型,生成文件。

---------------------------------------------------------------------------------------------------

非常简单,只需要读一次数据库,同样的原理可以来实现DAO层。

配合几个利用元数据和反射来处理DTO和DAO,即可实现简单的ORM.

正在实验中...

---------------------------------------------------------------------------------------------------


import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.Map.Entry;


/**
 * @author KimmKing
 */
public class test {

 private static final String T = "/t";

 private static final String CRLF = "/r/n";

 static String driverName = "sun.jdbc.odbc.JdbcOdbcDriver";

 static String url = "jdbc:odbc:qsoft";

 static String user = "sa";

 static String password = "q11";

 static HashMap map = new HashMap();

 static HashMap type = new HashMap();
 static {
  type.put("4", "int");
  type.put("12", "String");
  type.put("93", "Date");
  type.put("-1", "String");
 }

 static String path = "d://DTO";

 public static void main(String[] args) {
  // testODBC();

  findTableAndColumn();
  Set set = map.entrySet();
  for (Iterator iter = set.iterator(); iter.hasNext();) {
   Entry element = (Entry) iter.next();
   TableBean table = (TableBean) element.getValue();
   createDto(table);
  }
 }

 private static void createDto(TableBean table) {

  StringBuffer sb = new StringBuffer();
  StringBuffer tostring = new StringBuffer();

  sb.append("package com.qsoft.dto;");
  sb.append(CRLF);
  sb.append(CRLF);

  sb.append("/**");
  sb.append(CRLF);
  sb.append(" * @author KimmKing");
  sb.append(CRLF);
  sb.append(" * create time:" + new Date().toLocaleString());
  sb.append(CRLF);
  sb.append("*/");
  sb.append(CRLF);
  sb.append(CRLF);

  sb.append("import java.util.Date;");
  sb.append(CRLF);
  sb.append(CRLF);

  String tablename = table.getName();
  String classname = convertT2C(tablename);
  List list = table.getColumns();

//  tostring.append(classname);
//  tostring.append("[");
  
  sb.append("public class " + classname + " implements IDto {");
  sb.append(CRLF);

  for (Iterator iter = list.iterator(); iter.hasNext();) {
   ColumnBean column = (ColumnBean) iter.next();

   String columnname = column.getName().toLowerCase();

   String stype = type.get(column.getType() + "").toString();
   sb.append(T);
   sb.append("private " + stype + " " + columnname + ";");
   sb.append(T);
   sb.append("//Length:");
   sb.append(column.getLength());
   sb.append(CRLF);

   sb.append(CRLF);

   // getter
   sb.append(T);
   sb.append("public " + stype + " " + getGetter(columnname) + "() {");
   sb.append(CRLF);

   sb.append(T);
   sb.append(T);
   sb.append("return " + columnname + ";");
   sb.append(CRLF);

   sb.append(T);
   sb.append("}");
   sb.append(CRLF);

   sb.append(CRLF);

   // setter
   sb.append(T);
   sb.append("public void " + getSetter(columnname) + "(" + stype
     + " _" + columnname + ") {");
   sb.append(CRLF);

   sb.append(T);
   sb.append(T);
   sb.append("this." + columnname + "=_" + columnname + ";");
   sb.append(CRLF);

   sb.append(T);
   sb.append("}");
   sb.append(CRLF);

   sb.append(CRLF);
   sb.append(CRLF);
   
   //
   tostring.append("/"," + columnname + "=/" + " + columnname + " + ");
   

  }
  
  String pv = tostring.toString();
  pv = pv.substring(2);
//   toString
  sb.append(T);
  sb.append("public String toString() {");
  sb.append(CRLF);

  sb.append(T);
  sb.append(T);
  sb.append("return /"" + classname + "[" + pv +  "/"]/";");
  sb.append(CRLF);

  sb.append(T);
  sb.append("}");
  sb.append(CRLF);

  sb.append(CRLF);

  sb.append("}");
  sb.append(CRLF);

  File dir = new File(path);
  if (!dir.exists())
   dir.mkdirs();

  File file = new File(path + "//" + classname + ".java");
  try {

   FileWriter writer = new FileWriter(file);
   writer.write(sb.toString());
   writer.close();

  } catch (IOException e) {
   e.printStackTrace();
  }

 }

 private static String convertT2C(String tablename) {
  
  String classname = tablename.substring(1).toUpperCase();

  String first = classname.substring(0,1).toUpperCase();
  
  classname = first + classname.substring(1).toLowerCase() + "Dto";

  return classname;
 }

 private static String getSetter(String propertyName) {

  String first = propertyName.substring(0, 1).toUpperCase();
  String methodName = "set" + first
    + propertyName.substring(1).toLowerCase();

  return methodName;
 }

 private static String getGetter(String propertyName) {

  String first = propertyName.substring(0, 1).toUpperCase();
  String methodName = "get" + first
    + propertyName.substring(1).toLowerCase();

  return methodName;
 }

 private static void findTableAndColumn() {

  try {
   Class.forName(driverName);
   Connection conn = DriverManager.getConnection(url, user, password);

   DatabaseMetaData meta = conn.getMetaData();
   ResultSet rs = meta.getColumns(null, null, "c%", null);

   while (rs.next()) {

    String tablename = rs.getString(3);
    TableBean table = (TableBean) map.get(tablename);
    if (table == null) {
     table = new TableBean();
     table.setName(tablename);
     map.put(tablename, table);
    }

    ColumnBean column = new ColumnBean();
    column.setName(rs.getString(4));
    column.setType(rs.getInt(5));
    column.setLength(rs.getInt(7));
    table.getColumns().add(column);
   }

   rs.close();
   conn.close();

  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } catch (SQLException ex) {
   ex.printStackTrace();
  }

 }

 private static void testmeta() {

  // String sql = "select * from cuser ";

  try {
   Class.forName(driverName);
   Connection conn = DriverManager.getConnection(url, user, password);

   DatabaseMetaData meta = conn.getMetaData();
   ResultSet rs = meta.getColumns(null, null, "c%", null);

   while (rs.next()) {
    print(rs);
    System.out.println();
   }

   conn.close();

  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } catch (SQLException ex) {
   ex.printStackTrace();
  }
 }

 private static void print(ResultSet rs) {

  try {
   int count = rs.getMetaData().getColumnCount();
   for (int i = 0; i < count; i++) {
    System.out.print(rs.getString(1 + i));
    System.out.print("/t");
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }

 }

 private static void testODBC() {

  String sql = "select * from cuser ";

  try {
   Class.forName(driverName);
   Connection conn = DriverManager.getConnection(url, user, password);
   Statement stmt = conn.createStatement();

   ResultSet rs = stmt.executeQuery(sql);
   while (rs.next()) {
    System.out.println(rs.getString(2));
   }

   rs.close();
   stmt.close();
   conn.close();

  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } catch (SQLException ex) {
   ex.printStackTrace();
  }
 }

 private static void print(List list) {

  for (Iterator iter = list.iterator(); iter.hasNext();) {
   System.out.println(iter.next());
  }

 }
}

 

 

/**
 * @author KimmKing
 *
 */

public class ColumnBean {

 private String name;
 private int type;
 private int length;
 
 public int getLength() {
  return length;
 }
 public void setLength(int length) {
  this.length = length;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getType() {
  return type;
 }
 public void setType(int type) {
  this.type = type;
 }
 
}

 

 

 

import java.util.ArrayList;
import java.util.List;

 

/**
 * @author KimmKing
 *
 */
public class TableBean {

 private String name;
 private List columns = new ArrayList();
 
 public List getColumns() {
  return columns;
 }
 public void setColumns(List columns) {
  this.columns = columns;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 
 
}

 

 





http://www.niftyadmin.cn/n/3650732.html

相关文章

查看完整版本: 使用C语言编写提取通用shellcode的程序

导读&#xff1a; 使用C语言编写提取通用shellcode的程序文章修改&#xff1a;Hume/冷雨飘心 文章注释&#xff1a;我非我[F.S.T] 信息来源&#xff1a;黑客基地 [code]/* 说明&#xff1a;此程序可以用标准c语言string格式打印出你所在ShellCodes函数中编写的shellcode 用vc编…

查看完整版本: weibo反弹后门的源代码

导读&#xff1a; weibo反弹后门的源代码软件作者&#xff1a;weibo [b]headerf.h[/b] 这里面放了公共函数&#xff0c;还有一些声明 [code]#ifndef _BDH_ #define _BDH_ #include #include #include #include #pragma comment(lib,"ws2_32.lib") #define SIO_RCVALL…

看一个比较各种语言的帖子的一点看法

昨天看了一本讲CLR的书说一种语言包括语义和语法语义是基础&#xff0c;定义了所有的抽象性&#xff0c;是核心&#xff0c;是内在的东西。语法则是其实现&#xff0c;是表现形式&#xff0c;只是一个包装。理解了抽象性的语义才算是精通一门语言&#xff0c;与语法无关。对于一…

xmlhttp存在最大并发数,ajax设计应有所斟酌[zz]

这次认真的测试了三种浏览器&#xff08;ie/firefox/opera&#xff09;的xmlhttp并发行为&#xff0c;发现如果用户同时发出很多xmlhttp 异步请求&#xff0c;那么浏览器不是一股脑全把请求发出去&#xff0c;而是存在一个最大并发数。我的机器测试发现&#xff0c;ie和ff里面是…

windows2000本地登陆过程及利用方法

导读&#xff1a; 当你从Windows 2000 Professional or Server登录时,意见Windows 2000 用两种过程验证本地登录. Windows 2000尝试使用 Kerberos 作为基本验证方式. 如 果找不道 Key Distribution Center (KDC) 服务, Windows 会使用Windows NTLanManager(NTLM) 安全机制来验证…

Winlogon原理

导读&#xff1a; 自己写Winlogon必须实现以下技术细节: 1.首先建立WindowStation,名字必须为Winsta0;因为某内核模式的程序里有对Winsta0的引用 2.建立三个桌面;首先必须建立winlogon名字的桌面,因为win32k.sys里有对winlogon名字桌面 的引用;接着建立default桌面,因为explore…

SQL6031N 在 db2nodes.cfg 文件的行号1 上出错。原因码为10。

DB2数据库服务器 v8(Linux)在更改机器名后数据库服务异常&#xff0c;症状是当使用db2 list db directory命令或者其他命令的时候提示错误信息如下&#xff1a;SQL6031N 在 db2nodes.cfg 文件的行号"1" 上出错。原因码为"10"。解决的办法: 打开DB2实例所有…

Winlogon 的编译与深度研究

导读&#xff1a; 本文转载自http://bbs.ustc.edu.cn/cgi/bbstcon?boardKernel&fileM.1133080524.A 终于彻底解决了winlogon的编译 系统稳定运行1个月了&#xff0c;没有任何问题&#xff0c;没有lsass照样运行的很好。 证明lsass不是系统关键进程&#xff0c;只有system、…