Annotation的方式是通过注解的方式把Struts2中的Action、Dao层的实现类、Service层的实现类交由Spring管理,不需要在配置文件中进行配置。但为了方便,事务的管理依然使用的是Schema的方式。如果有需要,可以参照4.3.2中的方式,使用@Transactional对service层进行事务管理。

5.4.1前期工作

给工程加入Spring与Hihernate的功能,这个步骤也5.1.1的相同。

http://blog.csdn.net/p_3er/article/details/10526617

打开Spring的扫描功能。

配置数据源。

配置SessionFactory。由于我们的实体类也是基于Annotation的,所以SessionFactory的class是AnnotationSessionFactoryBean。

把数据表生成Annotation的形式管理映射的实体类。

配置Schema方式的事务管理。

web.xml的配置与5.2.1一样。

http://blog.csdn.net/p_3er/article/details/10526617

由于struts2的配置都由注解完成,所以我们不再需要struts.xml配置文件。

5.4.2完整的Spring配置文件

<?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:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"><!-- 打开Spring的扫描功能 --><context:component-scan base-package="cn.framelife.ssh"></context:component-scan><!-- 数据源 --><bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName"value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql://127.0.0.1:3306/test"></property><property name="username" value="root"></property><property name="password" value="test"></property></bean><!-- 配置SessionFactory.如果实体映射是基于注解的话,使用AnnotationSessionFactoryBean --><bean id="sessionFactory"class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"><!-- 引入数据源 --><property name="dataSource"><ref bean="dataSource" /></property><!-- Hibernate的相关配置 --><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop></props></property><!-- 映射文件或者映射类的路径。这是通过MyEclipse中的工具把数据表生成实体类及映射的时候自动生成的。 --><property name="annotatedClasses"><list><value>cn.framelife.ssh.entity.User</value></list></property></bean><!-- 配置事务 --><bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"></property> </bean><tx:advice id="txAdvice" transaction-manager="txManager"><tx:attributes><tx:method name="get*" read-only="true"/><tx:method name="add*" rollback-for="Exception"/></tx:attributes></tx:advice><aop:config><aop:pointcut id="pointcut"expression="execution(* cn.framelife.ssh.service..*(..))" /><aop:advisor pointcut-ref="pointcut" advice-ref="txAdvice" /></aop:config>
</beans>

5.4.3*DaoImpl

@Repository
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {/*** 给HibernateDaoSupport注入一个SessionFactory.* 如果是xml的话,是直接把sesionFactory注入就行了。而这里需要一个额外的setter方法。*/@Autowiredpublic void setMySessionFactory(SessionFactory sessionFactory){super.setSessionFactory(sessionFactory);}/*** 保存或更新对象*/public void saveOrUpdateUser(User user) {getHibernateTemplate().saveOrUpdate(user);}/*** 根据id删除一条记录*/public void deleteById(Integer id) {getHibernateTemplate().delete(this.findUserById(id));}/*** 根据id获取一个记录对象*/public User findUserById(Integer id) {return (User) getHibernateTemplate().get(User.class, id);}/*** 根据Hql语句,以及开始位置、最大多少条数进行分页查询*/public List<User> findUserByLimit(final String hql, final int start,final int limit) {@SuppressWarnings("unchecked")List<User> list = getHibernateTemplate().executeFind(new HibernateCallback() {public Object doInHibernate(Session session) throws HibernateException,SQLException {Query query = session.createQuery(hql);query.setFirstResult(start);query.setMaxResults(limit);List list = query.list();return list;}});return list;}/*** 根据一个User对象查询与这个对象中的非空属性一致的数据*/public List<User> findUserByExample(User user) {return getHibernateTemplate().findByExample(user);}/*** 根据Hql语句查询多条记录对象*/public List<User> findUserByHql(String hql) {return getHibernateTemplate().find(hql);}
}

5.4.4*ServiceImpl

@Service
public class UserServiceImpl implements UserService {@Autowired private UserDao userDao;public void addUser(User user) {userDao.saveOrUpdateUser(user);}
}

5.4.5*Action

/*** prototype 设置一次请求一个action对象*<package name="a" extends="struts-default" namespace="/user"><action name="add" class="userAction"><result name="success">/success.jsp</result></action></package>* @ParentPackage相当于package extends* @Namespace 相当于package namespace* @Results 相当于result结果集*/
@Controller
@Scope("prototype")
@ParentPackage(value = "struts-default")
@Namespace("/user")
@Results({@Result(name="success",value="/success.jsp"),
})
public class UserAction {
/** 如果参数过多的话,应该使用struts2驱动模型*/private String username;private String password;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Autowired private UserService userService;/*** 如果想执行这个方法。页面上调用 user/user.action.*/public String execute(){User user = new User();user.setUsername(username);user.setPassword(password);userService.addUser(user);return "success";}/*** 如果执行的是这个方法。页面调用user/user!next.action*/public String next(){System.out.println("aaaaaaaaaaa");return "success";}
}

