- 浏览: 151406 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
hx0637:
楼主!小弟要面临面试了,能否指导下小弟?
面试 深圳一家公司的 -
kljismi:
你好,我现在正在开这项目的代码,但是我不明白@Privileg ...
权限管理模块分析 -
yzhw:
终于找到了
ImageSizer.java -
sunloveny:
国
struts国际化 -
jackotty:
谢谢楼主的分享
struts validator验证框架
采用编程式事务
1、getCurrentSession()与openSession()的区别?
* 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()
创建的session则不会
* 采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession()
创建的session必须手动关闭
2、使用getCurrentSession()需要在hibernate.cfg.xml文件中加入如下配置:
* 如果使用的是本地事务(jdbc事务)
<property name="hibernate.current_session_context_class">thread</property>
* 如果使用的是全局事务(jta事务)
<property name="hibernate.current_session_context_class">jta</property>
hibernate.cfg.xml
log4j.properties
ExportDB.java
HibernateUtils.java
Log.java
Log.hbm.xml
User.java
User.hbm.xml
LogManager.java
LogManagerImpl.java
UserManager.java
UserManagerImpl.java
Client.java
1、getCurrentSession()与openSession()的区别?
* 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()
创建的session则不会
* 采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession()
创建的session必须手动关闭
2、使用getCurrentSession()需要在hibernate.cfg.xml文件中加入如下配置:
* 如果使用的是本地事务(jdbc事务)
<property name="hibernate.current_session_context_class">thread</property>
* 如果使用的是全局事务(jta事务)
<property name="hibernate.current_session_context_class">jta</property>
hibernate.cfg.xml
引用
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.url">jdbc:mysql://localhost/spring_hibernate_1</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">bjsxt</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.current_session_context_class">thread</property>
<!--
<property name="hibernate.current_session_context_class">jta</property>
-->
<mapping resource="com/bjsxt/usermgr/model/User.hbm.xml"/>
<mapping resource="com/bjsxt/usermgr/model/Log.hbm.xml"/>
</session-factory>
</hibernate-configuration>
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.url">jdbc:mysql://localhost/spring_hibernate_1</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">bjsxt</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.current_session_context_class">thread</property>
<!--
<property name="hibernate.current_session_context_class">jta</property>
-->
<mapping resource="com/bjsxt/usermgr/model/User.hbm.xml"/>
<mapping resource="com/bjsxt/usermgr/model/Log.hbm.xml"/>
</session-factory>
</hibernate-configuration>
log4j.properties
引用
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=warn, stdout
#log4j.logger.org.hibernate=info
#log4j.logger.org.hibernate=debug
### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=debug
### log just the SQL
#log4j.logger.org.hibernate.SQL=debug
### log JDBC bind parameters ###
#log4j.logger.org.hibernate.type=info
#log4j.logger.org.hibernate.type=debug
### log schema export/update ###
#log4j.logger.org.hibernate.tool.hbm2ddl=debug
### log HQL parse trees
#log4j.logger.org.hibernate.hql=debug
### log cache activity ###
#log4j.logger.org.hibernate.cache=debug
### log transaction activity
#log4j.logger.org.hibernate.transaction=debug
### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug
### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=warn, stdout
#log4j.logger.org.hibernate=info
#log4j.logger.org.hibernate=debug
### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=debug
### log just the SQL
#log4j.logger.org.hibernate.SQL=debug
### log JDBC bind parameters ###
#log4j.logger.org.hibernate.type=info
#log4j.logger.org.hibernate.type=debug
### log schema export/update ###
#log4j.logger.org.hibernate.tool.hbm2ddl=debug
### log HQL parse trees
#log4j.logger.org.hibernate.hql=debug
### log cache activity ###
#log4j.logger.org.hibernate.cache=debug
### log transaction activity
#log4j.logger.org.hibernate.transaction=debug
### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug
### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
ExportDB.java
package com.bjsxt.usermgr.util; import org.hibernate.cfg.Configuration; import org.hibernate.tool.hbm2ddl.SchemaExport; public class ExportDB { public static void main(String[] args) { //读取hibernate.cfg.xml文件 Configuration cfg = new Configuration().configure(); SchemaExport export = new SchemaExport(cfg); export.create(true, true); } }
HibernateUtils.java
package com.bjsxt.usermgr.util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtils { private static SessionFactory factory; static { try { Configuration cfg = new Configuration().configure(); factory = cfg.buildSessionFactory(); }catch(Exception e) { e.printStackTrace(); } } public static SessionFactory getSessionFactory() { return factory; } public static Session getSession() { return factory.openSession(); } public static void closeSession(Session session) { if (session != null) { if (session.isOpen()) { session.close(); } } } }
Log.java
package com.bjsxt.usermgr.model; import java.util.Date; public class Log { private int id; //操作日志、安全日志、事件日志 private String type; private String detail; private Date time; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getDetail() { return detail; } public void setDetail(String detail) { this.detail = detail; } public Date getTime() { return time; } public void setTime(Date time) { this.time = time; } }
Log.hbm.xml
引用
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.bjsxt.usermgr.model">
<class name="Log" table="t_log">
<id name="id">
<generator class="native"/>
</id>
<property name="type"/>
<property name="detail"/>
<property name="time"/>
</class>
</hibernate-mapping>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.bjsxt.usermgr.model">
<class name="Log" table="t_log">
<id name="id">
<generator class="native"/>
</id>
<property name="type"/>
<property name="detail"/>
<property name="time"/>
</class>
</hibernate-mapping>
User.java
package com.bjsxt.usermgr.model; public class User { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
User.hbm.xml
引用
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.bjsxt.usermgr.model">
<class name="User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.bjsxt.usermgr.model">
<class name="User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
LogManager.java
package com.bjsxt.usermgr.manager; import com.bjsxt.usermgr.model.Log; public interface LogManager { public void addLog(Log log); }
LogManagerImpl.java
package com.bjsxt.usermgr.manager; import com.bjsxt.usermgr.model.Log; import com.bjsxt.usermgr.util.HibernateUtils; public class LogManagerImpl implements LogManager { public void addLog(Log log) { HibernateUtils.getSessionFactory().getCurrentSession().save(log); } }
UserManager.java
package com.bjsxt.usermgr.manager; import com.bjsxt.usermgr.model.User; public interface UserManager { public void addUser(User user); }
UserManagerImpl.java
package com.bjsxt.usermgr.manager; import java.util.Date; import org.hibernate.Session; import com.bjsxt.usermgr.model.Log; import com.bjsxt.usermgr.model.User; import com.bjsxt.usermgr.util.HibernateUtils; public class UserManagerImpl implements UserManager { public void addUser(User user) { Session session = null; try { //session = HibernateUtils.getSession(); session = HibernateUtils.getSessionFactory().getCurrentSession(); session.beginTransaction(); session.save(user); Integer.parseInt("asdfsdfsfsd"); Log log = new Log(); log.setType("安全日志"); log.setDetail("xxx进入系统"); log.setTime(new Date()); LogManager logManager = new LogManagerImpl(); logManager.addLog(log); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); // }finally { // HibernateUtils.closeSession(session); } } }
Client.java
package com.bjsxt.usermgr.client; import com.bjsxt.usermgr.manager.UserManager; import com.bjsxt.usermgr.manager.UserManagerImpl; import com.bjsxt.usermgr.model.User; public class Client { public static void main(String[] args) { User user = new User(); user.setName("张三"); UserManager userManager = new UserManagerImpl(); userManager.addUser(user); } }
发表评论
-
ssh_training_itemmgr jsp
2008-12-29 19:01 1203index.jsp <%@ page languag ... -
src\com\bjsxt\drp\business\util
2008-12-29 17:32 1147AppException.java package com. ... -
ssh_training_itemmgr 04
2008-12-29 17:28 754DataDict.java package com.bjs ... -
ssh_training_itemmgr 03
2008-12-29 17:21 952DrpExceptionHandler.java packa ... -
ssh_training_itemmgr 02
2008-12-29 17:11 1027MessageResources.properties 引 ... -
ssh_training_itemmgr 01
2008-12-29 16:58 778applicationContext-actions.xml ... -
采用声明式事务
2008-12-29 15:08 779采用声明式事务 1、声明式事务配置 * 配置Session ... -
spring+struts的集成(第二种集成方案)
2008-12-29 12:40 771spring+struts的集成(第二种集成方案) 原理:将业 ... -
spring+struts的集成(第一种集成方案)
2008-12-29 12:26 752spring+struts的集成(第一种集成方案) 原理:在A ... -
spring_dynamic_proxy
2008-12-29 00:38 742SecurityHandler.java package c ... -
AOP4
2008-12-29 00:24 697spring对AOP的支持 1、如果目标对象实现了接口,默认 ... -
AOP3
2008-12-29 00:17 704spring对AOP的支持 Aspect默认情况下不用实现 ... -
AOP2
2008-12-29 00:11 927spring对AOP的只是(采用配置文件的方式) 1、sp ... -
AOP1
2008-12-29 00:08 700spring对AOP的只是(采用Annotation的方式) ... -
spring_static_proxy
2008-12-29 00:01 760UserManager.java package com.b ... -
根据类型自动装配
2008-12-28 23:55 711引用<?xml version="1.0&qu ... -
根据名称自动装配
2008-12-28 23:53 741applicationContext-beans.xml 引 ... -
spring_scope
2008-12-28 23:42 1019spring Bean的作用域: scope可以取值: ... -
spring_injection
2008-12-28 23:14 5571、spring的普通属性注入 参见:spring文档3. ... -
DYNAMIC PROXY
2008-12-24 23:53 801package com.bjsxt.spring; ...
相关推荐
然而,有时为了更细粒度的控制或者在特定场景下,我们可能需要采用编程式事务管理。 首先,了解事务的四大特性(ACID)是必不可少的: 1. 原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不完成,不...
在Spring框架中,事务管理是应用开发中的重要一环,它确保了数据的一致性和完整性。Spring提供了两种主要的事务管理方式:声明...然而,在实际应用中,应当根据项目需求和团队习惯来决定采用声明式还是编程式事务管理。
Spring框架提供了两种主要的事务管理方式:声明式事务管理和编程式事务管理。本资料着重于“编程式事务管理”,这是一种通过代码直接控制事务开始、提交、回滚等操作的方式。 在Spring中,编程式事务管理通常使用...
- 实现方法:采用编程式事务模型,利用JTA等API实现全局事务管理。 - 优势:能够保证跨资源的数据一致性。 3. **高性能事务处理**: - 使用场景:高并发环境下的事务处理。 - 实现方法:结合声明式事务模型和...
例如,对于一些核心服务使用注解驱动的事务管理,而对于其他辅助服务则采用编程式事务管理。 在配置事务时,通常需要先定义数据源(DataSource),如使用阿里巴巴的Druid数据源: ```xml <!-- 数据源配置项... --...
1. **编程式事务**:在需要精细控制的场景,如权限管理模块,采用编程式事务管理。 2. **声明式事务**:在多数业务场景,如办公用品管理,使用声明式事务,简化事务处理。 3. **无事务处理**:对于无需事务支持的...
5. **编程模式**:在J2SE应用中,开发者通常采用编程式事务管理,即在代码中显式调用UserTransaction的开始、提交和回滚方法。而在J2EE应用中,通常使用声明式事务管理,由容器自动管理事务边界。 6. **事务属性**...
编程式事务管理使用 TransactionTemplate 或者直接使用底层的 PlatformTransactionManager。声明式事务管理有基于 tx 和 aop 名字空间的 xml 配置文件和基于 @Transactional 注解的方式。 为什么使用 Spring 来进行...
4. **事务配置**:通常采用编程式事务管理或声明式事务管理,通过 @Transactional 注解来控制事务的边界。 5. **Controller层**:在 Controller 中调用 Service 层方法,传递参数并返回结果,由 Spring MVC 负责视图...
4. **事务控制**:根据项目需求,可能采用编程式事务管理或者基于Spring的声明式事务管理,确保数据的一致性。 5. **性能优化**:MyBatis允许使用预编译的SQL语句(PreparedStatement),减少解析和编译时间,提高...
在Java应用中,通常使用容器管理的事务(CMT),在Spring框架中则常采用编程式事务管理。事务是数据库操作的基本单元,确保数据的一致性和完整性。 【实体关系】 Hibernate支持多种对象关系映射,如一对一、一对多...
在Spring环境中,通常采用编程式事务管理或声明式事务管理,确保数据的一致性。 综上所述,MyBatis 3 提供了一种简单而强大的方式来进行数据库操作。通过学习这个简单的示例,你可以理解其基本操作流程,并以此为...
而且编程式事务管理会造成事务管理代码和被管理的代码耦合,不符合软件工程中“高内聚、低耦合”的要求。若采用AOP,则可以避免以上缺陷。 作者博客的示例代码:http://legend2011.blog.51cto.com/3018495/1239139。
Spring框架提供了两种主要类型的事务管理方式:编程式事务管理和声明式事务管理。声明式事务管理通过XML配置或注解的形式定义事务边界,使得业务逻辑与事务控制分离。 ### 描述分析:XML配置示例 提供的XML配置...
编程式事务管理需要在代码中手动开启、提交和回滚事务,而声明式事务管理则依赖于Spring等框架进行配置。 **3. 编程式事务管理** 在Java中,你可以使用`java.sql.Connection`对象来管理事务。在业务逻辑代码中,你...
然而,在实际开发过程中,经常会遇到一些关于Spring事务的问题,如事务失效、事务回滚、大事务问题以及编程式事务等。本文将深入探讨这些问题,并给出相应的解决方案。 #### 一、事务不生效的原因及解决办法 1. **...
编程式事务管理需要在代码中显式地调用开始、提交、回滚等事务操作,而声明式事务管理则是通过配置或注解来定义事务边界,更加简洁且易于维护。 1. 声明式事务管理的优势: - 将事务管理逻辑与业务逻辑分离,降低...
Spring 提供了多种方式来配置事务管理,主要分为编程式事务管理和声明式事务管理。下面将详细介绍这五种Spring 事务配置方式。 1. **基于AOP代理的声明式事务** 这是最常见的配置方式,通过AOP代理在方法调用前后...
编程式事务管理允许在代码中显式地开始、提交、回滚事务。这种方式通常在需要更细粒度控制事务时使用。例如,可以使用PlatformTransactionManager接口的begin、commit和rollback方法来管理事务。 5. **XML配置的...
如果采用XML配置方式,则需要在Spring的XML配置文件中进行事务配置,并通过aop命名空间来定义事务通知及切点,从而实现声明式事务管理。 对于开发者而言,Spring与MyBatis的整合简化了事务和持久层的处理,减少了...