hibernate 基本步驟 <一>


工程結構:

所有實驗步驟:

建立java工程

1.導入包

2.建立一個對應與數據庫的類Student。里面的屬性和數據庫中的字段對應。

3.在上面Student類所在的目錄下建立映射文件。配置對象-關系映射文件:Student.hbm.xml //名稱不確定,隨意!最好放在bean中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.huasoft.domain">

    <!-- 不指定table默認以類為依據,創建student表 (第一個字母小寫)-->
    <class name="Student">
        <id name="id" >
            <generator class="native"></generator>   <!-- 自動增長 -->
        </id>
        
        <property name="name" length="20" column="myname"></property>   <!--類的屬性和數據庫字段對應關系,默認不寫column就以屬性為數據庫字段列-->
        <property name="sex"></property>
        <property name="age"></property>
    </class>
</hibernate-mapping>


4.在src下加入Hibernate配置文件(指定數據庫連接密碼和用戶):hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
    <session-factory >
        <!--指定方言  -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <!--指定數據庫驅動  -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- 指定連接url -->
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hbm_first</property>
        <!-- 指定數據用戶名 -->
        <property name="hibernate.connection.username">root</property>
        <!-- 指定數據庫密碼 -->
        <property name="hibernate.connection.password">ai2212935</property>
        <!-- 中斷輸出sql語句 -->
        <property name="hibernate.show_sql">true</property>

        <!-- 加載指定映射文件 -->
        <mapping resource="com/huasoft/domain/Student.hbm.xml"/>
        
    </session-factory>
    </hibernate-configuration>


5.引入mysql的驅動包,hibernate只能生成表,不能生成數據庫,打開sql自己創建數據庫。

6.建立一個類Client.java,用來生成表(讀取配置文件,連接,)。
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

//生成表
public class Client {
    public static void main(String[] args){
        try {
            Configuration cfg=new Configuration().configure();
            //根據配置信息生成表的工具類
            SchemaExport export=new SchemaExport(cfg);
            //工具類產生表:第一個參數,創建表顯示在控制台,第二個參數:允許將腳本配置導入數據庫。
            export.create(true, true);
        } catch (Exception e) {

        }        
    }
}


7.創建一個帶有主函數類Test,用來對數據庫進行操作,獲取增刪該查

i
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistryBuilder;

import com.huasoft.domain.Student;


//對生成的數據庫進行底層操作
public class Test {
    public static void main(String[] args) {


        try {
            Configuration cfg=new Configuration().configure();//讀取配置文件
            
            
            /**
             *  hibernate 4.0之后版本獲取方式,使用帶有參數的buildSessionFactory()獲取sessionFactory對象
             */
            ServiceRegistryBuilder srb = new ServiceRegistryBuilder();
            SessionFactory factory=cfg.buildSessionFactory(srb.applySettings(cfg.getProperties()).buildServiceRegistry());
            
            /**老版本獲取sessionFactory對象,buildSessionFactory()
            SessionFactory factory=cfg.buildSessionFactory();
            */
            Session session=factory.openSession();
            
            
            Transaction tx=session.getTransaction();
            tx.begin();
            
            Student student=new Student();
            student.setAge(20);
            student.setName("艾廣然 ");
            student.setSex("男");
            session.save(student);
            tx.commit();
            
            session.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}



7.單元測試(允許建立多個方法,每一個方法作為程序的運行接口,不再局限於main,做測試用):
引入架包junit.jar

為了區分,建立一個source src,建立一個com.huasoft.test包,包中的HbmTest類extends TestCase類 。
方法名必須以test開頭,可以實現多個方法的測試。

由於我們不需要每次執行其中的方法都去建立一個SessionFactory,所以我們把
            Configuration cfg=new Configuration().configure();//讀取配置文件
            SessionFactory factory=cfg.buildSessionFactory();//創建factory對象。
這兩句話創建的factory在hbmUtil中單例模式建立,在HbmTest類中就不需要每次都創建對象了。


hbmUtil單例模式:
package com.huasoft.util;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistryBuilder;

public class hbmUtil {
    private static final SessionFactory sesionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {

            /*
             *  4.0之后新版本獲取方式。sessionFactory對象
             */
            Configuration cfg = new Configuration().configure();
            ServiceRegistryBuilder srb = new ServiceRegistryBuilder();
            return cfg.buildSessionFactory(srb.applySettings(cfg.getProperties()).buildServiceRegistry());

            /*
             * 老版本獲取方式  sessionFactory對象
             * Configuration().configure().buildSessionFactory();
             */
        } catch (Throwable ex) {
            System.out.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sesionFactory;
    }
}



HbmTest類中(對底層的操作):

import java.util.Iterator;
import java.util.List;

import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.huasoft.domain.Student;
import com.huasoft.util.hbmUtil;

import junit.framework.TestCase;


public class HbmTest extends TestCase {

    
    //插入保存
    public void testSave(){
        SessionFactory factory=null;
        Session session=null;
        Transaction tx=null;

        try {
            factory=hbmUtil.getSessionFactory();
            session=factory.openSession();
            
        
            tx=session.getTransaction();

//開啟事物
            tx.begin();
            
            Student student=new Student();
            student.setAge(21);
            student.setName("艾廣然 ");
            student.setSex("男");
            session.save(student);

//提交事物
            tx.commit();
            
            
        } catch (Exception e) {

            try {
                tx.rollback();
            } catch (Exception e2) {
                e2.printStackTrace();
            }

            e.printStackTrace();
        }finally{
            session.close();
        }
    }
    
    
    
    //查詢某一個,使用get或者load方法
    public void testLoad(){

        try {
            SessionFactory factory=hbmUtil.getSessionFactory();
            Session session=factory.openSession();
            
            
            //要加載的類型, 序列化(基本類型都實現了序列化,id)  
            Student student=(Student) session.load(Student.class, 1);
            System.out.println(student.getName()+"  "+student.getAge());

            
            session.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    
    
    //查詢多個
    public void testQuery(){

        try {
            SessionFactory factory=hbmUtil.getSessionFactory();
            Session session=factory.openSession();
            
            
            //操作的是對象 ,from 類名
            Query query=session.createQuery("from Student");
            List list=query.list();
            
            for (Iterator<Student> iterator = list.iterator(); iterator.hasNext();) {
                Student student = iterator.next();
                System.out.println(student.getName()+"  "+student.getAge());                
            }

            
            session.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    //更新

    public void testUpdate(){

        try {
            SessionFactory factory=hbmUtil.getSessionFactory();
            Session session=factory.openSession();
            Transaction tx=session.getTransaction();
            tx.begin();
            
            Student student=(Student) session.get(Student.class, 1);
            student.setName("小狗1");
            session.update(student);
            

            tx.commit();
            session.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM