通过Spring整合MyBatis实现DAO层不用写实现类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28988969/article/details/74065245

配置文件spring.xml

    <!-- spring的核心配置 -->
    <!-- 加载连接池配置数据 -->
    <context:property-placeholder location="classpath:mysql.properties" />

    <!-- 配置c3p0连接池,目的:管理数据库连接 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${mysql.driver}"></property>
        <property name="jdbcUrl" value="${mysql.url}"></property>
        <property name="user" value="${mysql.username}"></property>
        <property name="password" value="${mysql.password}"></property>
        <property name="initialPoolSize" value="${mysql.initialPoolSize}"></property>
        <property name="maxPoolSize" value="${mysql.maxPoolSize}"></property>
        <property name="acquireIncrement" value="${mysql.acquireIncrement}"></property>
    </bean>

    <!-- 产生sqlsessionfactory -->
    <bean id="mySqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:mybatis.xml" />
        <!-- 自动扫描mapper.xml文件 -->
        <property name="mapperLocations" value="classpath:com/wechat/mapper/*.xml"></property>
    </bean>

    <!-- 自动生成dao层实现 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.wechat.dao" />
        <property name="sqlSessionFactoryBeanName" value="mySqlSessionFactory" />
    </bean>

spring+mybatis使用MapperScannerConfigurer 会引起的PropertyPlaceholderConfigurer无效问题在spring里使用org.mybatis.spring.mapper.MapperScannerConfigurer 进行自动扫描的时候,设置了sqlSessionFactory 的话,他会优先于PropertyPlaceholderConfigurer执行,从而导致PropertyPlaceholderConfigurer失效,如果你的数据库连接配置这时用jdbc.url{jdbc.driverClassName}等这样之类的表达式,将无法获取到properties文件里的内容。
解决方法 就是将配置文件的sqlSessionFactory 改名如

<!-- myBatis文件 -->  
<bean id="mySqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
        <property name="dataSource" ref="dataSource" />  
        <!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -->  
        <property name="configLocation" value="classpath:configuration.xml" />  
        <property name="mapperLocations" value="classpath:com/zyc/mapping/*/*.xml" />  
</bean>  

上述解决方案是在

<property name="sqlSessionFactoryBeanName" value="mySqlSessionFactory" />  

这个属性名为 sqlSessionFactoryBeanName 的前提下。如果属性名为sqlSessionFactory 则行不通

Mapper开发规则

  1. 在mapper.xml中将namespace设置为mapper.Java的全限定名
  2. 将mapper.java接口的方法名和mapper.xml中statement的id保持一致
  3. 将mapper.java接口的方法输入参数类型和mapper.xml中statement的parameterType保持一致
  4. 将mapper.java接口的方法输出 结果类型和mapper.xml中statement的resultType保持一致

注意遵循上边四点规范!

这样抛弃Dao实现类的写法:
具有更好的可扩展性,提高了灵活度。

没有更多推荐了,返回首页