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


    思维导图(基本配置)

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

    最后整理流程

  • 相关阅读:
    迪杰斯特拉(Dijkstra)算法描述及理解
    KMP初步
    网络流初步
    Cutting Codeforces Round #493 (Div. 2)
    优先队列小结
    树状数组初步理解
    分块思想
    树状数组-逆序对-HDU6318
    线段树
    8.12.5
  • 原文地址:https://www.cnblogs.com/bkyljk/p/8521212.html
Copyright © 2020-2023  润新知