Spring-mvc.xml和applicationContext.xml的关系
-
applicationContext.xml的内容
- 配置需要读取的properties文件
<context:property-placeholder location="classpath:properties/db.properties"/>
声明sql数据库的库信息去哪里找
-
配置数据源
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driver}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <property name="maxPoolSize" value="30"/> <property name="minPoolSize" value="2"/> </bean>
这里分别配置了 数据库驱动类、数据库url、数据库账号、数据库的连接数量上下限
xml配置中的<context:property-placeholder … />对应于PropertyPlaceholderConfigurer类,其使用location属性用于指定配置文件所在的位置。 配置文件按键=值对的方式组织,每行一对。可以在xml其他位置按${键}的方式引用值。
配置数据源
c3p0是一个高性能jdbc3的链接池库,提供3种使用方法。 本示例中使用的是用xml配置JavaBean风格的ComboPooledDataSource。 bean内部的property元素配置了ComboPooledDataSource的属性对应的值。 -
配置SqlSessionFactory对象
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 注入数据库连接池 --> <property name="dataSource" ref="dataSource"/> <!-- 扫描bean包 使用别名 --> <property name="typeAliasesPackage" value="com.zr.people_manage.entity"/> <!--配置加载映射文件 UserMapper.xml,很容易写错--> <property name="mapperLocations" value="classpath:mapper/*.xml"/>
SqlSessionFactory对象可以帮我们实现数据库接口,配置 映射文件的位置让SqlSessionFactory可以找到需要实现的接口和sql语句
SqlSessionFactory配置作用
SqlSessionFactory是MyBatis的关键对象,它是个单个数据库映射关系经过编译后的内存镜像.SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象类获得,而SqlSessionFactoryBuilder则可以从XML配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例.每一个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心.同时SqlSessionFactory也是线程安全的,SqlSessionFactory一旦被创建,应该在应用执行期间都存在.在应用运行期间不要重复创建多次,建议使用单例模式.SqlSessionFactory是创建SqlSession的工厂. -
配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 给出需要扫描Dao接口包,这里很容易写错 --> <property name="basePackage" value="com.zr.people_manage.dao"/> <!-- 注入sqlSessionFactory --> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean>
配置需要扫描的Dao包,这样可以自动实现接口
Mybatis在与Spring集成的时候配置MapperFactoryBean来生成Mapper接口的代理,MapperFactoryBean 创建的代理类实现了 dao 包下的接口,并且注入到应用程序中。因为代理创建在运行时环境中,所以指定的映射器必须是一个接口,而不是一个具体的实现类。我们完全没有必要在
Spring 的 XML 配置文件中注册所有的映射器。相反,可以使用一个 MapperScannerConfigurer,
它 将 会 查 找 类 路 径 下 的 映 射 器 并 自 动 将 它 们 创 建 成 MapperFactoryBean。上面的代码则创建了 MapperScannerConfigurer。
basePackage 属性为映射器接口文件设置基本的包路径。每个映射器将会在指定的包路径中递归地被搜索到。这里通过键值对的方式给出了需要扫描Dao接口包。
使用sqlSessionFactoryBeanName的方式来注入sqlSessionFactory,sqlSessionFactoryBeanName 属性的value值是SqlSessionFactory的bean的名字,也就是sqlSessionFactory的id,通过BeanName后处理的方式,当我们去用我们的Mybatis的时候,它才会去找我们对应的sqlSessionFactory,为了防止它提前初始化我们的sqlSessionFactory-
自动扫描需要交给spring管理的类
<context:component-scan base-package="com.zr.people_manage.dao"/> <context:component-scan base-package="com.zr.people_manage.service"/>
-
配置事务管理器
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean>
-
开启事务注解
<tx:annotation-driven/>
- 配置需要读取的properties文件
-
Spring-mvc.xml的内容
这个xml主要配置数据与视图之间的适配- 注解扫描位置
<context:component-scan base-package="com.zr.people_manage.controller" />
- 配置映射处理和适配器
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
- 视图的解析器
- 注解扫描位置
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
他们之间的区别
-
为什么要将两个xml文件分开?
两者的配置内容有很大的区别,spring-mvc.xml配置与视图相关,而applicationContext.xml的配置与数据保持层和控制层相关。虽然两者可以合成一个xml,但是这显然会增加耦合度。
-
分开有什么好处?
由于两者配置内容有很大的区别,所以导致两者的通用性有很大差别。applicationContext.xml的内容由于与视图无关,所以它能够用于更多的场合,如客户端应用和web应用。而spring-mcv的内容是与视图相关的,所以限定了它的应用场合,web的视图放到客户端就不适用了。将两部分分开的好处就是减少耦合度。