zoukankan      html  css  js  c++  java
  • 【MyBatis-Spring】Mybatis和并入Spring框架

    1.参考书籍:《深入浅出MyBatis技术原理与实战》

    2.知识基础:Spring、Mybatis、Spring MVC。

    配置数据源

    配置SqlSessionFactory

      SqlSessionFactory的作用是生成SqlSession。

      org.mybatis.spring.SqlSessionFactoryBean类负责读取数据源和Mybatis的配置文件路径。解析配置文件后连同数据源一起保存在Spring Bean里面

    <bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
            destroy-method="close">
            <!--驱动类名 -->
            <property name="driverClass" value="${mysql.driver}" />
            <!-- url -->
            <property name="jdbcUrl" value="${mysql.url}" />
            <!-- 用户名 -->
            <property name="user" value="${mysql.username}" />
            <!-- 密码 -->
            <property name="password" value="${mysql.password}" />
            <!-- 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数 -->
            <property name="acquireIncrement" value="${mysql.acquireIncrement}"></property>
            <!-- 初始连接池大小 -->
            <property name="initialPoolSize" value="${mysql.initialPoolSize}"></property>
            <!-- 连接池中连接最小个数 -->
            <property name="minPoolSize" value="${mysql.minPoolSize}"></property>
            <!-- 连接池中连接最大个数 -->
            <property name="maxPoolSize" value="${mysql.maxPoolSize}"></property>
        </bean>
         <!--3 会话工厂bean sqlSessionFactoryBean -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!-- 配置文件路径 -->
            <property name="configLocation" value="classpath:MyBatisCfg.xml"></property>
            <!-- 数据源 -->
            <property name="dataSource" ref="datasource"></property>
            <!-- sql映射文件路径 -->
            <property name="mapperLocations" value="classpath*:com/xdsux/spring2/mapping/*Mapper.xml"></property>
        </bean>

    数据源使用C3P0数据源,具体参数单独用一个db.properties配置。

    Spring在初始化IOC容器的时候将初始化SqlSessionFactoryBean。

    映射文件路径可以在这一步配置,也可以在Mybatis配置文件中配置。

    <configuration>
        <!-- 指定数据库连接信息的位置 -->
        <properties resource="db.properties"></properties>
        <settings>
            <!--指定mybatis使用日志组件 -->
            <setting
                name="logImpl"
                value="LOG4J2" />
            <!--开启全局的二级缓存 -->
            <setting
                name="cacheEnabled"
                value="false" />
            <!--开启延时加载,如果有关联关系,则默认不会获取数据 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态。 
                在association中指定fetchType="eager(立即)" 或者 lazy(延迟) 默认:false -->
            <setting
                name="lazyLoadingEnabled"
                value="true" />
            <!--true时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载; false,每种属性将会按需加载。 默认为:true -->
            <setting
                name="aggressiveLazyLoading"
                value="false" />
        </settings>
        <!--类型别名,默认引入com.xdsux.spring2.entities下的所有类 -->
        <typeAliases>
            <package name="com.xdsux.spring2.entities" />
        </typeAliases>
        <!-- <environments default="development"> <environment id="development"> 
            <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" 
            value="${driver}" /> <property name="url" value="${url}" /> <property name="username" 
            value="${username}" /> <property name="password" value="${password}" /> </dataSource> 
            </environment> </environments> <mappers> 引入映射文件 <mapper resource="com/xdsux/spring2/mapping/GoodsMapper.xml" 
            /> </mappers> -->
    </configuration>

    environments、mappers在Spring那里已经配置了,所以这里注释掉了。<setting>还有更多设置,再说。

    其实Spring IOC已经可以配置非常多的属性了,但是遇到复杂的配置时,建议使用MyBatis的配置文件,因为一般实际项目中,Spring的配置文件已经相当复杂了。配置在Mybatis中更便于管理,可读性也更高。

    配置SqlSessionTemplete

    一般使用SqlSessionFactoryBean就可以了,但在定制化编程时可以配置SqlSessionTemplete。

    配置Mapper

       <!--4 自动扫描对象关系映射 -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <!--指定会话工厂,如果当前上下文中只定义了一个则该属性可省去 -->
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
            <!-- 指定要自动扫描接口的基础包,实现接口 -->
           <!--  <property name="basePackage" value="com.xdsux.spring2.mapper"></property> -->
            <property name="basePackage" value="com.xdsux.spring2.dao"></property>
        </bean>

    Mapper只是接口,不是实现类。

    Spring-MyBatis通过MapperFactoryBean作为中介,动态代理生成实现类。他有三个参数:

    mapperInterface:用于制定接口,其继承者就被认为时一个Mapper

    SqlSessionFactory:SqlSessionTemplete属性不被配置时,该属性将被设置

    SqlSessionTemplete:这个属性被设置的时候,SqlSessionFactory属性作废。

    Spring-Mybatis项目通常采用的配置:

    MapperScannerConfiger:采用自动扫描的形式配置映射器。

    配置事务处理

    MyBatis-Spring使用Spring AOP管理事务:

     <!--5 声明式事务管理 -->
        <!--定义事物管理器,由spring管理事务 -->
        <bean id="transactionManager"
            class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="datasource"></property>
        </bean>
        <!--支持注解驱动的事务管理,指定事务管理器 -->
        <tx:annotation-driven transaction-manager="transactionManager" />
  • 相关阅读:
    PLSQL查询显示乱码或者问号
    Sonar 扫描C#代码 排除文件
    C# 短日期转换为DateTime
    电脑远程连接不上或者ip的地址一直是169.254
    C#导出CSV或者EXCEL文件转换文本
    Oracle 计算两个日期相差天时分秒
    Linux 做网关
    Python 内置函数
    Python Fileinput 模块
    Python-2.7 配置 tab 自动补全功能
  • 原文地址:https://www.cnblogs.com/xdsux/p/9550432.html
Copyright © 2011-2022 走看看