Hibernate逆向工程原理_java版本

之前在一篇"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个人的观点以及见解,如果有说的不好,或说错的地方,欢迎大家拍砖....

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java架构师历程

jdbc简单增删改查代码

Class.forName(“com.mysql.jdbc.Driver”).newInstance(); 我们链接的是MYSQL数据库,所以需要一个MYSQL...

3191
来自专栏java一日一条

JDBC为什么要使用PreparedStatement而不是Statement

PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatement(...

713
来自专栏最高权限比特流

JDBC为什么要使用PreparedStatement而不是Statement

1492
来自专栏架构师小秘圈

高效sql性能优化极简教程

一,sql性能优化基础方法论 对于功能,我们可能知道必须改进什么;但对于性能问题,有时我们可能无从下手。其实,任何计算机应用系统最终队可以归结为: cpu消耗 ...

5325
来自专栏Java帮帮-微信公众号-技术文章全总结

JDBC基础入门(2)

其他关于C3P0的详细内容, 可参考C3P0主页. HikariCP HikariCP是另一款高性能/”零开销”/高品质的数据库连接池,据测试,其性能优于C3P...

2767
来自专栏Ryan Miao

sqlite - java 初学

进来准备使用一种embedded database,即嵌入式数据库,方便随项目本地存储。目前学习打算是sqlite和H2。 document:http://ww...

3269
来自专栏Java帮帮-微信公众号-技术文章全总结

JavaWeb05- 就这几步轻松操作MySQL数据库!

mysql-1 一.数据库 1. 数据库介绍 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以通过sql语句对数据库中...

2695
来自专栏nodejs后端

nodejs 封装mysql

以上是在线运行项目,特意分享,网上大多都是2015年的文章,且没有新的方法,可以查看官方文档 mysql - npm

3757
来自专栏肖洒的博客

JDBC编程

安装驱动,下载mysql-connector-java。 将mysql-connector-java-5.1.42-bin.jar包拷到WEB-INF目录下。

922
来自专栏java达人

使用jdbc连接mysql

image.png JDBC连接MYSQL数据库: package cn.outofmemory.test;import java.sql.Connec...

2267

扫码关注云+社区

领取腾讯云代金券