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表

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