代码改变世界

ssh (Spring , Struts2 , Hibernate)框架的配置使用

2018-03-07 11:13  澄序源  阅读(382)  评论(0编辑  收藏  举报

思维导图(基本配置)

 

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);
	};
}

 

最后整理流程