spring和mybatis整合的问题

学无尽-学无涯 2017-06-26 06:21:50
项目结构
是一个maven聚合项目,目前common是空的,有用的是dao,service,controller模块;
dao的spring配置文件
内容:
<!-- 自动扫描 -->
<context:component-scan base-package="com.wkf" />
<!--配置整合mybatis过程-->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:config/jdbc.properties" />
</bean>
<!--2.数据源druid -->
<bean id="dataSourceMall" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />

<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="${druid.pool.size.init}" />
<property name="minIdle" value="${druid.pool.size.min}" />
<property name="maxActive" value="${druid.pool.size.max}" />

<!-- 配置监控统计拦截的filters,wall用于防止sql注入,stat用于统计分析 -->
<property name="filters" value="wall,stat" />
</bean>

<!--3、配置SqlSessionFactory对象-->
<bean id="mybatisSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--注入数据库连接池-->
<property name="dataSource" ref="dataSourceMall"/>
<!--配置mybatis全局配置文件:mybatis-config.xml-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!--扫描sql配置文件:mapper需要的xml文件-->
<property name="mapperLocations">
<list>
<value>classpath*:/mapper/*/*.xml</value>
</list>
</property>
</bean>

<!--4、配置扫描Dao接口包,动态实现DAO接口,注入到spring容器-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--注入SqlSessionFactory-->
<property name="sqlSessionFactoryBeanName" value="mybatisSqlSessionFactory"/>
<!-- 给出需要扫描的Dao接口-->
<property name="basePackage" value="com.wkf.dao"/>
</bean>


service的spring配置文件内容;
<!-- Service层级-->
<context:component-scan base-package="com.wkf" />
<!-- 配置事务管理器(mybatis采用的是JDBC的事务管理器)-->
<bean id="transactionManagerMall" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSourceMall"></property>
</bean>
<!-- 配置基于注解的声明式事务,默认使用注解来管理事务行为 -->
<tx:annotation-driven transaction-manager="transactionManagerMall"/>

controller的spring配置文件
<context:component-scan base-package="com.wkf" />
<!--导入common的配置文件 -->
<import resource="classpath*:spring/spring-service.xml"/>
<import resource="classpath*:spring/spring-dao.xml"/>
<!--配置springMVC -->

<!-- 自动扫描且只扫描@Controller -->
<!-- <context:component-scan base-package="com.wkf.controller" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.RestController"/>
<context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
</context:component-scan> -->
<!--1:开始springMVC注解模式 -->
<!--简化配置: 1、自动注册DefaultAnnotationHandlerMapping,AnnotationMethodHandlerAdapter
2、提供一系列:数据绑定,数字和日期的format,@NumberFormat,@DataTimeFormat,xml,json默认读写支持 -->
<mvc:annotation-driven />

<!--2:静态资源默认servlet配置 1、加入对静态资源的处理:js,css,gif,png 2、允许使用"/"做整体映射 -->

<mvc:default-servlet-handler />


<aop:aspectj-autoproxy proxy-target-class="true" />

<!-- 完成请求和注解POJO的映射 -->
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="stringHttpMessageConverter"></ref>
<ref bean="mappingJacksonHttpMessageConverter"></ref>
</list>
</property>
</bean>
<!-- MappingJacksonHttpMessageConverter- -->
<bean name="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
<!-- 将StringHttpMessageConverter的默认编码设为UTF-8 -->
<bean name="stringHttpMessageConverter"
class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
<!-- 8:多部分文件上传 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="104857600" />
<property name="maxInMemorySize" value="4096" />
<property name="defaultEncoding" value="UTF-8"></property>
</bean>

问题:service可以注入,并在controller注入并访问,但是在service中注入mapper出现无法注入的错误;
上代码
@Service
public class WkfUserInfoServiceImpl implements WkfUserInfoService {

@Autowired
private WkfIntroUserMapper wkfIntroUserMapper;
public String getUserName() {
return "test";
}
在这里不注入mapper不会出问题,service可以正常注入,加了之后mapper无法注入
Error creating bean with name 'test': Unsatisfied dependency expressed through field 'wkfUserInfoService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'wkfUserInfoServiceImpl': Unsatisfied dependency expressed through field 'wkfIntroUserMapper'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.wkf.dao.user.WkfIntroUserMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
来个大神指点下吧
...全文
277 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
吾省 2017-06-27
  • 打赏
  • 举报
回复
<!-- 完成请求和注解POJO的映射 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> 你这里完成请求和注解pojo的映射不是自动转换注解的类。 可以改成启动spring 的注解试试:class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"; 或者使用springmvc的自动注解类试试:class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"。
  • 打赏
  • 举报
回复
引用 3 楼 pany1209 的回复:
NoSuchBeanDefinitionException: No qualifying bean of type 'com.wkf.dao.user.WkfIntroUserMapper' available。。。。。spring容器中没有wkfIntroUserMapper这个Bean,检查一下使用MapperScannerConfigurer 自动扫描 将Mapper接口生成代理的配置是否正确?
扫描路径我测试了下,因为使用的是,maven的多环境配置 <profiles> <profile> <id>dev</id> <properties> <env>dev</env> </properties> <activation> <activeByDefault>true</activeByDefault><!-- 默认启用的是dev环境配置 --> </activation> </profile> <profile> <id>pre</id> <properties> <env>pre</env> </properties> </profile> <profile> <id>pro</id> <properties> <env>pro</env> </properties> </profile> </profiles> <build> <filters> <!-- 指定使用的 filter --> <filter>src/main/filters/wkf.${env}.properties</filter> </filters> <resources> <resource> <!-- --> <directory>src/main/resources/config</directory> <filtering>true</filtering> <!-- 是否使用过滤器 --> </resource> </resources> </build> 替换jdbc.properties中的通配符,如果把通配符替换成真实的数据库地址就没问题,可以正常注入,如果使用通配符就会出现无法注入的问题,但是编译后的jar我看了,通配符可以被替换成真实地址,所以现在不知道问题出在什么地方
李德胜1995 2017-06-26
  • 打赏
  • 举报
回复
NoSuchBeanDefinitionException: No qualifying bean of type 'com.wkf.dao.user.WkfIntroUserMapper' available。。。。。spring容器中没有wkfIntroUserMapper这个Bean,检查一下使用MapperScannerConfigurer 自动扫描 将Mapper接口生成代理的配置是否正确?
  • 打赏
  • 举报
回复
求大神指导 求大神指导
  • 打赏
  • 举报
回复
自顶一下自顶一下自顶一下

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