5月29日,多云。“谢却海棠飞尽絮,困人天气日初长”。
大多数架构,都是不同乏味平淡概念的组合碰撞产生的裂变性奇观。若以人情世故来看乏味概念的相逢,有的是让人叫绝的天作之合,有的是叫人动容的邂逅偶遇,有的是令人击节的相见恨晚。当Java类遇到了数据库表,产生了Hibernate,极大地缩短了处理SQL和JDBC上的开发时间。
下面,给出hibernate 3.6.10和hibernate 4.3.5两个版本的入门实例,看看这个蛰伏在数据库背后的庐山真面目。
为什么用这两个版本,hibernate 3.6.10是目前hibernate 3.X的最后版本,hibernate 4.3.5是目前最新版本。
1、下载Hibernate
hibernate 3.6.10的下载地址:http://sourceforge.net/projects/hibernate/files/hibernate3/
hibernate 4.3.5的下载地址:http://sourceforge.net/projects/hibernate/files/hibernate4/4.3.5.Final/hibernate-release-4.3.5.Final.zip/download
MySQL的jdbc驱动jar包。下载地址:http://dev.mysql.com/downloads/connector/j/5.0.html
2、建立Java Project( 使用hibernate 3.6.10)
使用Eclipse新建一个名为HibernateApp01的工程,把下载的hibernate-distribution-3.6.10.Final-dist.zip解压。Add to Build Path—将如下依赖的jar包加入工程依赖中,包括:
hibernate-distribution-3.6.10.Final\hibernate3.jar
hibernate-distribution-3.6.10.Final\lib\jpa\hibernate-jpa-2.0-api-1.0.1.Final
hibernate-distribution-3.6.10.Final\lib\required下的所有jar包
mysql-connector-java-5.0.8\mysql-connector-java-5.0.8-bin.jar
一股脑的加入这么多依赖包,是为了避免编译一下子出太多错误,影响情绪
3、创建MySQL数据库
创建名为hib的数据库,并用如下SQL创建userinfo表;
/*
MySQL Data Transfer
Source Host: 127.0.0.1
Source Database: hib
Target Host: 127.0.0.1
Target Database: hib
Date: 2014/5/30 22:39:02
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for userinfo
-- ----------------------------
CREATE TABLE `userinfo` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(100) default '',
`password` varchar(100) default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records
-- ----------------------------
4、创建POJO类UserInfo
package edu.eurasia.hib;
public class UserInfo {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
5、编写对象关系映射文件UserInfo.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!--类和表之间的关联-->
<class name="edu.eurasia.hib.UserInfo" table="userinfo">
<!--类对象的主键和表的主键的关联-->
<id name="id" type="integer">
<column name="id" />
<!--指明主键的自增长类型-->
<generator class="identity"/>
</id>
<!--以下为普通字段的关联-->
<property name="username" type="string">
<column name="username" length="100" />
</property>
<property name="password" type="string">
<column name="password" length="100" />
</property>
</class>
</hibernate-mapping>
该文件存放的是对象关系映射的逻辑,包括表和字段的对应关系。当操作对象时,该文件通过Java反射机制产生的方法,会把对象的方法转换为关系的方法。
6、添加hibernate.cfg.xml配置文件
<?xml version='1.0' encoding='gb2312'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--配置数据库驱动-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!--配置数据库网络连接的url-->
<property name="hibernate.connection.url">jdbc:mysql://localhost/hib</property>
<!--配置数据库网络连接的用户名,默认一般为root-->
<property name="hibernate.connection.username">root</property>
<!--配置数据库网络连接的密码-->
<property name="hibernate.connection.password">root</property>
<!--配置数据库网络连接池的大小-->
<property name="hibernate.connection.pool.size">20</property>
<!--后台是否显示sql,开发时为true,运行时为false-->
<property name="hibernate.show_sql">true</property>
<!-- 设置JDBC的隔离级别-->
<property name="hibernate.connection.isolation">2</property>
<property name="hibernate.format_sql">true</property>
<property name="jdbc.fetch_size">50</property>
<property name="jdbc.batch_size">25</property>
<property name="jdbc.use_scrollable_resultset">false</property>
<property name="connection.useUnicode">true</property>
<!--编码方式,最好是utf-8,用gb2312有的字符不全-->
<property name="connection.characterEncoding">UTF-8</property>
<!--数据库方言,每个数据库都有方言,hibernate已经为大多数数据库指明了方言-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="edu/eurasia/hib/UserInfo.hbm.xml" />
</session-factory>
</hibernate-configuration>
该文件为核心文件,初学者尽量不要改变其名称。
7、建立测试类HibTest.java
package edu.eurasia.hib;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class HibTest {
public static void main(String[] args) {
SessionFactory sessions = new Configuration().configure()
.buildSessionFactory();
Session session = sessions.openSession();
Transaction tx = null;
try {
// 开始事务
tx = session.beginTransaction();
// 给对象设定值
UserInfo u = new UserInfo();
u.setUsername("张大千");
u.setPassword("123456");
System.out.println("开始插入数据到数据库……");
// 保存数据到数据库
session.save(u);
// 结束事务
tx.commit();
tx = null;
System.out.println("恭喜你,第一个hibernate程序运行成功!");
} catch (HibernateException e) {
e.printStackTrace();
if (tx != null) {
tx.rollback();
}
} finally {
session.close();
}
}
}
8、运行结果
查看数据库userinfo表中已经增加一条记录。
工程结构图如下:
小提示:
xml文件自动提示功能,如果UserInfo.hbm.xml和hibernate.cfg.xml不能自动提示时,按如下操作:
(1)打开方式不正确,在xml文件上点右键-->openWith-->选择XML Editor就可以了。
(2)将项目中用到的 hibernate3.jar 解压缩,找到解压缩后的 org 文件下的 hibernate 文件下的 hibernate-mapping-3.0.dtd 文件。
(3)eclipse -> Window -> Preferences -> XML -> XML Catalog,选择 XML Catalog Entries 的 Add... 按钮,在弹出的 Add XML Catalog Entry 对话框里,Location 里选择第二步里得到的 hibernate-mapping-3.0.dtd,Key Type 选择 URI,Key 里输入XML文件里得到的http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd。OK。hibernate-configuration-3.0.dtd同理。