配置文件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失效,如果你的数据库连接配置这时用
解决方法 就是将配置文件的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开发规则
- 在mapper.xml中将namespace设置为mapper.Java的全限定名
- 将mapper.java接口的方法名和mapper.xml中statement的id保持一致
- 将mapper.java接口的方法输入参数类型和mapper.xml中statement的parameterType保持一致
- 将mapper.java接口的方法输出 结果类型和mapper.xml中statement的resultType保持一致
注意遵循上边四点规范!
这样抛弃Dao实现类的写法:
具有更好的可扩展性,提高了灵活度。