HibernateHibernate是一個開放源代碼的對象關係映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫。 Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成數據持久化的重任。
下面通過在myeclipse中新建java web項目來完成第一個Hibernate 項目,因爲在myeclipse中增加了對Hibernate 支持,所以可以很快速的構建一個Hibernate項目,這個項目完成如下功能,用戶通過jsp提交註冊信息,包括姓名,年齡和地址。
首先任意新建一個java web項目,例如新建HibernateTest,之後完成java web項目的各種配置。
然後選中我們新建的項目,點擊myeclipse 進行如圖的選擇
然後出現如下對話框,我們需要hibernate的包放入到web項目的lib文件夾中,然後點擊next
這一步我們在src目錄新建了一個hibernate.cfg.xml文件,這是hibernate中最爲重要的配置文件,其中包含了與數據庫相連接的基本信息,之後繼續點擊下一步
這一步中可以完成對數據庫的相關配置,但是在這裏我們先不寫,等會可以直接操作hibernate.cfg.xml文件來配置數據,所以不要勾選specify database connection details,點擊下一步
在這一步我們同樣不要勾選create sessionFactory class ,我們會在後面來創建這個類,點擊Finish完成。到這裏基本的項目設置就算完成了,下面我們來其他的配置
Hibernate既然是要與數據庫打交道,那麼就需要告訴Hibernate與其交互的數據庫的基本信息,打開src目錄下面的hibernat.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">
<hibernate-configuration>
<session-factory>
<property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="show_sql">true</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<mapping resource="User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
相信的其中代碼的意思大家都能夠明白,其中show_sql表示在每次調用hibernate的api的時候,如果有sql語句的生成,那麼就在控制檯打印出sql語句,dialect屬性表示採用Hibernate中對哪個數據的優化方式來優化數據庫,這裏使用的是mysql,那麼就採用了org.hibernate.dialect.MySQLDialect。
然後在src目錄下新建一個com.value.bean包,在其中新建一個javabean User,在Hibernate中這個javabean被稱爲持久化對象。User代碼如下
public class User {
private String name;
private String address;
private int age;
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public User(){
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
然後再src目錄下,新建一個xml文件,名稱爲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">
<hibernate-mapping>
<class name="com.hibernatetest.domain.User" table="users">
<id name="id" column="id" type="int">
<generator class="increment"></generator>
</id>
<property name="name" column="name" type="string"></property>
<property name="address" column="address" type="java.lang.String"/>
<property name="age" column="age" type="java.lang.Integer"/>
</class>
</hibernate-mapping>
通過這個文件,我們就是實現了pojo(持久化對象)與數據庫中的表的對應關係,class 標籤name屬性表示對應的java類,table表示對應的數據表, property標籤的name 都是java類的屬性,需要注意區別大小寫,column表示表中的列,type即爲數據的類型。
其中有個id屬性,這個屬性用來標識java類與表中的每一條記錄的唯一對應關係,其子標籤generator可以在博客中查看詳細的解釋。
準備工作都做好了,現在就需要來真正的操作數據庫了,Hibernate操作數據庫表,是通過Session來完成的,那麼session的實例又是通過sessionFactory來完成的,那麼現在我們就需要創建一個sessionFactory。
新建一個HibernateSessionFacotry類,代碼如下
package com.hibernatetest.util;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class HibernateSessionFactory {
private static SessionFactory factory ;
static
{
factory = new Configuration().configure().buildSessionFactory();
}
public static Session openSession()
{
Session session = factory.openSession();
return session;
}
public static void closeSession(Session session)
{
if(session != null)
{
session.close();
}
}
}
在靜態代碼塊裏面我們構建了一個Configuration對象,調用了configure方法這個方法返回了一個Configuration對象,這個對象其中就包含了我們在hibernate.cfg.xml配置的各種數據的信息,然後將Configuration對象綁定到了SesssionFactory上(調用了buildSessionFactory方法),這樣就獲取了與我們定義數據庫相關的sessionfactory對象,通過這個對象可以獲取session來完成數據的操作。
下面是UserDao的代碼
public class UserDao {
private Session session;
public UserDao(Session session)
{
this.session = session;
}
public void saveUser(User user)
{
Transaction tx = session.beginTransaction();
try
{
tx.begin();
session.save(user);
tx.commit();
}
catch(Exception ex)
{
tx.rollback();
}
finally
{
session.close();
}
}
需要注意的事情是,在使用session的時候,一定要將事務打開,否則無法完成數據的操作。
下面是用來做測試的Servlet代碼
public class addServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int id = Integer.valueOf(request.getParameter("id"));
String username = request.getParameter("username");
int age = Integer.valueOf(request.getParameter("age"));
String address = request.getParameter("address");
User user = new User();
user.setId(id);
user.setAddress(address);
user.setName(username);
user.setAge(age);
Session session = HibernateSessionFactory.openSession();
UserDao dao = new UserDao(session);
dao.saveUser(user);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
這樣我們就完成第一個Hibernate的項目
文章系原創,轉載請註明