就是spring接管mybatis的:数据源配置+session开闭/mapper获取问题
整体流程
参考:https://blog.csdn.net/eson_15/article/details/51684968
- 引入新包:mybatis-spring,commons-dbcp(数据源管理模型,具体内容见下)
- applicationContext.xml:dataSource/sqlSessionFactory/Mapper都用bean管理:
<!-- 加载classpath下的db.properties文件,里面配了数据库连接的一些信息 -->
<context:property-placeholder location="classpath:db.properties"/>
<!-- 配置数据源 -->
<bean id="dataSource" class="${dataSource}" destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="maxActive" value="10" />
<property name="maxIdle" value="5" />
</bean>
<!-- 配置sqlSessionFactory,SqlSessionFactoryBean是用来产生sqlSessionFactory的 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 加载mybatis的全局配置文件,放在classpath下的mybatis文件夹中了 -->
<property name="configLocation" value="mybatis-config.xml" />
<!-- 加载数据源,使用上面配置好的数据源 -->
<property name="dataSource" ref="dataSource" />
</bean>
<!-- MapperFactoryBean:根据mapper接口生成的代理对象 -->
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.pojo.UserDao"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
- mybatis-config.xml(上面的sqlSessionFactory bean的生成要用到
只需配置mapper resource即可(其他可选
<configuration>
<!-- 别名的定义 -->
<typeAliases>
<typeAlias type="com.pojo.User" alias="User"/>
</typeAliases>
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
- 映射xml+dao接口文件(配合生成mapper,上文相应bean也有引用
- 测试文件
public class testUser {
private ApplicationContext applicationContext;
@Before
public void setUp() throws Exception {
//得到spring容器
applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
}
@Test
public void testFindUserById() throws Exception {
//通过bean获取Mapper,并用dao接口接收
UserDao userDao = (UserDao) applicationContext.getBean("userMapper");
User user = userDao.findById(1);
System.out.println(user.getWish());
}
}
一些bug
-
找不到mapper recourse问题
mybatis配置文件中mapper recourse的路径是对的,但是就是一直报错
解决办法:把两个文件(config和mapper)都移到recourse文件夹直接下方解决 -
clearCache()方法找不到
java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotationUtils.clearCache()V
解决办法:spring-context/core/test三个包的版本要保持一致
- xml和其他(比如properties)文件中&符号不同:
xml中的&符号需要哟过&代替
网友评论