通過上次的教程我們已經初步認識了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表