Zyp168168
2016-10-23 03:54
采纳率: 100%
浏览 5.2k
已采纳

[新手求助]spring整合mybatis时自动扫描错误

个人javaweb结构
错误提示: Error creating bean with name 'org.mybatis.spring.mapper.MapperScannerConfigurer#0' defined in class path resource [config/applicationContext.xml]
[application.xml配置文件如下]
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<!-- 整合连接池druid:配置DataSource -->
<bean name="datasource" class="com.alibaba.druid.pool.DruidDataSource"
    init-method="init" destroy-method="close">
    <property name="driver" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/test"/>
    <property name="username" value="root" />
    <property name="password" value="root" />
</bean>

<!-- 整合MyBatis框架,配置sqlSessionFatory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="mapperLocations" value="classpath:config/UserMapper.xml" />     
    <property name="configLocation" value="classpath:config/mybatis-config.xml" />
    <property name="dataSource" ref="dataSource" />
</bean>

<!-- 自动扫描注入 :此处有问题-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="org.spring.service"/>
    <property name="sqlSessionFactory" value="sqlSessionFactory" />
</bean> 


[web.xml配置如下]
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

<!-- 整合监听器log4j -->
<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:config/log4j.properties</param-value>
</context-param>


<!-- 整合SpringMVC -->
<servlet>
    <servlet-name>DispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:config/spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>DispatcherServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

<!-- 整合Spring -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:config/applicationContext.xml</param-value>
</context-param>

<!-- 字符集过滤器 -->
<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<!-- 会话有效期(单位:分钟) -->
<session-config>
    <session-timeout>15</session-timeout>
</session-config>

[serviceimpl如下]
package org.spring.service.impl;

import java.util.List;

import org.mybatis.dao.UserDao;
import org.mybatis.model.User;
import org.spring.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service(value = "userService")
public class UserServiceImpl implements UserService {
@Autowired
public UserDao userDao;

@Override
public boolean register(User model) {
    return userDao.register(model);
}

@Override
public boolean login(User model) {
    return userDao.login(model);
}

@Override
public List<User> findByXXX(User model) {
    return userDao.findByXXX(model);
}

}
求大神指点!!!

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

9条回答 默认 最新

  • 凌岩歌-贰拾肆 2016-10-24 12:05
    已采纳


    // 需要扫描的是dao层,不是service层

    <property name="markerInterface" value="com.mbt.dao.mapper.SqlMapper"/> //定义一个父接口SqlMapper,value="父接口全路径";com.mbt.dao.mapper.SqlMapper是我自己项目路径
    

    // 2, 父接口不需要任何内容
    public interface SqlMapper {

    }

    // 3, 所有的dao接口必须实现SqlMapper父接口
    // 4, mybatis的dao层,不需要实现, 所有dao接口不需要实现类,用的时候直接用接口调
    希望能帮到你!

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • devmiao 2016-10-23 04:03
    评论
    解决 无用
    打赏 举报
  • 毕小宝 2016-10-23 04:05

    因为MapperScannerConigurer实际是在解析加载bean定义阶段的,这个时候要是设置sqlSessionFactory的话,会导致提前初始化一些类,这个时候,PropertyPlaceholderConfigurer还没来得及替换定义中的变量,导致把表达式当作字符串复制了,解决的办法如下:
    不用扫描方式添加mapper的方法试试。这是mybatis-spring的一个己经公开的问题
    详细解决办法请看
    http://code.google.com/p/mybatis/issues/detail?id=414

    评论
    解决 无用
    打赏 举报
  • qq_31814393 2016-10-23 04:18

    app_start的RouteConfig类里面

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "默认控制器", action = "默认动作", id = UrlParameter.Optional }
            );
    
    评论
    解决 无用
    打赏 举报
  • lantazy 2016-10-23 10:46




    把 value="sqlSessionFactory" 改成 ref="sqlSessionFactory",value一般指字符串类型,ref指引用类型

    评论
    解决 无用
    打赏 举报
  • Zyp168168 2016-10-24 23:28
    本人改用分步手工装配bean后userDao处衔接不上:
    
        <!-- 整合MyBatis框架,配置sqlSessionFatory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:config/mybatis-config.xml" />
    </bean>
    
    <!-- 装配bean -->
    
    <bean id="userDao" class="org.mybatis.dao.UserDao">
        <property name="sqlSessionFactory" ref="sqlSessionFactory" />
    </bean>
    
    <bean id="userService" class="org.spring.service.impl.UserServiceImpl">
        <property name="userDao" ref="userDao" />
    </bean>
    
    <bean id="LoginController" class="org.springmvc.controller.LoginController">
        <property name="userService" ref="userService" />
    </bean>
    咋整???  @毕小宝
    
    评论
    解决 无用
    打赏 举报
  • 又又又 2016-10-25 08:29

    你看你是不是没有加载注解驱动

    把上面一句加到你的spring-mvc中

    评论
    解决 无用
    打赏 举报
  • 又又又 2016-10-25 08:31

    图片说明

    就是这个图片中的内容加到你的spring-mvc里 刚才那个貌似没发起

    评论
    解决 无用
    打赏 举报
  • Zyp168168 2016-10-26 01:36

    麻烦会的大神,直接联系下我吧qq1355043929(加我打备注CSDN+昵称),我把源码交给你改,改好能跑起来我直接给20c币

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题