思维导图(基本配置)
1. 需要引入的包
2 .spring-config.xml 的配置
<!-- 链接数据库 外部配置文件扫入 --> <context:property-override location="classpath:db_orcl.properties" /> <!-- 扫描器 --> <!-- service , dao , 的实现类 和 action类 由spring 管理 --> <context:component-scan base-package="com.maya.service.impl,com.maya.action,com.maya.dao.impl" /> <!-- 配置数据源 (spring 提供的数据源 不支持连接池)--> <!-- Driver Manager Data Source --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" /> <!-- 配置 Hibernate 核心类 SessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <!-- Hibernate 获取sessionFactory 要有一个数据库链接 所以把上面 连接到的数据源给sessionFactory --> <property name="dataSource" ref="dataSource"></property> <!-- 读取 Hibernate.dfg.xml 的配置 --> <property name="configLocation" value="classpath:hibernate.cfg.xml"></property> <!-- 读取 Hibernate 对实体类的映射文件 --> <property name="mappingLocations" value="classpath:com/maya/model/*.hbm.xml"></property> </bean> <!-- HibernateTemplate --> <!-- 进行数据库操作的时候 , Session , SessionFactory , Transaction等 类的 close, commit 等操作 全由spring去做 --> <!-- 每次调用获取一个新的实例 sessionFactory.openSession(); 有用原本的 没有新实例化一个 sessionFactory.getCurrentSession(); --> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- HIbernate 的事务管理器 --> <bean id="hibernateTransactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!--开启声明式事物/就是开上面那个,两个名必须一致 --> <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven> <!--面向切面,自己声明的 --> <bean id="logginAspect" class="com.maya.util.LogginAspect" /> <!-- 面向切面编程(AOP) 依赖注入DI(控制反转IOC)--> <!-- aop 面向切面编程--> <aop:config proxy-target-class="true"> <!-- 定义一个切点 *返回值 com.maya.service.任意类.任意名.任意后缀(参数)--> <aop:pointcut expression="execution(* com.maya.service.*.*(..))" id="appointcut" /> <!-- 关联事物的传播属性 --> <aop:advisor pointcut-ref="appointcut" advice-ref="txadvice" /> <!--定义切面类的执行方法 --> <aop:aspect ref="logginAspect"> <aop:after method="afterMethod" pointcut-ref="appointcut" /> <aop:before method="afterMethod" pointcut-ref="appointcut" /> <aop:after-returning method="returnMethod" pointcut-ref="appointcut" /> <aop:after-throwing method="throwMethod" pointcut-ref="appointcut" /> </aop:aspect> </aop:config> <!--配置事物的传播属性 --> <tx:advice id="txadvice" transaction-manager="hibernateTransactionManager"> <!--指定哪些方法使用事物 --> <tx:attributes> <tx:method name="insert*" propagation="REQUIRED" read-only="false" /> <tx:method name="delete*" propagation="REQUIRED" read-only="false" /> <tx:method name="update*" propagation="REQUIRED" read-only="false" /> <tx:method name="select*" propagation="SUPPORTS" read-only="true" /> </tx:attributes> </tx:advice>
3. hibernate.cfg.xml的配置
1. 选择Hibernate Configuration File (cfg.xml) 后 选择放在 src下 下一步
没有这个视图 自行打开
hibernate.cfg.xml 文件 的创建
4. Struts2.xml 的配置
注意版本号!
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.devMode" value="true" /> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <!-- 动态设置参数 --> <package name="page" namespace="/page" extends="struts-default"> <action name="to*" class="com.maya.action.PageAction" method="{1}"> <result>/WEB-INF/page/addStudent.jsp</result> </action> </package> <!-- 前段传输路径 项目名/student/insertS --> <package name="student" namespace="/student" extends="struts-default"> <!-- 去com.xxx.Action底下找studentAction 里面的 insertS 方法 执行 --> <action name="insertS" class="studentAction" method="insertS"> <!-- 根据返回值得 不同 转到不同页面 --> <result name="success">/WEB-INF/page/addStudent.jsp</result> <result name="error">/WEB-INF/page/addStudent.jsp</result> </action> </package> </struts>
5. 过滤文件 hibernate.reveng.xml
选择第三个
6 . 链接数据库
3.的过程
1 .StudentAction
// 需要被 继承使用 public class BaseAction extends ActionSupport { private static final long serialVersionUID = 1L; public HttpServletRequest getrequest() { return ServletActionContext.getRequest(); } public HttpSession getSession() { return getrequest().getSession(); } }
// 继承BaseAction public class StudentAction extends BaseAction{ private static final long serialVersionUID = 1L; private Student student; @Autowired private StudentService ss; public String insertS() { Serializable slb = ss.insertStudent(student); if (slb != null) { return SUCCESS; } return ERROR; }
2 .StudentService
@Repository public class StudentServiceImpl implements StudentService{ @Autowired private BaseDao<Student> bd; // 使用 公用的方法 需要泛型(知识点 泛型注入) @Override public Serializable insertStudent(Student s) { return bd.save(s); } }
3 . BaseDaoImpl
@Repository public class BaseDaoImpl<T> implements BaseDao<T> { @Autowired private HibernateTemplate ht; // 需要 获取HibernateTemplate @Override public Serializable save(T o) { //使用 里面的方法操作数据库 return ht.save(o); } @Override public void update(T o) { ht.update(o); } @Override public void delet(T o) { ht.delete(o); }; }
最后整理流程