Hibernate教程 class2

通過上次的教程我們已經初步認識了Hibernate,也學會了用xml文件配置表和java類的聯繫。
但是同學們有沒有發現這樣做會比較麻煩。。。。。
配置數據庫table和java類的關聯 有兩種方法  其中就是xml方式,我們上次已經實現了,現在我給大家介紹一下註解版的配置。這種方法也是我平時比較常用的。。。
接着上一節講,我們爲了方便建了一個Hibernate的util類,這個類的目地就是獲取Hibernate的sessionFactory

package com.wyy.util;


import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;


public class HibernateUtil {
	
	private static final SessionFactory sessionFactory=buildSessionFactory();


	private static SessionFactory buildSessionFactory(){
		Configuration configuration=new Configuration().configure(); // 實例化配置文件
		ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); // 實例化服務登記
	    return configuration.buildSessionFactory(serviceRegistry); // 獲取Session工廠
	}
	
	public static SessionFactory getSessionFactory(){
		return sessionFactory;
	}
}

然後我們新建的一個Teacher的model類

package com.wyy.model;

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

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name="t_teacher")
public class Teacher {

	private long id;
	private String name;
	
	@Id
	@GeneratedValue(generator="_native")
	@GenericGenerator(name="_native",strategy="native")
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "Teacher [id=" + id + ", name=" + name + "]";
	}
	
	
}

@後面的就是註解
@Entity 表示這個類是實體類
@Table(name="t_teacher") 表示對應關係,對應數據庫的t_teacher表
@Id
@GeneratedValue(generator="_native")
@GenericGenerator(name="_native",strategy="native")這段註釋表示id是數據庫table中的主鍵,他的生成策略是數據庫的native,也就是自動自增。。最後在hibernate.cfg.xml里加上
<mapping class="com.wyy.model.Teacher"/>
這樣我們就把數據庫的表和實體類關聯起來了。我們可以測試一下,測試一下增刪改查。我們寫一個測試類

package com.wyy.service;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import com.wyy.model.Teacher;
import com.wyy.util.HibernateUtil;

public class TeacherTest {
	
	private SessionFactory sessionFactory=HibernateUtil.getSessionFactory();
	
	public void add(){
	    Session session=sessionFactory.openSession(); // 生成一個session
	    session.beginTransaction(); // 開啓事務
	    
	    Teacher s=new Teacher();
	    s.setName("張三");
	    session.save(s);
	    
	    session.getTransaction().commit(); // 提交事務
	    session.close(); // 關閉session
	}
	
	public void delete(){
		Session session=sessionFactory.openSession(); // 生成一個session
	    session.beginTransaction(); // 開啓事務
	    
	    Teacher Teacher=(Teacher)session.get(Teacher.class, Long.valueOf(1));
	    session.delete(Teacher);
	    
	    session.getTransaction().commit(); // 提交事務
	    session.close(); // 關閉session
	}
	
	public void update(){
		Session session=sessionFactory.openSession(); // 生成一個session
	    session.beginTransaction(); // 開啓事務
	    
	    Teacher Teacher=(Teacher)session.get(Teacher.class, Long.valueOf(2));
	    Teacher.setName("張三2");
	    session.save(Teacher);
	    
	    session.getTransaction().commit(); // 提交事務
	    session.close(); // 關閉session
	}
	
	public void getAllTeacher(){
		Session session=sessionFactory.openSession(); // 生成一個session
	    session.beginTransaction(); // 開啓事務
	    
	    String hql="from Teacher";
	    Query query=session.createQuery(hql);
	    List<Teacher> TeacherList=query.list();
	    for(Teacher Teacher:TeacherList){
	    	System.out.println(Teacher);
	    }
	    
	    session.getTransaction().commit(); // 提交事務
	    session.close(); // 關閉session
	}

	public static void main(String[] args) {
		TeacherTest TeacherTest=new TeacherTest();
		// TeacherTest.add();
		// TeacherTest.delete();
		// TeacherTest.update();
		TeacherTest.getAllTeacher();
	}
}


在Hibernate中對數據庫的操作需要用session來完成。

session.createQuery(hql):利用hql查詢語句查詢;

這樣我們就實現了Hibernate註解版的增刪改查。最後說一句,如果數據庫中沒有t_teacher表的話,Hibernate會自動給我們建t_teacher表

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