Hibernate-使用事务
2024-09-04 13:12:34
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
User u1 = new User();
u1.setName("测试11111"); User u2 = new User();
u2.setName("测试222222"); new SaveService().add(u1, u2); System.out.println("ok");
}
配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernatetransaction</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property> <property name="hibernate.hbm2ddl.auto">update</property> <!-- 将session绑定到当前的线程中,这样在同一个线程中就可以使用同一个session,进行事务操作,要是用全称 -->
<property name="hibernate.current_session_context_class">org.hibernate.context.ThreadLocalSessionContext</property> <mapping resource="com/gordon/domain/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
package com.gordon.service; import org.hibernate.Session;
import org.hibernate.Transaction; import com.gordon.dao.SaveDao;
import com.gordon.domain.User;
import com.gordon.utils.HibernateUtil; public class SaveService { public void add(User u1, User u2) { SaveDao saveDao = new SaveDao(); // 从当前线程中获取session
Session session = HibernateUtil.getCurrentSession();
//开启这个session的事务
Transaction tr = session.beginTransaction(); try {
saveDao.add1(u1); int i = 100/0; saveDao.add2(u2); tr.commit();
} catch (Exception e) {
tr.rollback();
e.printStackTrace();
} // 不需要关闭session,会自动关闭 } }
package com.gordon.dao; import org.hibernate.Session; import com.gordon.domain.User;
import com.gordon.utils.HibernateUtil; public class SaveDao { public void add1(User u) {
Session session = HibernateUtil.getCurrentSession();
session.save(u);
} public void add2(User u) {
Session session = HibernateUtil.getCurrentSession();
session.save(u);
} }
package com.gordon.utils; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class HibernateUtil {
private static final Configuration CONFIGURATION;
private static final SessionFactory SESSIONFACTORY; static {
CONFIGURATION = new Configuration().configure();
SESSIONFACTORY = CONFIGURATION.buildSessionFactory();
}; public static Session getSession() {
return SESSIONFACTORY.openSession();
} public static Session getCurrentSession() {
return SESSIONFACTORY.getCurrentSession();
}
}
最新文章
- css中的定位和框模型问题
- HDU 2096 小明A+B --- 水题
- c# 中的多线程和异步
- (转)SqlServer数据库大型应用解决方案总结
- querystring,parse和stringify相互转换
- Scrapy开发
- Java 异常分类
- java提高篇(七)-----详解内部类
- 构建微服务(Building Microservices)-PDF 文档
- 【UML 建模】状态图介绍
- 面试常考---html篇
- symfony composer安装
- Hive 导入 parquet 格式数据
- ssm知识点总结
- day5 模拟用户登录
- jmeter创建基本的FTP测试计划
- 6.简单提取小红书app数据保存txt-2
- Expo大作战(四)--快速用expo构建一个app,expo中的关键术语
- mySQl数据库中不能插入中文的处理办法
- Web前端开发最佳实践(9):CSS代码太太乱,重复代码太多?你需要精简CSS代码