SSM 配置文件 分析

Posted helloqiufei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSM 配置文件 分析相关的知识,希望对你有一定的参考价值。

spring 配置文件(主要整合的是spring 和 mybatis 的配置文件)

问题: 两者之间没有整合在一起的时候是怎么样的

spring配置文件:    Spring配置文件是用于指导Spring工厂进行Bean生产、依赖关系注入(装配)及Bean实例分发的"图纸"。Java EE程序员必须学会并灵活应用这份"图纸"准确地表达自己的"生产意图"。Spring配置文件是一个或多个标准的XML文档,applicationContext.xml是Spring的默认配置文件,当容器启动时找不到指定的配置文档时,将会尝试加载这个默认的配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="duke" class="com.springinaction.springidol.Juggler" > 
        <!-- 通过构造方法设置属性值 -->
        <constructor-arg value="15"></constructor-arg>
    </bean>
 
    <bean id="sonnect29" class="com.springinaction.springidol.Sonnet29"></bean>
    
    <bean id="poeticPoem" class="com.springinaction.springidol.PoeticJuggler">
        <constructor-arg value="15"></constructor-arg>
        <constructor-arg ref="sonnect29"></constructor-arg>
    </bean>
      
    <bean id="saxphone" class="com.springinaction.springidol.saxphone"></bean>
    <bean id="piano" class="com.springinaction.springidol.piano"></bean>
    
    <!-- p命名空间用法 -->
    <bean id="Kenny2" class="com.springinaction.springidol.Instrumentalist" 
        p:song="Lemon Tree" p:age="30" p:instrument-ref="saxphone"    >
    </bean>
    
    <!-- 为集合配置bean -->
    <bean id="hank" class="com.springinaction.springidol.OneManBand">
        <property name="instruments">
            <list>
                <ref bean="piano" />
                <ref bean="saxphone" />
            </list>
        </property>
        <property name="instruments2">
            <map>
                <entry key="piano" value-ref="piano"></entry>
                <entry key="saxphone" value-ref="saxphone"></entry>
            </map>
        </property>
    </bean>
    
    <!-- properties的写法 -->
    <bean id="hank2" class="com.springinaction.springidol.OneManBand">
        <property name="instruments">
            <props>
                <!-- key和value都为String -->
                <prop key="piano">la la la</prop> 
                <prop key="saxphone">ta ta ta</prop>
            </props>
        </property>
    </bean>
    
    <!-- 赋null值 -->
    <!-- 
    ...
        <property name="xxx"><null/></property>
    ...
     -->
</beans>

个人理解:在最基础的spring配置文件就是做控制反转的功能,就是将实体类的创建放在spring beanfactory中
     spring里面配置,就是围绕着各种bean,有bean的id, bean对应的class, 以及实现这个class里面
     的一些注入property, 就像上面红色的所示。 把一个个需要beanfactory工厂创建的bean 告诉beanfactory
     工厂。
    


mybatis 配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <!-- 加载类路径下的属性文件 -->
    <properties resource="db.properties"/>

    <!-- 设置一个默认的连接环境信息 -->
    <environments default="mysql_developer">
        <environment id="mysql_developer">
            <!-- mybatis使用jdbc事务管理方式 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- mybatis使用连接池方式来获取连接 -->
            <dataSource type="POOLED">
                <!-- 配置与数据库交互的4个必要属性,不要直接写,单独写在一个配置文件中 -->
                <property name="driver" value="${sqlserver.driver}"/>
                <property name="url" value="${mysql.url}"/>
                <property name="username" value="${mysql.username}"/>
                <property name="password" value="${mysql.password}"/>
            </dataSource>
        </environment>
        <!-- 连接环境信息,取一个任意唯一的名字 -->
    </environments>

    <!-- 加载映射文件-->
    <mappers>
        <mapper resource="com/winner/entity/StudentMapper.xml"/>
    </mappers>
</configuration>

对应的sql xml 文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace可以写类的全限定名,这样做的好处是
  sqlSession.insert(Student.class.getName()+".addStudent");
