首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hibernate逆向工程原理_java版本

Hibernate逆向工程原理_java版本

作者头像
Hongten
发布2018-09-13 15:15:54
4480
发布2018-09-13 15:15:54
举报
文章被收录于专栏:HongtenHongten

之前在一篇"Hibernate 逆向工程生成POJO类和映射文件"文章中,一位朋友提出了这样的问题:

源地址:http://www.cnblogs.com/hongten/archive/2011/07/08/2101481.html#2637768

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

这是我个人构思的想法:

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

如:

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

创建后的表结构如:

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

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

代码如下:

 1 /**
 2  * 
 3  */
 4 package com.b510;
 5 
 6 import java.sql.Connection;
 7 import java.sql.DriverManager;
 8 import java.sql.PreparedStatement;
 9 import java.sql.ResultSet;
10 import java.sql.SQLException;
11 
12 /**
13  * 
14  * @author hongten
15  * @date 2013-3-22
16  */
17 public class JDBCTest {
18     public static void main(String[] args) {
19         String driver = "com.mysql.jdbc.Driver";
20         String dbName = "spring";
21         String passwrod = "root";
22         String userName = "root";
23         String url = "jdbc:mysql://localhost:3308/" + dbName;
24         String sql = "desc person";
25 
26         try {
27             Class.forName(driver);
28             Connection conn = DriverManager.getConnection(url, userName,
29                     passwrod);
30             PreparedStatement ps = conn.prepareStatement(sql);
31             ResultSet rs = ps.executeQuery();
32             System.out.println(" Field     Type     Null     Key     Default     Extra");
33             while (rs.next()) {
34                 System.out.println("--------------------------------------------");
35                 System.out.println(" "+rs.getString(1) +"   "+ rs.getString(2) +"    "+ rs.getString(3) +"        "+ rs.getString(4) +"        "+ rs.getString(5) +"      "+ rs.getString(6) );
36             }
37 
38             // 关闭记录集
39             if (rs != null) {
40                 try {
41                     rs.close();
42                 } catch (SQLException e) {
43                     e.printStackTrace();
44                 }
45             }
46 
47             // 关闭声明
48             if (ps != null) {
49                 try {
50                     ps.close();
51                 } catch (SQLException e) {
52                     e.printStackTrace();
53                 }
54             }
55 
56             // 关闭链接对象
57             if (conn != null) {
58                 try {
59                     conn.close();
60                 } catch (SQLException e) {
61                     e.printStackTrace();
62                 }
63             }
64 
65         } catch (Exception e) {
66             e.printStackTrace();
67         }
68     }
69 
70 }

运行效果:

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

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

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

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

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

上面的观点都是Hongten个人的观点以及见解,如果有说的不好,或说错的地方,欢迎大家拍砖....

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013-03-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档