1、创建一个web project
2、add maven support 添加一个maven支持
3、编辑pom.xml文件
数据库的驱动依赖
hibernate依赖
struts2的依赖
spring依赖
其他的工具包的依赖
4、写持久化类和映射文件和配置文件
说明:
src/main/java
com.itheima09.oa.domain
Person.java
Person.hbm.xml
src/main/resources
hibernate
hibernate.cfg.xml
com.itheima09.oa.domain
Person.hbm.xml
5、写spring的配置文件,引入sessionFactory
6、测试
在src/test/java中创建测试类
7、在spring的配置文件中开启两个注解解析器
类扫描的
<context:component-scan base-package="com.itheima09.oa"></context:component-scan>
事务的
<tx:annotation-driven transaction-manager="transactionManager"/>
8、写dao层和service层的类和接口
注意:在service层中
@Service("personService")
public class PersonServiceImpl implements PersonService{
@Resource(name="personDao")
private PersonDao personDao;
/**
* spring基于注解的事务配置精确到了某一个方法
*/
@Transactional(readOnly=false)
public void savePerson(Person person) {
// TODO Auto-generated method stub
this.personDao.savePerson(person);
}
}
@Transactional:该注解可以用于方法,也可以用于类
该注解都可以保持默认值,其中readOnly的默认值为false
所以只要加在类上,所有的方法都有读写事务,这样效率比较低
所以一般加在方法上
9、测试spring的声明式事务处理
10、写action 复用action
public abstract class BaseAction<T> implements ModelDriven<T>{
public abstract BaseService<T> getBaseService();
private Class modelDriverClass;
private T t;
public BaseAction() {
//获取 BaseAction<T>
ParameterizedType type = (ParameterizedType)this.getClass().getGenericSuperclass();
//获取T的class形式
this.modelDriverClass = (Class)type.getActualTypeArguments()[0];
try {
this.t = (T) this.modelDriverClass.newInstance();//为t创建对象
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public T getModel() {
// TODO Auto-generated method stub
return this.t;
}
/**
* 查询
*/
public String showData(){
Collection<T> dataList = this.getBaseService().queryEntry();
ActionContext.getContext().put("dataList", dataList);
return "list";
}
}
说明:
1、利用泛型让模型驱动重用了
2、把action层最常用的方法集成到了BaseAction
11、编写struts2的配置文件
12、在src/main/webapp/web-inf/
jsp
person
list.jsp
13、在web.xml中