转载于:https://www.cnblogs.com/james1207/p/3290037.html

第五章 Spring3.0 、Hibernate3.3与Struts2的整合 基于Annotation相关推荐

  1. 第五章 USB2.0布线及注意事项

    第五章 USB2.0布线及注意事项 5.1 USB2.0 PCB布线关键 USB是一种快速.双向.同步传输.廉价.方便使用的可热拔插的串行接口.由于数据传输快,接口方便,支持热插拔等优点使USB设备得 ...

  2. 边做边学小型封装--利用主流框架进行Dao层通用化,Spring3.0+Hibernate3.3.2通用Dao层整合(四)...

    了解Dao层的创建和HibernateSupportDao后,忘了要把Spring3.0的Jar包加进去lib文件夹里面,由于Spring3.0开始没有把所有需要有关联的Jar包跟功能整合包放在一起, ...

  3. SSH (Struts2+Spring3.0+Hibernate3)框架(二) 框架的配置

    一.准备工作: 1. JDK -> jdk1.6.0_17 安装(环境变量配置): JAVA_HOME = C:\ jdk1.6.0_17; PATH = %JAVA_HOME%\bin; %J ...

  4. Myeclipse10下搭建SSH框架(图解)Struts2.1+Spring3.0+Hibernate3.3

    一.建立一个Web Project  ①点击File→New→Web Project 新建一个Web工程.     ②在Project Name中输入项目名ssh,在J2EE Specificatio ...

  5. 添加日志_第五章springboot2.0添加aop日志实现记录请求地址

    1. 添加spring-boot-starter-aop包 <dependency> <groupId>org.springframework.bootgroupId> ...

  6. Java Web笔记之Struts2.1 +Hibernate3.3 +Spring3.0

    2019独角兽企业重金招聘Python工程师标准>>> 1.Struts2 1.1.了解Struts2 Struts2是基于MVC设计模式的Java Web框架技术之一,按照MVC设 ...

  7. 第二十五章补充内容 5 不能为0的变量

    // 第二十五章补充内容 5 不能为0的变量 /*#define DEBUG #include <iostream> #include <string> using names ...

  8. 精通Web Analytics 2.0 (7) 第五章:荣耀之钥:度量成功

    精通Web Analytics 2.0 (7) 第五章:荣耀之钥:度量成功 精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第五章:荣耀之钥:度量成功 我们的分析师常常得不到我 ...

  9. 【正点原子Linux连载】第三十五章 Linux内核顶层Makefile详解 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

最新文章

  1. Jenkins之gitlab配置
  2. Leetcode69场双周赛-第三题5962. 连接两字母单词得到的最长回文串
  3. Hystrix默认超时时间
  4. 一份干货满满的PPT,答辩加分手到擒来!
  5. textureview 缩放_View的双指缩放以及移动
  6. java hssfsheet_Java中,使用HSSFSheet创建excel模板如何创建一列两行的数据?
  7. (转)MapReduce源码分析总结
  8. Java—以当前系统时间生成随机数
  9. HDU3853:LOOPS
  10. 高通WCNSS驱动简析
  11. STM32 USB接口 一键下载电路详解与过程分析
  12. SNPS IP LPDDR4 调试
  13. 给推荐系统加入先验知识的方法总结
  14. 令人比较失落的IT圈子-关于华为裁员
  15. zblog火车头采集经验
  16. GCD中dispatch_barrier的使用方法
  17. 2018年11月25日ICPC焦作站参赛总结
  18. 微信小程序别踩白方块(有效果图)
  19. python设计一个动物类_【Python】每日一练:设计圆类计算周长和面积、设计动物类...
  20. 网友说:数据分析师是青春饭,年龄影响很大

热门文章

  1. 大型网站系统架构实践(一)从简单到复杂
  2. win7+vs2008+windows mobile6.5.3
  3. Daily Scrum M2 11-5
  4. iOS SwiftUI 开发实机测试 TextField 不显示字
  5. Redis 笔记之 Java 操作 Redis(Jedis)
  6. Linux操作Oracle(16)——Oracle扩容报错:ORA-01144_表空间数据文件超出最大限制
  7. 面试数据分析岗,怎么提升一倍成功率?让过来人给你支支招
  8. Address already in use: bind JVM端口被占用解决方法
  9. 帆软报表设计器菜单栏介绍之一
  10. )AIR程序打包/绿化,脱离air runtimes(AIR运行环境)的方法