对于spring aop 是如何管理事务的,请看一下:http://bbs.csdn.net/topics/290021423

1.applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:p="http://www.springframework.org/schema/p"    xmlns:aop="http://www.springframework.org/schema/aop"   <!-- 新加入 -->xsi:schemaLocation="     http://www.springframework.org/schema/beans      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   http://www.springframework.org/schema/aop      http://www.springframework.org/schema/aop/spring-aop-3.0.xsd     http://www.springframework.org/schema/tx      http://www.springframework.org/schema/tx/spring-tx-3.0.xsd   "> <!--新加入 datasource --><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/hjzgg_test?characterEncoding=UTF-8" /><property name="username" value="root" /><property name="password" value="hjzgg5211314" /></bean><bean id="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="configLocation"value="classpath:hibernate.cfg.xml"></property><!--新加入 将dataSource注入到sessionFactory中 --><property name="dataSource" ref="dataSource"></property><property name="hibernateProperties"><value>hibernate.dialect=org.hibernate.dialect.MySQL5Dialecthibernate.hbm2ddl.auto=updatehibernate.show_sql=truehibernate.format_sql=falsehibernate.cache.use_second_level_cache=truehibernate.cache.use_query_cache=falsehibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider           <!--hibernate.current_session_context_class=thread  不需要了--></value></property><!--通过配置文件的方式获取数据源--><property name="mappingResources"><list><!-- 以下用来列出所有的PO映射文件 --><value>person.cfg.xml</value></list></property>       </bean><bean id="transactionManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><bean id="personDao" class="com.xunchang.PersonDaoImpl"><!-- 采用依赖注入传入SessionFactory的引用 --><property name="sessionFactory" ref="sessionFactory"/></bean><bean id="service" class="com.hjzgg.service.XunChageService"><property name="personDao" ref="personDao"/></bean><bean id="login" class="com.xunchang.LoginAction">       <property name="service" ref="service"/></bean><!-- 配置那些类的方法进行事务管理,需要aopalliance-1.0.jar和aspectjweaver.jar,当前com.neusoft.leehom.service包中的子包,  类中所有方法需要,还需要参考tx:advice的设置 -->  <!-- 需要引入tx的命名空间 -->  <!-- 这是事务通知操作,使用的事务管理器引用自 transactionManager -->   <tx:advice id="txAdvice" transaction-manager="transactionManager">  <tx:attributes>  <!-- 指定哪些方法需要加入事务,这里懒惰一下全部加入,可以使用通配符来只加入需要的方法 -->  <tx:method name="insert*" propagation="REQUIRED" />  <tx:method name="update*" propagation="REQUIRED" />  <tx:method name="delete*" propagation="REQUIRED" />  <tx:method name="get*" propagation="REQUIRED" read-only="true"/>  <tx:method name="query*" propagation="REQUIRED" read-only="true"/>  <tx:method name="*" propagation="REQUIRED" />  </tx:attributes>  </tx:advice>   <!-- 需要引入aop的命名空间 -->  <aop:config>  <!-- 切入点指明了在执行Service的所有方法时产生事务拦截操作 -->  <aop:pointcut id="daoMethods" expression="execution(* com.hjzgg.service.*.*(..))" />      <!-- 定义了将采用何种拦截操作,这里引用到 txAdvice -->  <aop:advisor advice-ref="txAdvice" pointcut-ref="daoMethods" /></aop:config><tx:annotation-driven transaction-manager="transactionManager" />
</beans>

2. dao层代码

