2 zhengtao2014 zhengtao2014 于 2015.06.09 14:14 提问

使用spring+Mybatis 注解无效

使用spring+Mybatis,使用spring注解,一直报空指针异常,各位麻烦看看
这个spring文件
<?xml version="1.0" encoding="UTF-8"?>
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" 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-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<!-- 使用注解式注入 -->
<context:annotation-config />
<context:component-scan base-package="com/springMyBatis/system/service/*"/>
<context:component-scan base-package="com/springMyBatis/system/dao/*"/>

<!-- 配置数据源-->
<import resource="application-db.xml" />
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource">
        <ref bean="jdbcDataSource" />
    </property>
    <!-- MyBatis 的 XML 配置文件路径 -->
    <property name="configLocation" value="classpath:com/springMyBatis/Mybatis.xml" />
    <!-- 扫描自动生成的xml文件 --><!-- Mybatis XML映射文件 -->

    <property name="mapperLocations">
        <list><!-- Mybatis XML映射文件 -->
            <value>classpath*:com/springMyBatis/system/mapper/*.xml</value>
        </list>
    </property>

</bean>

<!-- 扫描mybatisGenerator 自动生成的  所有接口-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com/springMyBatis/system/dao"></property>
</bean>
<!-- 事务管理 -->
<bean id="transactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="jdbcDataSource" />
</bean>

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
<property name="annotationClass" value="org.springframework.stereotype.Repository"/>  
<property name="basePackage" value="com.springMyBatis.system"/>  
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>  



Mybatis配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC

"-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

<settings>
    <!-- 全局映射器启用缓存 -->
    <setting name="cacheEnabled" value="false" />
    <!-- 查询时,关闭关联对象即时加载以提高性能 -->
    <setting name="lazyLoadingEnabled" value="false" />
    <!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指定),不会加载关联表的所有字段,以提高性能 -->
    <setting name="aggressiveLazyLoading" value="false" />
    <!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 -->
    <setting name="multipleResultSetsEnabled" value="true" />
    <!-- 允许使用列标签代替列名 -->
    <setting name="useColumnLabel" value="true" />
    <!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 -->
    <!-- <setting name="useGeneratedKeys" value="true" /> -->
    <!-- 给予被嵌套的resultMap以字段-属性的映射支持 -->
    <!-- <setting name="autoMappingBehavior" value="FULL" /> -->
    <!-- 对于批量更新操作缓存SQL以提高性能  -->
    <setting name="defaultExecutorType" value="BATCH" />
    <!-- 数据库超过25000秒仍未响应则超时 -->
    <!-- <setting name="defaultStatementTimeout" value="25000" /> -->
</settings>

DAO层接口
package com.springMyBatis.system.dao;

import java.util.List;

import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import com.springMyBatis.system.model.User;

@Repository
@Transactional
public interface UserDao {

public List<User> selectAllUser();

}

mapper.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">


select * from user

service层文件
package com.springMyBatis.system.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.springMyBatis.system.dao.UserDao;
import com.springMyBatis.system.model.User;
@Service
public class Select {

@Autowired
private UserDao userdao;


public List<User> selectAllUser(){
    System.out.println(userdao);
    List<User> list=userdao.selectAllUser();
    return list;
}

userdao一直为空,求大神指导下

5个回答

qq_26545787
qq_26545787   2016.02.25 11:20

把@Repository改成自定义注解试试,我之前也碰到过这样的问题,使用的是自定义注解将接口注入后就可以了

qq_16168871
qq_16168871   2015.06.09 15:41

mapper呢?贴出来看看

beacon_2011
beacon_2011   Rxr 2015.06.10 15:50

是userdao报空指针么?把userdao粘出来看一下吧

xiesq5112
xiesq5112   2015.10.28 14:51

楼主解决了么?

我也遇到一样的问题了

u013767472
u013767472   2016.01.19 10:39

把DAO层的注解
@Repository
@Transactional
去掉看看?

Csdn user default icon
上传中...
上传图片
插入图片