spring 3.1.2+struts 2.3.2 + mybatis 3.1.1框架搭建(二)

前阵子写了自己搭建简单的SSM框架的一些总结,有网友提出了建议,说其实UserDao.java和UerDao.xml是可以放在不同目录下的,特地查了一下之前没研究过mybatis的配置。

mybatis-spring的官方使用指南上说明如下:

如果MyBatis映射器XML文件在和映射器类相同的路径下不存在,那么另外一个需要配置文件的原因就是它了。使用这个配置,有两种选择。

第一是手动在MyBatis的XML配置文件中使用<mappers>部分来指定类路径。

第二是使用工厂bean的mapperLocations属性。
mapperLocations属性使用一个资源位置的list。这个属性可以用来指定MyBatis的XML映射器文件的位置。它的值可以包含Ant样式来加载一个目录中所有文件,或者从基路径下递归搜索所有路径。比如:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="mapperLocations" value="classpath*:sample/config/mappers/**/*.xml" />
</bean>

 

在实验中,我的源文件结构如下:

spring 3.1.2+struts 2.3.2 + mybatis 3.1.1框架搭建(二)_第1张图片

将原先的mapper类与mapper配置文件分开,映射类位于service包下,映射文件位于dao包下。spring配置文件applicationContext.xml更改如下:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="mapperLocations" value="classpath*:com/cstor/network/dao/*.xml" />

 </bean>

在sqlSessionFactory中增加mapperLocations的配置,指定配置文件位于配置的路径之下,这样mybatis就会从配置的路径地下进行搜索查找对应的XML文档。所有bean的配置如下:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="mapperLocations" value="classpath*:com/cstor/network/dao/*.xml" />

 </bean>
 
 <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory" />
 </bean>
 
 <bean id="userDao" class="com.cstor.network.serviceImpl.UserDaoImpl">
        <property name="sqlSession" ref="sqlSession" />
    </bean>

 <bean id="userAction" class="com.cstor.network.action.UserAction">
     <property name="userDao" ref="userDao"/>
  </bean>

一开始我认为这样在action中注入userDao之后就能进行信息的查询,但tomcat启动之后报错:

Caused by: org.apache.ibatis.builder.BuilderException: The mapper element requires a namespace attribute to be specified.
 at org.apache.ibatis.builder.MapperBuilderAssistant.setCurrentNamespace(MapperBuilderAssistant.java:69)
 at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:105)
 ... 41 more

原因是我以为配置了mapperLocations之后,把mybatis配置文件的namespace删掉了,恢复namespace之后,就可以正常执行查询了,但此时namespace的值我实验了一下,基本上可以随便配置,只要有namespace这个属性就行,我配置为"/"。

<mapper namespace="/">

          ........

</mapper>

 

你可能感兴趣的:(spring 3.1.2+struts 2.3.2 + mybatis 3.1.1框架搭建(二))