持久化類百度百科 java
http://baike.baidu.com/link?url=gNus-8jhK0Mi401aIR-16YUAnWKzOJfeMagUV8_t5iG8235JyjMrmZPd7rIT35KyqbFHnnvlntYXhmt9tm-d4NnplTjPXTEAHO-QbbahHXXjwuAcxBGq1ZwoAzPVHY-Xsql
首先持久化做用是將程序數據在持久狀態和瞬時狀態間轉換的機制。即把數據(如內存中的對象)保存到可永久保存的存儲設備中(如磁盤)。持久化的主要應用是將內存中的對象存儲在關係型的數據庫中,固然也能夠存儲在磁盤文件中、XML數據文件中等等。
通常來講,持久化類(persistent class):能夠被hibernate保存到數據庫,而且從數據庫讀取的類。
持久化類:是指其實例須要被Hibernate持久化到數據庫中的類。持久化類符合JavaBean的規範,包含一些屬性,以及與之對應的getXXX()和setXXX()方法。而持久化對象就是把對象保存至數據庫或者文件中。
區別就是:持久化類是可以實現持久化的類-也就是該類符合JavaBean的規範和持久化標準的一些操做。而持久化對象就是:持久化類的實例對象,而且將至保存到數據庫或者文件中。
<?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="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="hibernate.connection.password">123456</property> <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property> <property name="hibernate.connection.username">test0816</property> <!--數據庫方案 --> <property name="hibernate.default_schema">TEST0816</property> <!--數據庫方言 --> <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property> <!--調試--> <property name="hibernate.show_sql">true</property> <property name="hibernate.format_sql">true</property> <!--自動建表方式 --> <property name="hibernate.hbm2ddl.auto">update</property> <!--映射文件 --> <mapping resource="com/hanqi/entity/User.hbm.xml"/> </session-factory> </hibernate-configuration>
package com.hanqi.test; import static org.junit.Assert.*; 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.hanqi.entity.User; public class Test01 { private Session se=null; private SessionFactory sf=null; private Transaction ts=null; //定義特殊方法 //在測試用例方法被執行以前自動執行的方法 //通常用來初始化公用的對象 //前置方法 @Before public void init() { //1獲取配置文件 Configuration cfg=new Configuration().configure(); //2註冊配置 ServiceRegistry sr=new StandardServiceRegistryBuilder() .applySettings(cfg.getProperties()).build(); //3獲取SessionFactory (至關於jdbc的鏈接connection) sf=cfg.buildSessionFactory(sr); System.out.println(sf); //4產生Session 保存 跟jsp session不要緊 叫會話而已 真正幹活的 se=sf.openSession(); //5啓動事務 ts=se.beginTransaction(); } //後置方法 //通常用來釋放資源 @After public void destory() { //7提交事務 ts.commit();//提交事務,否則沒有真正的放到數據庫 在這裏執行了insert語句才寫進數據庫 //8釋放資源 se.close(); sf.close(); } //測試Hibernate鏈接 @Test public void test() { //6操做數據庫 //添加數據 //實例化新對象,處於臨時狀態 User u1=new User(); u1.setBirthday(new Date());//建立當地時間 u1.setMoney(2000); u1.setPassword("123456"); u1.setUserName("測試1"); //u1.setUserID(2);//天然主鍵 //保存數據 //經過save方法把對象從臨時狀態轉成持久化狀態 se.save(u1);//不用操心insert語句,但不在這執行語句,也會有主鍵,hibernate自動生成 System.out.println(u1); } //測試查詢 @Test public void test1() { //查詢數據 查一個 //提供2個參數 //須要返回哪個持久化類的實例 //實例的標識(數據的主鍵值) //經過session的get方法得到的對象處於持久化狀態 User u2=(User)se.get(User.class,5);//User類 主鍵是3 System.out.println(u2); //修改數據 User u3=(User)se.get(User.class,10);//User類 主鍵是3 u3.setUserName("修改"); System.out.println(u3); //刪除 //se.delete(u2);//使持久化對象進入刪除狀態 } @Test public void test2() { User u1=(User)se.get(User.class,5);//當即加載數據 System.out.println("get後"); System.out.println("u1="+u1); User u2=(User)se.get(User.class,6); System.out.println("u2="+u2); } public void test3() { User u1=(User)se.load(User.class,6 );//延時加載數據 System.out.println("load後"); System.out.println("U1="+u1);//當要使用時才能加載 } //測試遊離狀態 @Test public void test4() { //獲得持久化狀態的對象 User u1=(User)se.get(User.class, 6); System.out.println("u1="+u1); se.close();//關閉遊離狀態 //使u1進入遊離狀態 u1.setUserName("測試遊離456"); //把OID置成null u1.setUserID(null);//把實體類的類型改成Integer System.out.println("從新建立Session和事務..."); //從新建立Session,再使session回來 se=sf.openSession(); //從新開啓事務 事務se.close()以前已經關了 ts=se.beginTransaction(); se.saveOrUpdate(u1);//自動判斷是save仍是update 爲空是添加,有的話修改 } }
package com.hanqi.entity; import java.util.Date; //持久化類 實體化類 //不須要使用final終態 public class User { private Integer userID;//Integer包裝類 能夠爲null int不能夠 private String userName; private Date birthday; private double money; private String password; public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getUserID() { return userID; } public void setUserID(Integer userID) { this.userID = userID; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public double getMoney() { return money; } public void setMoney(double money) { this.money = money; } public User(Integer userID, String userName, Date birthday, double money, String password) { super(); this.userID = userID; this.userName = userName; this.birthday = birthday; this.money = money; this.password = password; } @Override public String toString() { return "User [userID=" + userID + ", userName=" + userName + ", birthday=" + birthday + ", money=" + money + ", password=" + password + "]"; } //必須包含無參的構造方法 //由於須要用到反射 反射要求是構造無參實例 public User() { super(); } }
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Generated 2016-11-7 14:38:39 by Hibernate Tools 3.4.0.CR1 --> <hibernate-mapping> <class name="com.hanqi.entity.User" table="T_USER"> <id name="userID" type="int"> <column name="USERID" /> <generator class="native" /> </id> <property name="userName" type="java.lang.String"> <column name="USERNAME" length="20" not-null="true"/> </property> <property name="birthday" type="java.util.Date"> <column name="BIRTHDAY" sql-type="DATE" /> </property> <property name="money" type="java.lang.Double"> <column name="MONEY" length="8" scale="2" default="0"/> </property> <property name="password" type="java.lang.String"> <column name="PASSWORD" length="10"/> </property> </class> </hibernate-mapping>