首页 新闻 会员 周边 捐助

mybatis 的配置问题把

0
悬赏园豆:10 [已解决问题] 解决于 2016-12-15 11:11

第一次整合 mybatis 和 spring  在进行junnit 的时候 报错 说是找不到 getUserByid

麻烦帮忙瞅瞅

 

配置文件

问题补充:

报错信息

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ssm.dao.UserMapper.getUserById
    at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:189)
    at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:43)
    at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:58)
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:51)
    at com.sun.proxy.$Proxy15.getUserById(Unknown Source)
    at com.ssm.service.impl.UserServiceImpl.getUserById(UserServiceImpl.java:19)
    at com.ssm.testmybatis.TestMybatis.test(TestMybatis.java:31)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:232)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:175)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

配置信息

    <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
       <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
         <!-- 自动扫描mapping.xml文件 注意路径  之前为classpath:com/ssm/mapping/*.xml-->
        <property name="mapperLocations" value="classpath:com.ssm.mapping.*.xml"></property>
    </bean>

        <!-- DAO接口所在包名,Spring会自动查找其下的类 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.ssm.dao" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>

结构

全村人的希望的主页 全村人的希望 | 初学一级 | 园豆:192
提问于:2016-12-15 09:51
< >
分享
最佳答案
1

说程序找不到 getUserByid 方法

1,在 com.ssm.dao.UserMapper 是否有 getUserById 这个方法 (注:是否大小写的问题,很多人有时候不小心就会粗心写错,报错信息显示,在com.ssm.dao.UserMapper 里面找不到getUserById,而你说 找不到 getUserByid,是否是大小写问题)

2,排除第一个可能,那就是你的xml文件配置中配置的时候有什么问题。你可以看看在配置的时候有什么问题

收获园豆:10
代码飞了 | 菜鸟二级 |园豆:470 | 2016-12-15 10:10

 有这个方法 大小写相同  我之前的配置都是映射。

        <mappers>
            <package name="com/wode/mapper"/>
        </mappers>           

现在这种也是在博客园看的 配置 是这句

    <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
       <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
         <!-- 自动扫描mapping.xml文件 注意路径  之前为classpath:com/ssm/mapping/*.xml-->
        <property name="mapperLocations" value="classpath:com.ssm.mapping.*.xml"></property>
    </bean>
 我也不太懂 是怎么回事

全村人的希望 | 园豆:192 (初学一级) | 2016-12-15 10:12

@全村人的希望: 还有你之前没换的可以吗,还是换了这之后有问题的?

代码飞了 | 园豆:470 (菜鸟二级) | 2016-12-15 10:25

@代码飞了:

报这个 说是应用程序未启动? Failed to load ApplicationContext

全村人的希望 | 园豆:192 (初学一级) | 2016-12-15 10:40

@代码飞了:  我现在想 整合 SpringMVC+Spring+MyBatis 整合 跟之前不一样

全村人的希望 | 园豆:192 (初学一级) | 2016-12-15 10:44

@全村人的希望: 你把xml配置截全给我看看

代码飞了 | 园豆:470 (菜鸟二级) | 2016-12-15 10:45

@代码飞了: <?xml version="1.0" encoding="utf-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
                        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
                        http://www.springframework.org/schema/context  
                        http://www.springframework.org/schema/context/spring-context-4.0.xsd  
                        http://www.springframework.org/schema/mvc  
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
    <!-- 自动扫描 -->
    <context:component-scan base-package="com.ssm"/>
    <!-- 引入配置文件 -->
    <bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties" />
    </bean>  
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="${driver}" />
        <property name="url" value="${url}" />
        <property name="username" value="${username}" />
        <property name="password" value="${password}" />
        <!-- 初始化连接大小 -->
        <property name="initialSize" value="${initialSize}"></property>
        <!-- 连接池最大数量 -->
        <property name="maxActive" value="${maxActive}"></property>
        <!-- 连接池最大空闲 -->
        <property name="maxIdle" value="${maxIdle}"></property>
        <!-- 连接池最小空闲 -->
        <property name="minIdle" value="${minIdle}"></property>
        <!-- 获取连接最大等待时间 -->
        <property name="maxWait" value="${maxWait}"></property>
    </bean>
    <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
       <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
         <!-- 自动扫描mapping.xml文件 注意路径  之前为classpath:com/ssm/mapping/*.xml-->
      <!--      <property name="mapperLocations" value="classpath:com.ssm.mapping.*.xml"></property>-->
   <property name="mapperLocations" >
            <list>
                <value>UserMapper.xml</value>
                <value>UserInfoMapper.xml</value>
            </list>
  </property>
    </bean>

        <!-- DAO接口所在包名,Spring会自动查找其下的类 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.ssm.dao" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>
        <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>      
 </beans>

全村人的希望 | 园豆:192 (初学一级) | 2016-12-15 10:46

@全村人的希望: 

这样改也是要加包名的,还有上面那样的写法是简写,也是可以的~,

刚才报这个错是因为不识别bean的原因

代码飞了 | 园豆:470 (菜鸟二级) | 2016-12-15 10:54

@全村人的希望: 

这个要扫描到具体类的包

代码飞了 | 园豆:470 (菜鸟二级) | 2016-12-15 10:56

@全村人的希望:

 

这两个改了你再试试

代码飞了 | 园豆:470 (菜鸟二级) | 2016-12-15 10:56

@代码飞了: 哦 这么回事 那我就改回原来的简写形式也可以呗。 我也不知道改哪了 你帮我发一下被

全村人的希望 | 园豆:192 (初学一级) | 2016-12-15 10:59

@全村人的希望: 刚才我截的图呢。。。。咋没了

代码飞了 | 园豆:470 (菜鸟二级) | 2016-12-15 11:00

@代码飞了: 我发的图也看不到

全村人的希望 | 园豆:192 (初学一级) | 2016-12-15 11:01

@全村人的希望: 

代码飞了 | 园豆:470 (菜鸟二级) | 2016-12-15 11:02

@代码飞了: 改了

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.ssm.testmybatis.TestMybatis': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.ssm.service.UserService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(shareable=true, mappedName=, description=, name=, type=class java.lang.Object, authenticationType=CONTAINER, lookup=)}

全村人的希望 | 园豆:192 (初学一级) | 2016-12-15 11:04

@代码飞了: 分给你 我重新找一个整合的 再试一次

全村人的希望 | 园豆:192 (初学一级) | 2016-12-15 11:11

@全村人的希望: 我有你要不

代码飞了 | 园豆:470 (菜鸟二级) | 2016-12-15 11:16

@代码飞了:  要!

全村人的希望 | 园豆:192 (初学一级) | 2016-12-15 11:16

@全村人的希望: 邮箱。

代码飞了 | 园豆:470 (菜鸟二级) | 2016-12-15 11:18

@代码飞了: beigeb@foxmail.com

全村人的希望 | 园豆:192 (初学一级) | 2016-12-15 11:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册