您的位置:首页 > 编程语言 > Java开发

Hibernate逆向工程原理_java版本

2013-03-22 01:07 253 查看
之前在一篇"Hibernate 逆向工程生成POJO类和映射文件"文章中,一位朋友提出了这样的问题:





源地址:/article/4667476.html#2637768

这几天闲着没事儿,就想了一下hibernate的逆向工程的实现原理。

这是我个人构思的想法:

1.我们在数据库中建立一个我们自己的表;

如:

CREATE TABLE `person` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) COLLATE utf8_bin NOT NULL,
`age` int(11) DEFAULT NULL,
`sex` varchar(2) COLLATE utf8_bin DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;


创建后的表结构如:



2,我们在数据库控制台用“desc person”可以查看person表的结构:



3.我们用代码实现这样的查询功能:

代码如下:

/**
*
*/
package com.b510;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
*
* @author hongten
* @date 2013-3-22
*/
public class JDBCTest {
public static void main(String[] args) {
String driver = "com.mysql.jdbc.Driver";
String dbName = "spring";
String passwrod = "root";
String userName = "root";
String url = "jdbc:mysql://localhost:3308/" + dbName;
String sql = "desc person";

try {
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, userName,
passwrod);
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
System.out.println(" Field     Type     Null     Key     Default     Extra");
while (rs.next()) {
System.out.println("--------------------------------------------");
System.out.println(" "+rs.getString(1) +"   "+ rs.getString(2) +"    "+ rs.getString(3) +"        "+ rs.getString(4) +"        "+ rs.getString(5) +"      "+ rs.getString(6) );
}

// 关闭记录集
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();
}
}

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

}


运行效果:



可以发现,运行出来的效果和我们在控制台运行的效果是一样的。所以我们可以用代码实现获取表结构,这一步尤为关键!!!

4.我们可以用代码获取表的结构,那么我们就可以知道一个表的所有信息,如:

表里面的所有字段,字段的类型,长度,是否为空,是否为主键....很多信息,我们可以提取其中有用的信息,我们只要在freemarker

或velocity模板引擎中创建好我们的模板这样打工就可以告成...

5.使用freemaker或者velocity模板引擎制作模板的时候,我想在生成表对应的实体类和xml配置文件的时候需要注意的是表与表的关联关系....

上面的观点都是Hongten个人的观点以及见解,如果有说的不好,或说错的地方,欢迎大家拍砖....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: