Hibernate環境配置與實戰Demo

這裏寫圖片描述

一、新建java項目,檢查項目的編碼,加入JDK1.7以上

二、引入jar包

2.1 引入required文件下面的所有jar包

    * antlr-2.7.7.jar    實現hql到sql的轉換
    * dom4j-1.6.1.jar       xml解析
    * geronimo-jta_1.1_spec-1.1.1.jar Geronimo是一個項目(整合優秀的組件和設計理念)
    * hibernate-commons-annotations-5.0.1.Final.jar 註解
    * hibernate-core-5.0.11.Final.jar           核心包
    * hibernate-jpa-2.1-api-1.0.0.Final.jar  hibenate對JPA的支持
    * jandex-2.0.0.Final.jar                 用來索引annotation
    * javassist-3.18.1-GA.jar                  字節碼操作
    * jboss-logging-3.3.0.Final.jar        使用一個註解處理器來實現你的帶註釋的接口類

2.2 引入jpa文件夾下面的jar包

    * hibernate-entitymanager-5.0.11.Final.jar   hibernate對jpa的實現

2.3 引入jpa-metamodel-generator文件夾下面的jar包

    * hibernate-jpamodelgen-5.0.11.Final.jar  關於模型自動生成的jar包

2.4 引入option/c3p0連接池的jar包

    * c3p0-0.9.2.1.jar
    * mchange-commons-java-0.2.3.4.jar      c3p0新版本的輔助包
    * hibernate-c3p0-5.0.11.Final.jar

2.5 引入option/ecache下面的slf4j-api.jar

    SLF4J ,simple logging facade for java 簡單的日誌門面
    它不是具體的日誌解決方案,它只是提供了統一的記錄日誌的接口   ,其他組件就按照其提供的接口實現即可
    * slf4j-api.jar
    * slf4j-log4j.jar
    * log4j.jar

2.6 引入junit /mysql/oracle
* junit-4.11.jar
* hamcrest-core-1.3.jar
* mysql-connector-java-5.0.8-bin.jar
* ojdbc14.jar

三、數據庫建立表(create table t_student(st_id int,st_name varchar(20), st_age int);)
定義一個對象(對應於數據庫表的持久化對象)entity

四、hibernate的配置文件(hibernate.cfg.xml)

 * 引用約束  核心包org.hibernate.hibenate-configuration-3.0.dtd
 * 數據庫連接  project\etc\hibernate.properties
 * 數據源配置 c3po
 * 方言配置
 * 上下文配置
<?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>
        <!-- 連接數據庫四要素  數據庫驅動 url username password -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/test</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">123456</property>

        <!--用c3p0的數據源連接方式  -->
        <property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>

        <!--數據庫方言  -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>

        <!--session上下文  -->
        <property name="hibernate.current_session_context_class">thread</property>

        <!--打印sql  -->
        <property name="hibernate.show_sql">true</property>

        <!--打印的sql格式化  -->
        <property name="hibernate.format_sql">true</property>

        <!--加入映射文件路徑  -->
        <mapping resource="com/xxx/hibernatestudy/sysmanage/entity/student.hbm.xml" />
    </session-factory>
</hibernate-configuration>

五、數據庫表與持久化對象的映射關係配置文件(xxx.hbm.xml)

 * 引入約束
 * 持久化對象和數據庫表的對應關係
 * 講映射文件引入到主配置文件hibernate.cfg.xml中
<?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>
    <class name = "com.xxx.hibernatestudy.sysmanage.entity.Student" table = "T_STUDENT">
        <id name = "stId" column = "ST_ID">
            <generator class="native"></generator>
        </id>
        <property name="stName" column = "ST_NAME"></property>
        <property name="stAge" column = "ST_AGE"></property>    
    </class>

</hibernate-mapping>   

六、編寫測試代碼

package com.xxx.hibernatestudy.sysmanage.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

import com.xxx.hibernatestudy.sysmanage.entity.Student;

public class HibernateDemoTest {



    private Session getSession() {
        //1:讀取hibenrate.cfg.xml配置文件
            Configuration configer = new Configuration().configure();
        //Configuration configer = new Configuration().configure("xxx.cfg.xml");        
        //2:創建sessionFactory
        SessionFactory sessionFactory= configer.buildSessionFactory();
        //3:獲取session
        Session session = sessionFactory.getCurrentSession();
        return session;
    }

    @Test
    public void testAdd(){
        Session session = getSession();
        try{
            //4:開啓事務
            session.beginTransaction();     
            //session.getTransaction().begin();
            //5:增刪改查操作
            Student student = new Student();
            student.setStName("keshao");student.setStAge(18);
            session.save(student);
            //6:事務提交
            session.getTransaction().commit();
        }catch(Exception e){    
            e.printStackTrace();
            //7:事務回滾
            session.getTransaction().rollback();
        }

    }

    @Test
    public void testPersist(){
        Session session = getSession();
        try{
            //4:開啓事務
            session.beginTransaction();     
            //session.getTransaction().begin();
            //5:增刪改查操作
            Student student = new Student();
            student.setStName("muniuliuma");student.setStAge(18);
            session.persist(student);  //jpa提供的接口
            //6:事務提交
            session.getTransaction().commit();
        }catch(Exception e){    
            e.printStackTrace();
            //7:事務回滾
            session.getTransaction().rollback();
        }    
    }


    @Test
    public void testDel(){
        Session session = getSession();
        try{
            //4:開啓事務
            session.beginTransaction();     
            //session.getTransaction().begin();
            //5:增刪改查操作
            Student student = new Student();
            student.setStId(23);
            //student.setStName("muniu");student.setStAge(18);
            session.delete(student); //刪除方法是根據對象的id來操作的
            //6:事務提交
            session.getTransaction().commit();
        }catch(Exception e){    
            e.printStackTrace();
            //7:事務回滾
            session.getTransaction().rollback();
        }

    }

    @Test
    public void testUpdate(){
        Session session = getSession();
        try{
            //4:開啓事務
            session.beginTransaction();     
            //session.getTransaction().begin();
            //5:增刪改查操作
            Student student = new Student();
            student.setStId(22);
            student.setStName("liuma");student.setStAge(18);
            session.update(student);//修改方法是根據對象的id來操作的
            //6:事務提交
            session.getTransaction().commit();
        }catch(Exception e){    
            e.printStackTrace();
            //7:事務回滾
            session.getTransaction().rollback();
        }

    }

    @Test
    public void testSaveOrUpdate(){
        Session session = getSession();
        try{
            //4:開啓事務
            session.beginTransaction();     
            //session.getTransaction().begin();
            //5:增刪改查操作
            Student student = new Student();
            student.setStId(25);
            student.setStName("muniu&liuma");student.setStAge(18);
            session.saveOrUpdate(student);//如果對象沒有id,則爲增加操作,如果有id,則爲修改操作
            //6:事務提交
            session.getTransaction().commit();
        }catch(Exception e){    
            e.printStackTrace();
            //7:事務回滾
            session.getTransaction().rollback();
        }    
    }

    @Test
    public void testGet(){
        Session session = getSession();
        try{
            //4:開啓事務
            session.beginTransaction();     
            //session.getTransaction().begin();
            //5:增刪改查操作
            Student student = session.get(Student.class, 160);
            if(student!=null) 
                System.out.println(student.getStName()+"---"+student.getStAge());
            //6:事務提交
            session.getTransaction().commit();
        }catch(Exception e){    
            e.printStackTrace();
            //7:事務回滾
            session.getTransaction().rollback();
        }    
    }

    @Test
    public void testLoad(){
        Session session = getSession();
        try{
            //4:開啓事務
            session.beginTransaction();     
            //session.getTransaction().begin();
            //5:增刪改查操作
            Student student = session.load(Student.class, 160);
            if(student!=null)
                System.out.println(student.getStName()+"---"+student.getStAge());
            //6:事務提交
            session.getTransaction().commit();
        }catch(Exception e){    
            e.printStackTrace();
            //7:事務回滾
            session.getTransaction().rollback();
        }    
    }
}

這裏寫圖片描述

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