--> <mapper namespace="com.winner.entity.StudentMapper">

  <!--实体与表的映射,type是类名,但是没有表名,可以理解表名在下面的sql语句中--> <resultMap id="studentMap" type="com.winner.entity.Student"> <id property="id" column="id"/> <result property="name" column="name"/> <result property="sal" column="sal"/> </resultMap> <insert id="addStudent" parameterType="com.winner.entity.Student"> <![CDATA[ INSERT INTO student(id,name,sal) VALUES (#{id},#{name},#{sal}) ]]> </insert> </mapper>
个人理解: mybatis配置文件,一个是配置环境(连接数据库的配置, 以及mapper文件的配置), 一个是用来编写
sql语句的xml文件(用于实体类中与其相互匹配), 然后编写对应的dao类来执行操作。这个部分介绍  
    有待深入


spring 和 mybatis 整合配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
  <!--读取db.properties -->
  <!-- source 文件夹下面存放的就是classpath 文件, 系统可以找到的 -->
  <!-- 这个文件里面主要就是配置bean工厂,因为spring就是一个bean工厂,然后将数据库mybatis整合在里面 -->
  <!-- 一个是获取jdbc需要的一些东西, 然后就是配置mybatis里面需要的东西-->
  

  <context:property-placeholder location="classpath:db.properties"/>
  <!-- 配置数据源 -->
  <bean id="dataSource"
    class="org.apache.commons.dbcp2.BasicDataSource">
    <!--数据库驱动 -->
    <property name="driverClassName" value="${jdbc.driver}" />
    <!--连接数据库的url -->
    <property name="url" value="${jdbc.url}" />
    <!--连接数据库的用户名 -->
    <property name="username" value="${jdbc.username}" />
    <!--连接数据库的密码 -->
    <property name="password" value="${jdbc.password}" />
    <!--最大连接数 -->
    <property name="maxTotal" value="${jdbc.maxTotal}" />
    <!--最大空闲连接 -->
    <property name="maxIdle" value="${jdbc.maxIdle}" />
    <!--初始化连接数 -->
    <property name="initialSize" value="${jdbc.initialSize}" />
  </bean>


  <!-- 事务管理器 -->
  <bean id="transactionManager" class=
  "org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <!-- 数据源 -->
  <property name="dataSource" ref="dataSource" />
  </bean>
    <!-- 通知 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
    <!-- 传播行为 -->
    <tx:method name="save*" propagation="REQUIRED" />
    <tx:method name="insert*" propagation="REQUIRED" />
    <tx:method name="add*" propagation="REQUIRED" />
    <tx:method name="create*" propagation="REQUIRED" />
    <tx:method name="delete*" propagation="REQUIRED" />
    <tx:method name="update*" propagation="REQUIRED" />
    <tx:method name="find*" propagation="SUPPORTS" read-only="true" />
    <tx:method name="select*" propagation="SUPPORTS" read-only="true" />
    <tx:method name="get*" propagation="SUPPORTS" read-only="true" />
    </tx:attributes>
    </tx:advice>
    <!-- 切面 -->
    <aop:config>
  <aop:advisor advice-ref="txAdvice"
  pointcut="execution(* com.qf.core.service.*.*(..))" />
  </aop:config>


  <!-- 配置 MyBatis的工厂 -->
  <bean class="org.mybatis.spring.SqlSessionFactoryBean">
    <!-- 数据源 -->
    <property name="dataSource" ref="dataSource" />
    <!-- 配置MyBatis的核心配置文件所在位置 -->
    <property name="configLocation" value="classpath:mybatis-config.xml" />
  </bean>

  < !-- the below configuration told the things that the sql sentence and java function -->
  <!-- the function for below configuration is down for mybatis -->
  <!-- 配置mapper 扫描器 接口开发,扫描 com.qf.core.dao包 ,写在此包下的接口即可被扫描到 --

  <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.qf.core.dao" />
  </bean>


  <!-- 配置扫描@Service注解 -->
    <context:component-scan base-package="com.qf.core.service"/>
 </beans>

个人理解: 整合之后将原来在mybatis 配置文件搭建环境的部分,连接数据库,mapper 部分(整合之后的mapper

      不需要像之前写每一个mappper, 而是直接扫描存放mapper 文件(sql.xml文件)的包就可以了,包里面                    存 放对应的dao就可以了)都在bean 中完成了。原来需要一个个放入bean factory的bean 现在可以直接通过

    扫描一个包就可以了, 就像上面配置扫描@service注解 一样

 

整合后的mybatis配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 原来是将数据库连接放在这里,然后就是对应的po 实体类对应建立映射 -->
<!-- 将实体类和数据库里面的表格之间构建连接 -->
<!-- 别名定义 -->
<typeAliases>
<package name="com.qf.core.po" />
</typeAliases>
</configuration>

个人理解:活基本上让spring干完了,现在mybatis 配置文件里面做的就 比较少了










 

以上是关于SSM 配置文件 分析的主要内容,如果未能解决你的问题,请参考以下文章

SSM的开发步骤分析

ssm配置文件解析总结

记一次SSM项目小结

SpringBoot自动装配流程源码分析

13.3.2 完整的MBG配置文件(MyBatis Generator逆向代码生成工具) -《SSM深入解析与项目实战》

13.3.2 完整的MBG配置文件(MyBatis Generator逆向代码生成工具) -《SSM深入解析与项目实战》