hibernate框架内部采用xml、java reflection等技术来实现对象/关系映射功能。
它内部封装了jdbc访问数据库的操作。
hibernate的核心类:
SessionFactory类是对应单一数据库的、已编译映射文件的、线程安全的、不可变的高速缓存。是产生Session的工厂类。
Session接口负责保存,更新,删除,加载和查询对象,其中封装了一个JDBC连接。
Transaction对象是由Session产生的。生命周期比Session短,一个Session周期内可以有多个Transaction对象。Connection Provider主要生产与数据库建立了连接的JDBC对象,同时作为数据库连接的缓存池。
工作流程:
本实例是在struts实现的登录系统基础上增加hibernate功能
项目结构图:
修改的有业务逻辑类:
package com.qdu.struts.BO;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import org.hibernate.Transaction;
import com.qdu.hibernate.User;
import com.qdu.hibernate.UserDAO;
public class LoginBO {
public boolean validate(String username, String password) {
// Connection conn = null;
// try {
// Class.forName("org.gjt.mm.mysql.Driver");
// String url = "jdbc:mysql://localhost:3306/junit";
// conn = DriverManager.getConnection(url,"root","root");
// Statement stmt = conn.createStatement();
// String sql = "select * from usertable where name='"+username+"' and password = '"+password+"'";
//
// ResultSet rs = stmt.executeQuery(sql);
// if(rs.next()){return true;}
// else return false;
//
//
// } catch (ClassNotFoundException e) {
// e.printStackTrace();
// } catch (SQLException e) {
// e.printStackTrace();
// }
//
// return false;
// --------使用hibernate时---------------
// 按照JAVA EE规范的规定,一个标准的
UserDAO dao = new UserDAO();
Transaction tx = dao.getSession().beginTransaction();
User user = new User();
user.setName(username);
user.setPassword(password);
List list = dao.findByExample(user);
tx.commit();
if(list.size()>0) return true;
else return false;
}
}
hibernate配置文件hibernate.cfg.xml:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property name="connection.username">root</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/junit
</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="myeclipse.connection.profile">
org.gjt.mm.mysql.Driver
</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">
org.gjt.mm.mysql.Driver
</property>
<property name="show_sql">true</property>
<mapping resource="com/qdu/hibernate/User.hbm.xml" />
</session-factory>
</hibernate-configuration>
对象映射文件User.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">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.qdu.hibernate.User" table="usertable" catalog="junit">
<id name="id" type="java.lang.Integer">
<column name="Id" />
<generator class="increment" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="256" />
</property>
<property name="password" type="java.lang.String">
<column name="password" />
</property>
</class>
</hibernate-mapping>
程序源码见附件: