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">
<!-- Generated by MyEclipse Hibernate Tools.                   -->
<!-- 重點:學會hibernate的屬性的配置(鏈接數據庫) -->
<hibernate-configuration>java

 <session-factory>
  <!-- 數據庫方言 -->
  <property name="dialect">
   org.hibernate.dialect.MySQLDialect
  </property>
  <!-- 路徑 -->
  <property name="connection.url">
   jdbc:mysql://127.0.0.1:3309/hibernatetest
  </property>
  <!-- 用戶名 -->
  <property name="connection.username">root</property>
  <!-- 密碼 -->
  <property name="connection.password">root</property>
  <!-- 驅動 -->
  <property name="connection.driver_class">
   com.mysql.jdbc.Driver
  </property>
  <!-- myeclipse中的數據庫鏈接名 -->
  <property name="myeclipse.connection.profile">fengke</property>
  <!-- 顯示數據查詢語句 -->
  <property name="show_sql">true</property>
  <!-- 匹配的持久化類路徑 -->
  <mapping resource="fengke/vo/Login.hbm.xml" />
 </session-factory>mysql

</hibernate-configuration>
=====================================================================
我是用的是myeclipse,所以反向工程自動生成實體類
============================JUnit4 測試==========================================
package test;sql

import static org.junit.Assert.*;
import java.sql.Time;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import fengke.util.HibernateSessionFactory;
import fengke.vo.Login;
/**
 * Hibernate測試
 * @author 鋒客
 * 注意:
 *   一、對於事務的理解:
 *       在本例中若是不開啓事務,作以一下循環
 *      int i = 0;
 *  while (i < 3) {
 *   Login login = new Login("fengke", "123456");
 *   session.save(login);
 *   i++;
 *  }
 *  String hql = "from Login";
 *  Query query = session.createQuery(hql);
 *  List<Login> list = query.list();
 *  for (Login q : list) {
 *   System.out.println(q.getId());
 *  }
 *   結果:數據庫中不會有數據存入,但循環輸出能夠實現。
 *   結論:事務就像是先將數據臨時存入到數據庫中,能夠進行任何操做,可是當你不提交事務時,
 *       程序運行結束,會清空操做的數據,還原到本來的數據庫,可是數據庫會記錄這些操做,由於
 *       id主鍵的變化,並無從1開始,而是從上次事務操做數據庫最後一條數據的id爲標準。
 *      
 *
 */
public class HibernateTest {
 static Session session = null;
 static Transaction transaction = null;數據庫

 @BeforeClass
 public static void setUpBeforeClass() throws Exception {
  
 }session

 @AfterClass
 public static void tearDownAfterClass() throws Exception {
  
 }app

 @Before
 public void setUp() throws Exception {
  // 配置hibernate環境
    System.out.println("開始配置Hibernate的環境");
    try {
     // Configuration config = new Configuration().configure();
     // SessionFactory sessionFactory = config.buildSessionFactory();
     session = HibernateSessionFactory.getSession();
     //使用beginTransaction()開啓事務
     transaction = session.beginTransaction();
    } catch (Exception e) {
     e.printStackTrace();
    }eclipse

 }測試

 @After
 public void tearDown() throws Exception {
  // 關閉session
    System.out.println("關閉session");
    try {
     transaction.commit();
     session.close();
    } catch (Exception e) {
     e.printStackTrace();
    }
 }
   
 
 /*
  * 測試是否Hibernate配置成功
  */
 @Test
 public void test() {
  int i = 0;
  while (i < 3) {
   Login login = new Login("fengke", "123456");
   session.save(login);
   i++;
  }
  String hql = "from Login";
  Query query = session.createQuery(hql);
  List<Login> list = query.list();
  for (Login q : list) {
   System.out.println(q.getId());
  }ui

 }
 
 
}
=================================更換數據庫(更換另外一個屬性文件)==================================
package fengke.dao;url

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 fengke.util.HibernateSessionFactory;
import fengke.vo.Login;
import fengke.vo1.User;

public class Dao {
 
 public static void main(String[] args) {
  Session session = HibernateSessionFactory.getSession();
  Transaction tran=session.beginTransaction();
  int i=0;
  while (i<3) {
   Login login=new Login("fengke", "123456");
   session.save(login);
   i++;
  }
  String hql="from Login";
   Query query = session.createQuery(hql);
  List<Login> list = query.list();
  for(Login q:list){
   System.out.println("aaa");
  }
  tran.commit();//能夠測試事務的特性
  session.close();
  System.out.println("******************更換數據庫********************");
  exchangeDB();
    
 }
   //更換數據庫
 private static void exchangeDB() {
  //設置配置文件(連接數據庫的文件)
  //注意:最好實體類的名字不要重複,不然
  /*1:比較簡單的辦法,更改其中一個類名。
  * 2:第二種解決辦法,將類的映射文件,
  * <hibernate-mapping>結點後加上auto-import="false",默認爲true,
  * 即變成<hibernate-mapping auto-import="false">,可是這樣改了之後,千萬要注意,
  * 在寫HQL語句時候,好比"from cn.com.test01.TUser4",必定要加上完整包名,
  * 由於你設置了auto-import="false".
  */
  HibernateSessionFactory.setConfigFile("/hibernatefeng.cfg.xml");
  Session se = HibernateSessionFactory.getSession();
  Transaction tran=se.beginTransaction();
  int i=0;
  while (i<3) {
   User login=new User("root", "root");
   se.save(login);
   i++;
  }
  tran.commit();
  se.close();
 }

}

相關文章
相關標籤/搜索