动态代理时报错
<context:property-placeholder location="db.properties" />
<!-- dataSource 配置c3p0连接池 -->
<bean name="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- 配置mybatis sqlSessionFactory -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 配置数据源 -->
<property name="dataSource" ref="dataSource"/>
<!-- 告诉spring mybatis的核心配置文件路径 -->
<property name="configLocation" value="classpath:SqlMapConfig.xml" />
</bean>
<!-- userdao -->
<bean id="userDaoImpl" class="com.sikiedu.dao.UserDaoImpl">
<!-- 将工厂注入到dao的父类sqlSessionFactory -->
<property name="sqlSessionFactory" ref="sqlSessionFactoryBean"/>
</bean>
<!-- mapper动态代理开发 -->
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<!-- 注入sqlSessionFactory-->
<property name="sqlSessionFactory" ref="sqlSessionFactoryBean"/>
<!-- 配置接口 -->
<property name="mapperInterface" value="com.sikiedu.mapper.UserMapper"/>
</bean>
<!-- 类型别名 -->
<typeAliases>
<!-- 以对象为别名,大小写不限,推荐使用小写 -->
<!--<typeAlias type="com.sikiedu.bean.User" alias="user" /> -->
<!-- package包的形式来配置别名 包的形式会扫描主包及子包下的所有文件 -->
<package name="com.sikiedu.bean" />
</typeAliases>
<mappers>
<package name="com.sikiedu.mapper"/>
</mappers>
<!--id查询 #{}占位符 自带单引号'' parameterType参数类型 resultType 返回值类型 -->
resultType="user">
select * from user where u_id=#{id}
@Test
public void DaoTest() {
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
UserDaoImpl userDao = ac.getBean(UserDaoImpl.class);
User user = userDao.getUserById(1);
System.out.println(user);
}
@Override
public User getUserById(Integer id) {
SqlSession session=getSqlSession();
// 操作数据库
// 第一个参数是要操作的SQL语句 ,第二个参数是SQL语句的参数
return session.selectOne("UserMapper.selectUserById", id);
}
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for UserMapper.selectUserById
### Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for UserMapper.selectUserById
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:77)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
at com.sun.proxy.$Proxy9.selectOne(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:166)
at com.sikiedu.dao.UserDaoImpl.getUserById(UserDaoImpl.java:17)
at com.sikiedu.test.UserDaoTest.DaoTest(UserDaoTest.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)
Caused by: org.apache.ibatis.exceptions.PersistenceException:
还有一个数据驱动包mysql-connector-java-8.0.16.jar