1. 程式人生 > >Hibernate使用註解配置持久化類

Hibernate使用註解配置持久化類

接上篇文章(點選開啟連結),給出Hibernate註解配置持久化類的步驟:

一、同樣配置Hibernate.cfg.xml:

<?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 >  
        <!-- mysql資料庫驅動 -->  
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>  
        <!-- mysql資料庫名稱 -->  
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/world</property>  
        <!-- 資料庫的登陸使用者名稱 -->  
        <property name="hibernate.connection.username">root</property>  
        <!-- 資料庫的登陸密碼 -->  
        <property name="hibernate.connection.password">1988419</property>  
        <!-- 配置方言為每一種資料庫提供特殊sql適配-->  
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>  

		<!-- c3p0連線池配置 -->
		<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
		<!-- 連線池最大連線 -->
		<property name="hibernate.c3p0.max_size">10</property>
		<!-- 連線池最小連線 -->
		<property name="hibernate.c3p0.min_size">1</property>
        <!-- 連線池超時時長(毫秒) -->  
        <property name="hibernate.c3p0.timeout">5000</property>
        <!-- 指定連線池最大快取多少Statment物件 -->
        <property name="hibernate.c3p0.max_statment">50</property>
        <!-- 空閒檢測週期(毫秒) -->
        <property name="hibernate.c3p0.idle_test_period">3000</property>
        <!-- 連線池一次增加的連線數 -->
        <property name="hibernate.c3p0.acquire_increment">5</property>
        <!-- 每次都驗證連線是否可用 -->
        <property name="hibernate.c3p0.validate">true</property>
        
        <!-- 是否在控制檯輸出sql語句 -->
        <property name="hibernate.show_sql">true</property>
        
        <!-- 使用xml配置時,指定持久化類xml的路徑 -->
<!--         <mapping resource="org/lcwben/Student.hbm.xml"></mapping> -->
        
        <!-- 使用註解持久化類配置時,指定持久化類.java檔案配置 -->
			<mapping class="org.lcwben.Student" />
    </session-factory>  
</hibernate-configuration>  
二、建立持久化類:
import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

//注意:所有的註解均使用jpa規範
@Entity
@Table(name="test_stu")
public class Student {

	@Id //uid作為主鍵
	@GenericGenerator(name = "generator", strategy = "increment") //自增選項
	@GeneratedValue(generator="generator")
	private Integer uid;
	private String uname;
	private Date regtime;
	private Integer status;
	private Integer score;
	private Integer classes;
	
	
//所有成員變數的getter與setter
	public Integer getUid() {
		return uid;
	}
	public void setUid(Integer uid) {
		this.uid = uid;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public Date getRegtime() {
		return regtime;
	}
	public void setRegtime(Date regtime) {
		this.regtime = regtime;
	}
	public Integer getStatus() {
		return status;
	}
	public void setStatus(Integer status) {
		this.status = status;
	}
	public Integer getScore() {
		return score;
	}
	public void setScore(Integer score) {
		this.score = score;
	}
	public Integer getClasses() {
		return classes;
	}
	public void setClasses(Integer classes) {
		this.classes = classes;
	}
	
}

三、JUnit測試:
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.Test;


public class Client {

	private static SessionFactory sf;
	
	static {
		Configuration cfg = new Configuration().configure();
		ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
		sf = cfg.buildSessionFactory(sr);
	}
	
	@Test
	public void testSelectAll() {
		
		Configuration cfg = new Configuration().configure();
		ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
		SessionFactory sf = cfg.buildSessionFactory(sr); 
		
		Session sess = null;
		try {
			sess = sf.openSession();
			String hql = "from Student";
			Query qy = sess.createQuery(hql);
			List<Student> stus = qy.list();
			for (Student stu : stus) {
				System.out.println(stu.getUid()+" "+stu.getUname()+" "+stu.getRegtime()+" "+stu.getStatus()+" "+stu.getScore()+" "+stu.getClasses());
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if(sess!=null) {
				sess.close();
			}
		}
	}
}

結果如下:
三月 08, 2017 3:05:22 下午 org.hibernate.engine.transaction.internal.TransactionFactoryInitiator initiateService
INFO: HHH000399: Using default transaction strategy (direct JDBC transactions)
三月 08, 2017 3:05:22 下午 org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init>
INFO: HHH000397: Using ASTQueryTranslatorFactory
Hibernate: select student0_.uid as uid1_0_, student0_.classes as classes2_0_, student0_.regtime as regtime3_0_, student0_.score as score4_0_, student0_.status as status5_0_, student0_.uname as uname6_0_ from test_stu student0_
1 lcwben1 2017-01-18 0 60 1
2 lcwben2 2017-01-18 1 67 1
3 lcwben3 2017-01-19 1 51 3
4 benhbm2 2017-01-19 0 78 3
5 lcwben5 2017-01-19 0 80 3
6 lcwben6 2017-01-22 1 97 2
7 lcwben7 2017-01-23 0 73 1
8 lcwben8 2017-01-25 1 48 2
9 lcwben9 2017-01-28 1 100 3
10 lcwben10 2017-01-31 0 92 3