环境:maven,spring 4.2.4-RELEASE,2个模块:zscb-server zscb-common和zscb-server依赖于zscb-common
我的web.xml核心代码:
<listener>
<listener-class>com.iidooo.core.listener.RoleResourceInitListener</listener-class>
</listener>
我的模块zscb-common中有一个init监听器:
RoleResourceInitListener核心代码:
public void contextInitialized(ServletContextEvent arg0) {
try {
ServletContext sc = arg0.getServletContext();
SqlSessionFactory sqlSessionFactory = (SqlSessionFactory) SpringUtil.getBean(sc, "sqlSessionFactory");
SqlSession sqlSession = sqlSessionFactory.openSession(true);
SecurityRoleMapper roleMapper = sqlSession.getMapper(SecurityRoleMapper.class);
List<SecurityRole> roleList = roleMapper.selectAll();
// key: roleID value:List<SecurityResource>
Map<Integer, List<SecurityResource>> roleResourceMap = new HashMap<Integer, List<SecurityResource>>();
for (SecurityRole item : roleList) {
roleResourceMap.put(item.getRoleID(), item.getResourceList());
}
sc.setAttribute(ServletConstant.ROLE_RESOURCE_MAP, roleResourceMap);
} catch (Exception e) {
e.printStackTrace();
logger.fatal(e);
}
}
我的applicationContext.xml:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.iidooo.core.mapper com.edo.zscb.mapper" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
我已经检查了我的mapper.xml的namepsace:
<mapper namespace="com.iidooo.core.mapper.SecurityRoleMapper">
当我运行tomcat时,出现错误
Mybatis Invalid bound statement (not found)
谁能救我!
答案 0 :(得分:0)
Google搜索MapperScannerConfigurer
时的第一个结果会导致documentation说明:
basePackage属性可以包含多个包名, 用逗号或分号分隔。
当您的包裹被空格隔开时。
答案 1 :(得分:0)
在Mybatis中,如果您以getMapper(YourMapper.class)
或addMapper(YourMapper.class)
之类的方式添加映射器,则必须将相对的YourMapper.xml
留在同一源程序包中。
在Maven中,还必须将xml文件作为资源包括在内,并且它们必须与生成的.class
文件位于同一位置。
因此,在<build>
文件的pom.xml
部分中将发生以下情况:
...
<resources>
<resource>
<filtering>false</filtering>
<directory>src</directory>
<includes>
<include>**/package_path/to/your/*.xml</include>
</includes>
</resource>
</resources>
...
</build>
使用此配置,maven将.xml文件保留在与源树相同的位置。