spring配置文件:
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 引入properties -->
<context:property-placeholder location="mysql.properties"/>
<!-- 配置数据库连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${mysql.driver}"/>
<property name="jdbcUrl" value="${mysql.url}"/>
<property name="user" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</bean>
<!-- 配置mybatis的SqlSession的工厂:SqlSessionFactoryBean dataSource:注入数据源 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据源 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 指定要使用到mybatis配置文件 -->
<property name="configLocation" value="classpath:mybatis_config.xml"/>
<!-- 用于配置mapper映射xml -->
<property name="mapperLocations" value="classpath*:cn.gzx/mapper/*.xml"/>
</bean>
<!-- 创建数据映射器 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.gzx.dao"/>
</bean>
<!-- 对数据源进行事物管理 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
web.xml配置文件:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!-- spring配置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:spring/applicationContext.xml
</param-value>
</context-param>
<!-- 配置spring上下文监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextCleanupListener</listener-class>
</listener>
</web-app>
这里为什么bean注入失败,小白,求解
意思就是找不到AdminDao这个bean,而且你这句话
<property name="mapperLocations" value="classpath*:cn.gzx/mapper/*.xml"/>这个地方我没记错应该写作classpath:cn/gzx/mapper/*.xml,
如果要这样写的话映射文件名要写作和dao接口名一样,就是说你叫adminDao.java就得把mapper写作adminDao.xml
用Junit4 测试吧
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
}
import static org.junit.Assert.*;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
/**
public class DirDAOImplTest extends BaseJunitTest {
@Autowired
private DirDAO dirDAO;
/**
* Test method for {@link com.zijinph.cdms.dao.impl.DirDAOImpl#getListByLevelId(java.lang.Integer)}.
*/
@Test
public void testGetListByLevelId() {
List<Dir> list = dirDAO.getListByLevelId(1);
if (null != list && !list.isEmpty()) {
for (Dir item : list) {
System.out.println(item);
}
}
}
}
这一句配置的不对呀 cn后面是 . 应该是 /
把你的admin的xml文件贴出来,估计有问题
你在获取admindao这个bean,你有把adminDao装配bean吗
你的问题应该是没有向MapperScannerConfigurer中注入sqlSessionFactory,因为配置MapperScannerConfigurer的目的是帮你创建AdminDAO接口
的实现类,但创建的这个实现类要调用sql语句对数据库进行操作,因此需要用到SqlSession,因此你需要向MapperScannnerConfigurer中注入
sqlSessionFactory。并且这个MapperScannerConfigurer创建出来的实现类在spring容器中的id默认为接口的类名首字母小写,因此你要获得该
实现类的bean需要通过context.getBean("adminDAO");
而且还要注意的是:你使用的是mybatis的mapper接口代理模式。需要遵循以下规则:
1、你的DAO的接口的类名必须与mapper配置文件的文件名一样并处于同一个包下,如AdminMapper.java对应AdminMapper.xml,而不是AdminDao.
java,这样你配置的MapperScanner在扫描该包并创建AdminMapper的实现类时知道到AdminMapper.xml中查找配置的sql语句。
2、AdminMapper接口中的方法名必须与AdminMapper.xml中sql语句的id一致,这样在创建实现类时,实现类中的方法具体调用哪个sql语句就能与
AdminMapper.xml中配置的sql的id对应
3、AdminMapper.xml中sql配置的ResultType、ParameterType必须与AdminMapper接口中方法的返回值和参数值的类型一致,不然也会出问题
望采纳!!!!
这个问题是因为没有往spring容器里添加AdminDao这个类。解决办法首先你在AdminDao上加@Repository这个注解,然后还需要在你的spring配置文件中加入扫描,
</context:component-scan>
这样估计就可以了
SSM 项目demo 楼主可以看看这里
你的xml的语句出现问题,找不到对应的类,检查一下你的类的名字是不是有什么问题