SSM框架整合时applicationContext.xml文件的配置及详细解析
以下代码省略dao,service,action类的具体创建,主要是文件的相关配置
db.properties文件
driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:xe
name=hr
password=hr
没有加注解的.xml文件配置及解析见代码
<?xml version="1.0" encoding="UTF-8"?>
<!-- xmlns:context 配置信息参数化 -->
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"><!-- 一、加载db.properties配置文件,获得数据源 --><context:property-placeholder location="classpath:db.properties"/> <!-- spring与mybatis整合,即spring要将Mybatis的相关组件纳入工厂中1、DateSource:负责数据库的连接2、SqlSessionFactory :核心组件,负责生产SqlSession的,但它依赖于DateSource3、MapperScannerConfigurer:负责创建dao的实现类的对象,依赖于SqlSession--><!-- 二、创建连接池,有三个:dbcp,c3p0,druid,三个选用其中一个就可以 --><!--第一个:dbcp--><bean id="dbcp_pool" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><!-- 基本参数 --><property name="driverClassName" value="${driver}"></property><property name="url" value="${url}"></property><property name="username" value="${name}"></property><property name="password" value="${password}"></property><!-- 详细的其他参数 --><property name="maxActive" value="3"></property><property name="minIdle" value="1"></property><property name="initialSize" value="1"></property><property name="maxWait" value="3000"></property></bean><!--第二个:druid--><!-- 连接池:druid --><bean id="druid_pool" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"><!-- 基本参数 --><property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"></property><property name="username" value="hr"></property><property name="password" value="hr"></property><!-- 详细参数 --><!-- 连接池的最大连接对象 数量 --><property name="maxActive" value="3"></property><!-- 最少要空闲 1 个连接对象 --><property name="minIdle" value="1"></property><!-- 初始化连接池 要创建1个连接对象 --><property name="initialSize" value="1"></property><!-- 当向连接池索要连接时,如果没有空闲连接,最大等待的时长:毫秒 --><property name="maxWait" value="3000"></property><!-- 驱逐线程运行间隔 --><property name="timeBetweenEvictionRunsMillis" value="60000"></property><!-- 连接空闲超过100000ms 则成为一个可以被驱逐的对象 --><property name="minEvictableIdleTimeMillis" value="100000"></property><!-- 用于检测连接有效的 sql语句 (心跳) --><property name="validationQuery" value="select 1 from dual"></property><!-- 检测的时机 --><property name="testWhileIdle" value="true"></property><property name="testOnReturn" value="false"></property><property name="testOnBorrow" value="false"></property></bean><!-- 三、准备好连接池,创建一个工厂bean去创建一个复杂对象:准备sqlsessionfactorybean --><bean id="sqlSessionFactory1" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 在工厂里最重要的两件事就是 1数据源 、 2注册的mapper文件 --><property name="dataSource" ref="dbcp_pool"></property><property name="mapperLocations"><!-- 注册多个mapper文件 classpath:类路径,生成的类信息放在src文件同级目录下的lib的文件夹中,所以相当于src文件夹的位置开始后的路径--><list><value>classpath:com/qyy/dao/*Mapper.xml</value></list></property><!-- 为mapper文件中的实体定义缺省包路径 --><property name="typeAliasesPackage" value="com.qyy.entity"></property></bean><!-- 四、mapperScannerConfigurer:生产dao的实现类的对象,并纳入工厂管理行为:1.扫描所有的dao接口2.根据提供的daoMapper文件信息和Sqlsession,构建dao的实现类3.将对象纳入工厂处理,且id默认为:首字母小写的接口类名--><bean id="mapperScannerConfigurer1" class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- 得到所有的接口,即其所在的包路径 ,多个包之间可以用逗号或分好分割--><property name="basePackage" value="com.qyy.dao"></property><!-- 获得sqlsessionfactory,即获得sqlsession和注册的mapper文件但是当当前工厂中只有一个sqlSessionFactory,则可以省略不写--><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory1"></property></bean><!-- 创建service,并为sevice注入相应的dao --><bean id="userService" class="com.qyy.service.UserServiceImpl"><property name="userDao" ref="userDao"></property></bean><bean id="auctionService" class="com.qyy.service.AuctionServiceImpl"><property name="auctionDao" ref="auctionDao"></property></bean><bean id="recordService" class="com.qyy.service.RecordServiceImpl"><property name="recordDao" ref="recordDao"></property></bean> <!-- 利用spring进行sevice层的事务管理在mybatis中dao层的事务提交默认auto_commit修改为false,在service层进行事务控制在spring中,dao层的事务提交没有做修改,还是true,所以这点方便我们在dao层的测试在service层进行事务管理--><!-- 1、引入一个管理实务的半成品,虽然不是额外功能,但是持有连接,控制了事务管理的行为 --><bean id="tx" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><!-- 获得连接池,知道对那个数据库进行管理事务 --><property name="dataSource" ref="dbcp_pool"></property></bean><!-- 2、基于半成品,进一步对具体的service层具体的方法进行定制,生成最终的事务管理 器:Advice--><tx:advice id="txManager" transaction-manager="tx"><tx:attributes><!-- 如果事务要切入此方法,可以单独为此方法定制事务属性(*代表剩余其他的方法)有关查询的添加属性propagation="SUPPORTS" :事务的传播性, 如果已经有事务,则融入这个事务;如果没事务,以非事务环境运行有关增删改的操作增加属性rollback-for="Exception"事务只要出现异常就进行回滚--><tx:method name="find*" propagation="SUPPORTS"/><tx:method name="*" rollback-for="Exception"/></tx:attributes></tx:advice><!-- 编织 --><aop:config><aop:pointcut expression="execution(* com.qyy.service.UserServiceImpl.*(..))" id="pc"/><!-- 组装切面 --><aop:advisor advice-ref="txManager" pointcut-ref="pc"/></aop:config><!-- 创建一个action对象 --><bean id="userAction" class="com.qyy.action.UserAction" scope="prototype"><property name="userService" ref="userService"></property></bean></beans>
web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><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>/*</url-pattern></filter-mapping><!-- struts和spring整合1、矛盾点:spring工厂和StrutsPrepareAndExecuteFilter都会创建action实例对象2、整合:action的创建应该由spring来完成,因为带有一系列的依赖关系3、解决方法:监听项目的启动,当项目启动时触发行为:spring创建action的实例对象启动工厂时,需要spring配置文件会到项目中查找一个名为contextConfigLocation的context-param进而读取解析配置文件applicationContext.xml--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param>
</web-app>
补充:事务控制的参数解析
1. isolation=隔离级别
default (默认值==采用数据的默认的设置)read-uncommited 读未提交 (脏读,不可重复读)read-commited 读提交 (不可重复读)repeatable-read 可重复读 (幻影读)serialized-read 序列化读
隔离级别由近到远,则并发性降低,安全性提高
oracle只支持了 读提交(默认) 和 序列化读
mysql都支持了 可重复读(默认)
*事务并发时的安全问题:1>脏读:一个事务中 读到了其他事务中 未提交的数据2>不可重复读:一个事务中 多次读取相同的数据行,但是,结果不一致3>幻影读:一个事务中 多次读取同一张表,但是,数据行数不一致;查询时没有某数据,但是操作时,却提示存在此数据。
2.propagation=传播性
support = 如果已经有事务,则融入这个事务;如果没事务,以非事务环境运行required = 如果已经有事务,则融入这个事务;如果没事务,开启自己的事务 (默认值)
3.read-only:读写性
true:只读事务,事务中只出现查询行为false:读写事务,事务中可以出现curd行为 (默认值)
4.rollback-for:回滚时刻
1>如果事务中抛出 运行时异常(RuntimeException),则自动回滚2>如果事务中抛出 已检查异常(非运行时异常 Exception),不会自动回滚,而是默认提交事务rollback-for="SQLException"rollback-for="Exception"
SSM框架整合时applicationContext.xml文件的配置及详细解析相关推荐
- 使用SSM框架整合时,无法创建XXXXBean
异常是这样的 Error creating bean with name 'searchItemServiceImpl': Injection of autowired dependencies fa ...
- 全栈开发实战 | SSM框架整合完整教程
"一个人最好的状态:梦想藏在心里,行动落于腿脚." 目录 1.前言 2.基本概念 2.1 MyBatis 2.2 Spring 2.3 SpringMVC 3.开发环境搭建 3.1 ...
- SSM框架整合与使用
SSM框架整合与使用 一.SSM框架 SSM框架是三个框架:Spring.SpringMVC.Mybatis三大框架的简称,是标准的MVC模式,即将项目划分为四个层次:service层.view层.c ...
- spring整合hibernate的applicationContext.xml文件配置以及web.xml
applicationContext.xml文件 <?xml version="1.0" encoding="UTF-8"?> <beans ...
- SpringMvc框架及SSM框架整合
SpringMvc框架及SSM框架整合 一.SpringMvc相关知识 1.Spring和SpringMvc的关系 1.1.Spring是IOC和AOP的容器框架,SpringMVC是基于Spri ...
- SSM Chapter 12 SpringMVC扩展和SSM框架整合
SSM Chapter 12 SpringMVC扩展和SSM框架整合 笔记 本章目标: 掌握JSON对象的处理 理解数据转换和格式化 了解本地化 掌握Spring MVC+Spring+MyBatis ...
- SSM框架整合+配置
SSM框架整合 一. 框架简介及特征 1.SpringMVC springmvc是spring的一个模块,一个"小弟",用于web开发,可理解为servlet的升级版.Spring ...
- 史上最详细的SSM框架整合(Spring、SpringMVC、Mybatis)
毫无疑问我们肯定是使用Spring去整合SpringMVC和Mybatis,在整合过程中我们首先要让各自的模块实现,然后再去使用Spring整合:比如我先实现Mybatis框架的配置,然后再通过测试看 ...
- layui实现文件压缩上传_基于SSM框架、Layui的多文件上传、包括图片,压缩包,音频等文件(与数据库挂钩) - 爱秧博客...
写在前面:当初为了实现一个多文件上传可是费了一番功夫,经过我日日夜夜的百度咨询,写了好几种方法,最终还是没能解决问题.我可以很负责任的告诉你,你去百度上不管你形容有多好,只要是涉及多文件,就会查到Mu ...
最新文章
- 学习笔记TF065:TensorFlowOnSpark
- tf.keras.layers.Dropout 示例
- 关于BERT,面试官们都怎么问
- android 数据库 字节数组,Android上的GreenDAO:字节数组作为主键/构建包含字节数组属性Where子句的查询...
- 用区块链打击假新闻 这可能是最2017年的一件事
- tms320c2000 c语言伪指令,TMS320F240XDSP汇编及C语言多功能控制应用(附光盘)
- MD5Init-MD5Update-MD5Final
- OpenCV的Mat和Halcon的HObject类型互相转换
- 蓝桥训练之前缀和与差分
- 小米路由器mini刷老毛子教程
- Java 设置图片大小
- c语言赋值语句逗号,C++中赋值运算符与逗号运算符的用法详解
- 滴滴WebApp实践经验分享
- 关于ISO26262功能安全管理的理解
- java中的i/o体系结构及流分类
- 关于anaconda的使用和Python库的安装、卸载
- linux ssh 远程浏览器,使用浏览器通过ssh连接linux方法
- office2019安装步骤
- opencv人体识别技术汇总
- 【欧拉计划第 13 题】 大数之和 Large sum
热门文章
- python的基本语法、数据类型、运算符及基本操作_Python教程基础语法、变量基本使用和算术运算符...
- 【Tkinter】终于把StringVar讲明白了
- 复旦大学新冠肺炎防控第一课——尔雅答案
- 401状态码的含义和处理
- 量化投资实战(三)之配对交易策略---协整法
- 云服务器nginx站点主页路径更改方法
- 西门子系列全套学习视频,免费领取!
- 西门子HMI下载时提示缺少面板映像解决方案
- 【兼容】兼容IE8浏览器
- 最新VMware Workstation 9.0 / Player 5.0 / Fusion 5.0/VMware Tools 9.2.0 不同平台正式版下载