1.Hibernate是一个优秀的 Java 持久化层解决方案,是当今主流的 对象-关系 映射工具。
2.什么是 持久化?
JDBC就是一种持久化机制。将程序数据直接保存成文本文件也是持久化机制的一种实现。但我们常用的是将程序数据保存到数据库中。
在 MVC 三层结构中,DAO层(数据访问层)有时候也成为持久化层。
[singlepic id=80 w=320 h=240 float=none]
3.什么是 对象-关系 映射?
我们多以面向对象的方式组织程序,瞬时的数据也多以对象的形式存在,而持久的数据多保存在关系型数据库中。所以,在通常的情况下,持久化将要完成的操作就是把对象保存到关系型数据库中,或者把关系型数据库中的数据读取出来以对象的形式封装。
基于以上所述:我们的持久化工作主要在 O(Object) – R(Relational Database) 之间完成。
Hibernate 就是在 JDBC 的方式上进行封装,以简化 JDBC 方式繁琐的编码工作。是一个轻量级的优秀的 ORM 实现。它能很大程度地简化 DAO 层的编码工作。
[singlepic id=81 w=320 h=240 float=none]
4.使用 Hibernate 的基本步骤
Hibernate 的使用主要有 “3个准备,7个步骤”
- 准备1:导入需要的 jar 包
- http://www.hibernate.org 下载
- MyEclipse 集成了对 Hibernate 的支持,可以直接引用
 
- 准备2:添加配置文件 — hibernate.cfg.xml
<session-factory> <!-- 配置数据库连接 --> <property name="connection.url"> jdbc:mysql://localhost:3306/users </property> <property name="connection.username">root</property> <property name="connection.password">1111</property> <property name="connection.driver_class"> com.mysql.jdbc.Driver </property> <!-- 数据库'方言'支持数据库的种类 --> <property name="dialect"> org.hibernate.dialect.MySQLDialect </property> <!-- 属性:运行时后台显示SQL语句 --> <property name="show_sql">true</property> <!-- ORM 映射文件 配置 --> <mapping resource="cn/net/royakon/entity/User.hbm.xml" /> </session-factory>
- 实体类注意事项:
 实现 implements java.io.Serializalbe 接口
 添加默认构造方法
- 添加 User.hbm.xml 映射文件
package cn.net.royakon.entity;
public class User implements java.io.Serializable {
	private Integer userId;
	private String userName;
	private String userPass;
	public User() {
	}
	public User(Integer userId) {
		this.userId = userId;
	}
	public User(Integer userId, String userName, String userPass) {
		this.userId = userId;
		this.userName = userName;
		this.userPass = userPass;
	}
	public Integer getUserId() {
		return this.userId;
	}
	public void setUserId(Integer userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return this.userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getUserPass() {
		return this.userPass;
	}
	public void setUserPass(String userPass) {
		this.userPass = userPass;
	}
}
<hibernate-mapping>
	<!-- 实体类-数据库表 的映射 -->
    <class name="cn.net.royakon.entity.User" table="user" catalog="users">
    	<!-- 主键 映射 -->
        <id name="userId" type="java.lang.Integer">
            <column name="userId" />
            <!-- 主键生成方式  identity-自动生成 assigned-程序中指定 根据数据库不同参数有可能不同 -->
            <generator class="identity" />
        </id>
        <!-- 属性-字段 映射 -->
        <property name="userName" type="java.lang.String">
            <column name="userName" length="50" />
        </property>
        <property name="userPass" type="java.lang.String">
            <column name="userPass" length="50" />
        </property>
    </class>
</hibernate-mapping>
[singlepic id=82 w=320 h=240 float=none]
	try {
		//步骤1.读取配置文件
		Configuration cfg=new Configuration().configure();
		//步骤2.创建 SessionFactory 
		SessionFactory sf=cfg.buildSessionFactory();
		//步骤3.打开 Session
		Session s=sf.openSession();
		//步骤4.开始一个事务
		Transaction t=s.beginTransaction();
		//步骤5.持久化操作
		User user=new User();
		user.setUserName("Test");
		user.setUserPass("Test");
		s.save(user);
		//步骤6.提交事务
		t.commit();
	} catch (Exception e) {
		if (null!=t){t.rollback();}
		e.printStackTrace();      
    } finally {
    	// 7、关闭Session
		s.close();
    }
5. Hibernate 实现 数据操作
- 根据主键查询
- 更新数据
- 删除数据
User user = (User)session.get(User.class,id);
User user = this.get(59);
user.setUserName("new Name");
session.update(user);
User user = this.(59); session.delete(user);
Categories: 网页编程