Hibernate 之菜鳥入門

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的項目


文章系原創,轉載請註明


發佈了31 篇原創文章 · 獲贊 31 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章