package com.xunchang;import java.util.List;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;public class PersonDaoImpl implements PersonDao{private SessionFactory sessionFactory;  public Session getSession() {  return sessionFactory.getCurrentSession();  }  public SessionFactory getSessionFactory() {  return sessionFactory;  }  public void setSessionFactory(SessionFactory sessionFactory) {  this.sessionFactory = sessionFactory;  } @Overridepublic Person get(Integer id) {return (Person) this.getSession().get(Person.class, id);}@Overridepublic void save(Person ps) {this.getSession().save(ps);}@Overridepublic List<Person> findAllPerson() {/**    问题: home402 is not mapped [from home402];*    最后发现了问题所在,hql查询时使用的from Xxx,Xxx不是实体类的名称,而是 EntityName (Hibernate注解)。如:@Entity@Table(name="QING_AO_CENTER_INFO")public class QingAoCenterInfo {......}此处,@Entity后并没有显示的指明EntityName,因此默认采用实体类的名称。@Entity(name="QING_AO_CENTER_INFO")@Table(name="QING_AO_CENTER_INFO")public class QingAoCenterInfo {......}可以发现,显示地指明了 EntityName,因此在使用hql查询的时候,要from   QING_AO_CENTER_INFO,而不是from  QingAoCenterInfo ;centerList = manager.find("from QING_AO_CENTER_INFO center where center.type = ? and center.centerName = ?", new Object[]{type,centerName});*/Session session = this.getSession();
//      Transaction tran = session.beginTransaction();session.save(new Person(null, "我是hjzgg", 23));List<Person> list = session.createQuery("from Person").list();
//      tran.commit();return list;}}

3.service层部分代码:

package com.hjzgg.service;import java.util.List;import com.xunchang.Person;
import com.xunchang.PersonDao;public class XunChageService {private PersonDao personDao;public Person get(Integer id){return personDao.get(id);}public void save(Person ps){personDao.save(ps);}public List<Person> findAllPerson(){return personDao.findAllPerson();}public PersonDao getPersonDao() {return personDao;}public void setPersonDao(PersonDao personDao) {this.personDao = personDao;}
}

4.action部分代码:

package com.xunchang;import java.util.List;import com.hjzgg.service.XunChageService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport {private XunChageService service;@Overridepublic String execute() throws Exception{List<Person> list_person =  service.findAllPerson();ActionContext.getContext().getSession().put("person", list_person);return "success";}public XunChageService getService() {return service;}public void setService(XunChageService service) {this.service = service;}}

5.和数据库映射的pojo:

package com.xunchang;import java.io.Serializable;
/**待解决问题,为什么一定要实现 Serializeable
*/
public class Person implements Serializable{private Integer personId;private String person_name;private Integer person_age;public Person(){}public Person(Integer personId, String person_name, Integer person_age) {super();this.personId = personId;this.person_name = person_name;this.person_age = person_age;}public Integer getPersonId() {return personId;}public void setPersonId(Integer personId) {this.personId = personId;}public String getPerson_name() {return person_name;}public void setPerson_name(String person_name) {this.person_name = person_name;}public Integer getPerson_age() {return person_age;}public void setPerson_age(Integer person_age) {this.person_age = person_age;}
}

6.hibernate映射文件xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.xunchang"><class name="Person" table="home402"><!-- 定义持久化类的表示属性 --><id name="personId" column="personId" type="java.lang.Integer"><!-- 定义主键生成策略 --><generator class="identity"/></id><property name="person_name" column="person_name" type="java.lang.String"/><property name="person_age" column="person_age" type="java.lang.Integer"/></class>
</hibernate-mapping>

7.struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts><package namespace="/" name="struts2" extends="struts-default">  <!-- package中的标签必须按照如下顺序配置result-types,interceptors,default-interceptor-ref,default-action-ref,default-class-ref,global-results,global-exception-mappings,action*(就是所有的action放到最后)--><!-- 自定义拦截器 ,如果有拦截器,必须放在package标签内的第一位--><interceptors><!-- 在这里可以添加自己的拦截器<interceptor name="myInterceptor" class="自定义pojo类"></interceptor>--><interceptor-stack name="myInterceptorStack"><!--  <interceptor-ref name="myInterceptor"></interceptor-ref>--><interceptor-ref name="defaultStack"></interceptor-ref></interceptor-stack></interceptors>  <global-results><result></result></global-results><action name="login" class="login"><result name="success">/servlet/MyServlet</result></action></package>
</struts>    

转载于:https://www.cnblogs.com/hujunzheng/p/4372706.html

s2sh框架搭建(基于spring aop)相关推荐

  1. 搭建基于Spring Cloud的微服务应用

    原文链接 在2017云栖大会-上海峰会上阿里云技术专家李斌做了题为<搭建基于spring Cloud的微服务应用>的分享.随着时代的发展,用户对于应用服务的要求越来越高,单体应用已经无法满 ...

  2. 基于Spring AOP的统一响应体的实现(注解版)

    基于Spring AOP的统一响应体的实现(注解版) 一.前言 在上一篇系列中 我们 统一参数校验,统一结果响应,统一异常处理,统一错误处理,统一日志记录,统一生成api文档, 对于统一数据响应返回规 ...

  3. 基于Spring AOP实现权限控制

    基于Spring AOP实现一个简单的接口权限 1.定义自定义注解 //注解的作用类型:方法.类 @Target({ElementType.METHOD,ElementType.TYPE}) @Ret ...

  4. 网站框架搭建——基于Django框架的天天生鲜电商网站项目系列博客(二)

    系列文章目录 需求分析--基于Django框架的天天生鲜电商网站项目系列博客(一) 网站框架搭建--基于Django框架的天天生鲜电商网站项目系列博客(二) 用户注册模块--基于Django框架的天天 ...

  5. android开发ssh框架搭建,基于SSH框架的Android系统的研究

    摘要: 本文设计开发了一个基于SSH框架的酒店Android手机查询系统.该系统采用面向对象的设计思想进行分析与设计,利用Eclipse,MyEclipse,Android SDK,Tomcat和My ...

  6. 基于Spring AOP的JDK动态代理和CGLIB代理

    一.AOP的概念  在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的 ...

  7. java aop管理权限_基于spring aop 权限管理系统原型 - andyj2ee - BlogJava

    此权限管理系统把待访问的业务层方法做为权限管理中的资源,通过spring aop 对接口方法进行拦截,来实现权限的管理,可以实现细粒度的权限控制. 在上文体验了spring aop 一些特性,aop ...

  8. 搭建基于spring MVC框架 + RESTful架构风格技术总结

    2019独角兽企业重金招聘Python工程师标准>>> 实战篇: 在SpringMVC框架中搭建RESTful架构风格来完成客户端与服务器端的低耦合度.可扩展性.高并发与大数据流量的 ...

  9. 基于Spring Aop及log4j2的MDC实现全链路调用跟踪(traceid)

    环境: Springboot:2.2.3.RELEASE Spring-boot-starter-log4j2: 2.2.2.RELEASE jdk:1.8 目标: 实现Springboot框架下的全 ...

最新文章

  1. Kotlin for 循环使用
  2. 全面解读PyTorch内部机制
  3. JavaScript之图片的无缝滚动
  4. AndroidStudio中调试时一直显示waiting for debugger
  5. npm执行命令后无任何响应(windows下)
  6. 传128GB版iPad4售价为799/929美元
  7. VMware vSphere HA深入解析
  8. 关于qq创始人----马化腾的一些琐事
  9. 计蒜客 - 守望者的逃离
  10. hadoop是什么_Hadoop精华问答 | hadoop能干什么?
  11. hadoop2.6.0的eclipse插件编译和设置
  12. 【VS环境配置】海康SDK二次开发【亲测有用】
  13. 【权限设计】权限系统的设计——由浅至深
  14. 天正电气图例_cad天正电气常用快捷键整理
  15. spring MVC 导出excel
  16. Word 重复引用同一个脚注
  17. nginx 使用配置解释
  18. python 山脊图_纯Python绘制满满艺术感的山脊地图
  19. Python文件的读写以及操作excel
  20. Ubuntu 设置搜狗输入法 Win+空格 Win+Space切换

热门文章

  1. Canal 1.1.5 启动报错:caching_sha2_password Auth failed
  2. Vue + Spring Boot 项目实战(四):前后端结合测试(登录页面开发)
  3. (需求实战_03)_shell脚本 sftp协议下载文件
  4. Flowable 生成工作流图片时, 不显示文字显示方框
  5. MyBatisPlus_AR篇_入门试炼_06
  6. python定期自动运行_干货分享 | 适合 Python 入门的 8 款强大工具,不会就你还不知道吧!...
  7. datagrid如何获取一行数据中的某个字段值_SQL中常见的面试题
  8. java 如何循环执行一个对象_Java基础:如何定义好一个方法和进行方法重载
  9. 二本 计算机专业2017分数线,2017年二本心理学专业大学排名及分数线
  10. qt中使窗口的大小随窗口的内容大小进行调整