框架 Hibernate 2

持久化類百度百科 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>

 

 

相關文章
相關標籤/搜索