根据第一次配置的环境
首先建立一个HibernateUtil.java
package com;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static Configuration cfg;
private static SessionFactory sessionFactory;
static {
try {
cfg = new Configuration().configure();
sessionFactory = cfg.buildSessionFactory();
}catch (Exception e) {
e.printStackTrace();
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
再创建一个测试类TestUser
要注意导入junit的jar包
import com.TestentityEntity;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.Test;
import com.HibernateUtil;
public class TestUser {
@Test
public void saveUser() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction transaction = null;
TestentityEntity user = new TestentityEntity();
user.setTname("hongguoguo");
user.setTid(111);
try {
sessionFactory = HibernateUtil.getSessionFactory();
session = sessionFactory.getCurrentSession();
transaction = session.beginTransaction();
session.save(user);
transaction.commit();
} catch (Exception e) {
if (transaction!=null) {
transaction.rollback();
}
e.printStackTrace();
}
}
@Test
public void updateUser() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction transaction = null;
try {
sessionFactory = HibernateUtil.getSessionFactory();
session = sessionFactory.getCurrentSession();
transaction = session.beginTransaction();
TestentityEntity user = session.get(TestentityEntity.class, 1);
user.setTname("lvpaopao");
user.setTid(111);
session.update(user);
transaction.commit();
} catch (Exception e) {
if (transaction!=null) {
transaction.rollback();
}
e.printStackTrace();
}
}
@Test
public void queryUser() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction transaction = null;
try {
sessionFactory = HibernateUtil.getSessionFactory();
session = sessionFactory.getCurrentSession();
transaction = session.beginTransaction();
TestentityEntity user = session.get(TestentityEntity.class, 2);
System.out.println("ID:"+user.getTid()+" 姓名:"+user.getTname());
transaction.commit();
} catch (Exception e) {
if (transaction!=null) {
transaction.rollback();
}
e.printStackTrace();
}
}
@Test
public void deleteUser() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction transaction = null;
try {
sessionFactory = HibernateUtil.getSessionFactory();
session = sessionFactory.getCurrentSession();
transaction = session.beginTransaction();
TestentityEntity user = session.get(TestentityEntity.class, 1);
session.delete(user);
transaction.commit();
} catch (Exception e) {
if (transaction!=null) {
transaction.rollback();
}
e.printStackTrace();
}
}
}
错误:
第一次运行报错
报错
原理
1、在 SessionFactory(会话工厂)启动的时候,Hibernate 会根据配置创建相应的 CurrentSessionContext,
在getCurrentSession()被调用的时候,实际被执行的方法是 CurrentSessionContext.currentSession()。
2、这里的“根据配置”就是如下配置:
- 如果使用的是本地事务(jdbc事务 本地事务:数据库只有一个)
<property name="hibernate.current_session_context_class">thread</property>
- 如果使用的是全局事务(jta事务 全局事务:数据库有多个)
<property name="hibernate.current_session_context_class">jta</property>
解决方法
在hibernate.cfg.xml中加入以上配置
储存成功
储存成功
数据库
更新操作(改)
成功数据库
查询操作
成功
删除操作
成功
数据库ID为3的数据删除
网友评论