前面我们写了一个Hibernate入门的小程序,但也只是简单的向db_user数据库中的t_user表中插入一条记录,现在我们来写第二个Hibernate程序——实现对数据库完整的操作(CRUD)。
首先我们需要创建一个工具类——HibernateUtil.java,该工具类的作用专门用来获取全局唯一的SessionFactory,以及从全局唯一的SessionFactory中打开一个Session。
代码如下:
public class HibernateUtil {
private static Configuration configuration=null;
private static SessionFactory sessionFactory=null;
//本地化线程 底层有一个Map<K,V> K:线程ID V:session 一个线程绑定一个session
private static ThreadLocal<Session> localSession;
//静态加载
static {
try {
//加载配置文件(默认加载hibernate.cfg.xml)
configuration= new Configuration().configure();
//开启sessionfactory
sessionFactory=configuration.buildSessionFactory();
//创建ThreadLocal实例
localSession=new ThreadLocal<Session>();
} catch (Exception e) {
e.printStackTrace();
System.out.println("加载hibernate文件失败");
}
}
/**
* 开启session会话
* @return session对象
*/
public static Session getSession() {
//
Session session=localSession.get();
if(session==null) {
session =sessionFactory.openSession();
localSession.set(session);
}
return session;
}
//关闭session会话
public static void closeSession() throws HibernateException{
Session session=localSession.get();
if(session!=null) {
session.close();
}
localSession.set(null);
}
}
最后,我们创建一个类——UserEntityTest。UserEntityTest类里面编写代码实现对数据库完整的操作(CRUD)。
由于一个程序只有一个主方法,在测试不同功能的情况下,main方法显得尤为麻烦,所以我们就建立一个测试工具类JUnit。该类继承TestCase类,这样我们在UserEntityTest.java类中测试数据库中的某个方法,方法名的规范要以Test开头。
public class UserEntityTest extends TestCase {
/**
* 往数据库添加实体类对象
*/
public void TestSave() {
Session session = HibernateUtil.getSession();
for (int i = 0; i < 5; i++) {
UserEntity userEntity = new UserEntity();
userEntity.setUserName("张三" + i);
userEntity.setUserAge(i + 1);
// 开启事物
session.beginTransaction();
session.save(userEntity);
// 提交事物
session.getTransaction().commit();
}
}
/**
* 从数据库删除持久化对象
*/
public void TestDelete() {
Session session = HibernateUtil.getSession();
UserEntity userEntity = (UserEntity) session.get(UserEntity.class, 1);
session.delete(userEntity);
// 开启事物
session.beginTransaction();
// 提交事物
session.getTransaction().commit();
}
/**
* 更改数据库持久化对象属性
*/
public void TestUpdate() {
Session session = HibernateUtil.getSession();
// 得到持久化对象
UserEntity userEntity = (UserEntity) session.get(UserEntity.class, 1);
// 更改名字
userEntity.setUserName("李四");
// 开启事物
session.beginTransaction();
// 提交事物
session.getTransaction().commit();
}
/**
* 从数据库查询实体类
*/
public void TestGet() {
Session session=HibernateUtil.getSession();
UserEntity userEntity=(UserEntity) session.get(UserEntity.class,2);
System.out.println(userEntity);
}
}
备注:以上功能需要在完成hibernate配置文件和完成实体类.hbm.xml映射中进行
点击查看如何配置Hibernate映射文件