Hibernate總結

1.什麼是ORM?爲什麼使用Hibernate?

對象關係映射;爲了少寫和底層數據庫相關的sql語句,方便程序的維護、修改,提高跨平臺性和可擴展性。Hibernate是Java領域內的一款技術成熟穩定的ORM框架

2.Hibernate開發的基本步驟?

1)新建項目,導入Hibernate必須的架包(點擊打開鏈接編寫配置文檔hibernate.cfg.xml;


下面是配置MySql數據庫的示例:

<!--該文件的開頭信息,對Hibernate而言,該類文件基本都這麼開頭:)-->  
     <?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節點就夠了,除非我們中間使用了多個數據庫-->  
     <session-factory>  
     <!--用戶名 -->  
     <property name="connection.username">root</property>  
     <!--url信息 -->  
     <property name="connection.url">jdbc:mysql://localhost:3306/webases</property>  
     <!--數據庫方言信息-->  
     <property name="dialect">org.hibernate.dialect.MySQLDialect</property>  
     <!--密碼 -->  
     <property name="connection.password">root</property>  
     <!--數據庫驅動信息 -->  
     <property name="connection.driver_class">com.mysql.jdbc.Driver</property>  
     <!--指定Hibernate映射文件路徑 -->  
     <mapping resource="com/Hibernate/test_products.hbm.xml" />  
     </session-factory>  
     </hibernate-configuration>   

2)編寫實體類。注意:每一個實體類都要與數據庫中的一張表一一對應,實體類的編寫要遵循JavaBean的要求;

1)、必須是公有類。

2)、提供共有的不帶參數的默認構造方法。

3)、屬性私有。

4)、屬性setter/getter封裝,以及toString方法。

import java.util.Date;


public class Students {


	private int sid;//學號
	private String sname;//姓名
	private String gender;//
	private String Address;//地址
	private Date birthday;//生日
	
	
	public int getSid() {
		return sid;
	}


	public void setSid(int sid) {
		this.sid = sid;
	}


	public String getSname() {
		return sname;
	}


	public void setSname(String sname) {
		this.sname = sname;
	}


	public String getGender() {
		return gender;
	}


	public void setGender(String gender) {
		this.gender = gender;
	}


	public String getAddress() {
		return Address;
	}


	public void setAddress(String address) {
		Address = address;
	}


	public Date getBirthday() {
		return birthday;
	}


	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}


	public Students(){
		
	}


	public Students(int sid, String sname, String gender, String address, Date birthday) {
		this.sid = sid;
		this.sname = sname;
		this.gender = gender;
		Address = address;
		this.birthday = birthday;
	}


	@Override
	public String toString() {
		return "Students [sid=" + sid + ", sname=" + sname + ", gender=" + gender + ", Address=" + Address
				+ ", birthday=" + birthday + "]";
	}
	
}

(3)生成對應實體類的映射文件並添加到配置文檔中;
Students.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.wangchao.DAO.Students" table="STUDENTS">
<id name="sid" type="int">
<column name="SID"/>
<generator class="assigned" />
</id>
<property name="sname" type="java.lang.String">
<column name="SNAME"></column>
</property>
<property name="gender" type="java.lang.String">
<column name="GENDER"></column>
</property>
<property name="birthday" type="java.util.Date">
<column name="BIRTHDAY"></column>
</property>
<property name="address" type="java.lang.String">
<column name="ADDRESS"></column>
</property>
</class>
</hibernate-mapping>

(4)調用Hibernate API進行測試

使用Junit進行測試要使用到的標籤:

@Test:要測試的方法。

@Before:初始化方法(表示在測試前會先執行before方法進行初始化)。

@After:釋放資源。

執行次序:@before標籤下的方法——>@test方法——>@after釋放資源

import java.util.Date;


import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;


import com.MyBlog.XYXY.domain.Students;


//測試類
public class StudentsTest{
       private SessionFactory sessionFactory;
       private Session session;
       private Transaction transaction;




@Before
public void init()
{
//創建配置對象
Configuration config = new Configuration().configure();


//創建服務註冊對象
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).getBootstrapServiceRegistry();


//創建會話工廠對象
sessionFactory = config.buildSessionFactory(serviceRegistry);


//會話對象
session = sessionFactory.openSession();


//開啓事務
transaction = session.beginTransaction();
}




@After
public void destory()
{
   transaction.commit();    //提交事務
   session.close();         //關閉會話
   sessionFactory.close();  //關閉會話工廠
}


@Test
public void testSaveStudents(){
   //生成學生對象
   Students s=new Students(1,"熊長","男",new Date(),"長白山");
   session.save(s);   //保存對象進入數據庫
}


}

3.什麼是session?

類似於JDBC裏面的connection對象。調用session操作數據庫,實際上就是調用connection的各種API函數來實現的。

4.openSession與getCurrentSession的區別?

(1)openSension每次都是創建新的session對象,而getCurrentSenssion使用單例模式,每次創建都是相同的對象。

(2)openSession在使用完畢後需要顯式地關閉,而getCurrentSession在事務提交之後會自動關閉。

5.單表操作有哪些常用的方法?

增刪改查對應使用session當中的save、delete、update、get/load方法.6.單表操作,查詢一條記錄時,get和load的區別?

答:get在使用的時候立即發送sql語句,並且獲得的是實體類的對象類型,而load只有在使用具體對象的非主鍵屬性的時候纔會發送sql語句,而且返回的是一個代理對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章