SSH项目--国税(框架整合)

1.添加struts2的jar包和配置文件
添加jar包:
commons-fileupload-1.3.1.jar,commons-io-2.2.jar,commons-lang-2.4.jar,commons-lang3-3.2.jar,freemarker-2.3.19.jar,ognl-3.0.6.jar,struts2-core-2.x.jar
,struts2-spring-plugin-2.x.jar,xwork-core-2.x.jar到web-inf/lib目录下。
添加struts.xml到src目录下。可在“struts-2.x\apps\struts2-blank\WEB-INF\classes”下复制。
在struts.xml中添加几个常用属性:
<!-- 禁用动态方法访问 -->
<constant name="struts.enable.DynamicMethodInvocation"value="false" />
<!-- 配置成开发模式 -->
<constant name="struts.devMode" value="true" />
<!-- 配置拓展名为action -->
<constant name="struts.action.extention" value="action"/>
<!-- 把主题配置成simple -->
<constant name="struts.ui.theme" value="simple" />


配置web.xml:添加struts2 过滤器:
<filter>
       <filter-name>struts2</filter-name>  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
       <filter-name>struts2</filter-name>
       <url-pattern>*.action</url-pattern>
    </filter-mapping>


2.添加hibernate的jar包和配置文件
添加hibernate jar包:
 hibernate3.jar,lib/requiredconfentity/*.hbm.xml</value>
<value>classpath:cn/itcast/test/entity/*.hbm.xml</value>
</list>
</property>
</bean>
编写实体类Person和对应的映射文件Person.hbm.xml:
public class Person implements Serializable {
private String id;
private String name;
public Person() {
}
public Person(String id, String name) {
this.id = id;
this.name = name;
}
public Person(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/HibernateMapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="cn.itcast.test.entity.Person"table="person">
<id name="id" type="java.lang.String">
<column name="id" length="32" />
<generator class="uuid.hex" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="20" not-null="true" />
</property>
</class>
</hibernate-mapping>


编写完实体映射文件后,用JUnit测试hibernate和spring的整合,在测试用例中启动spring容器的时候将扫描Person类根据其创建数据库表,并在测试时将向表插入一条数据。
 测试hibernate,添加一个人员
@Test
public void testHibernate() {
SessionFactory sf =(SessionFactory)ctx.getBean("sessionFactory");
 
Session session = sf.openSession();
Transaction transaction = session.beginTransaction();
//保存人员
session.save(new Person("人员1"));
transaction.commit();
session.close();
}


测试框架分层的整合(service 与 dao)
 
TestDao 中新增方法 save ,在TestService中通过调用testDao来保存人员信息。
public class TestDaoImpl extends HibernateDaoSupport implementsTestDao {
@Override
public void save(Person person) {
getHibernateTemplate().save(person);
}
 
}
配置test-spring.xml:
    <bean id="testDao"class="cn.itcast.test.dao.impl.TestDaoImpl">
    <propertyname="sessionFactory" ref="sessionFactory"></property>
    </bean>
@Service("testService")
public class TestServiceImpl implements TestService {
@Override
public void say() {
System.out.println("service saying hi.");
}
@Resource
TestDao testDao;
@Override
public void save(Person person) {
testDao.save(person);
}
}
@Test
public void testServiceAndDao() {
TestService ts = (TestService)ctx.getBean("testService");
ts.save(new Person("人员2"));
//System.out.println(ts.findPerson("4028eea54c8cdb1f014c8cdb20ab0000").getName());
}


3。配置spring事务管理
<!—事务管理-->
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!—事务通知-->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="find*" read-only="true" />
<tx:method name="get*" read-only="true" />
<tx:method name="load*" read-only="true" />
<tx:method name="list*" read-only="true" />
<tx:method name="search*" read-only="true" />
</tx:attributes>
</tx:advice>
<!—配置需要进行事务控制的类 -->
<aop:config>
<aop:pointcut id="serviceOperation" expre ssion="bean(*Service)"/>
<aop:advisor advice-ref="txAdvice"pointcut-ref="serviceOperation" />
</aop:config>


【注意:上面的pointcut  expr ession表示拦截以Service结尾的bean,或者可写成execution(* cn.itcast..service.impl.*.*(..))】
完善TestService接口和TestServiceImpl;利用service中的操作来验证上面配置的事务管理是否生效。
测试方法
@Test
public void testTransationReadOnly() throwsException{//只读事务,如果在只读事务中出现更新操作则回滚
TestService ts = (TestService)ctx.getBean("testService");
//故意在testserviceimpl的findperson方法中,新政一个person,即执行了写数据
//如果只读事物奇效,那么会报事物异常,新增的person也将失效
System.out.println(ts.findPerson("40284702558212650155821266d20000").getName());
}
@Test
public void testTransationRollback(){//回滚事务,如果操作中出现有任务异常则回滚先前的操作
//故意在testserviceimpl的save方法中,在新增person后使用除以0的报错
//使svae方法体内抛出异常信息,如果事物起效,则新增person进行回滚,也即新增person不成功
TestService ts = (TestService)ctx.getBean("testService");
ts.save(new Person("人员4"));
}


Dao中:
@Override
public Person findPerson(Serializable id) {
return getHibernateTemplate().get(Person.class, id);
}
Service中:
@Override
public void save(Person person) {
testDao.save(person);
int tem = 1 / 0;
}
@Override
public Person findPerson(Serializable id) {
save(new Person("test"));
return testDao.findPerson(id);
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值