dao层bean不能被Autowired识别为什么会这样呢

来源:3-4 service的迁移

慕UI5285863

2019-11-14 23:36:19

老师,我所有dao层的bean都不能被识别,不管在service中还是test中都是如此,也是不能运行的

http://img.mukewang.com/climg/5dcd732009d3488417981106.jpg

server.port=8080
#加入/o2o前缀
server.servlet.context-path=/o2o

#DataSource
#数据库驱动
jdbc.driver=com.mysql.cj.jdbc.Driver
#数据库链接
jdbc.url=jdbc:mysql://localhost:3306/o2o1?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC
#数据库用户名
jdbc.username=root
#数据库密码
jdbc.password=12345678

#Mybatis
mybatis_config_file=mybatis-config.xml
mapper_path=/mapper/**.xml
type_alias_package=com.imooc.o2o.entity

redis.hostname=127.0.0.1
redis.port=6380
redis.database=0
redis.pool.maxActive=100
redis.pool.maxIdle=20
redis.pool.maxWait=3000
redis.pool.testOnBorrow=true
<?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">
<configuration>
    <!-- 配置全局属性 -->
    <settings>
        <!-- 使用jdbc的getGeneratedKeys获取数据库自增主键值 -->
        <setting name="useGeneratedKeys" value="true" />

        <!-- 使用列标签替换列别名 默认:true -->
        <setting name="useColumnLabel" value="true" />

        <!-- 开启驼峰命名转换:Table{create_time} -> Entity{createTime} -->
        <setting name="mapUnderscoreToCamelCase" value="true" />
    </settings>
</configuration>
package com.imooc.o2o.config.dao;

import java.beans.PropertyVetoException;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.mchange.v2.c3p0.ComboPooledDataSource;

/**
 * 配置datasource到ioc容器里面
 * 
 * @author xiangze
 *
 */
@Configuration
// 配置mybatis mapper的扫描路径
@MapperScan("com.imooc.o2o.dao")
public class DataSourceConfiguration {
   @Value("${jdbc.driver}")
   private String jdbcDriver;
   @Value("${jdbc.url}")
   private String jdbcUrl;
   @Value("${jdbc.username}")
   private String jdbcUsername;
   @Value("${jdbc.password}")
   private String jdbcPassword;

   /**
    * 生成与spring-dao.xml对应的bean dataSource
    * 
    * @return
    * @throws PropertyVetoException
    */
   @Bean(name = "dataSource")
   public ComboPooledDataSource createDataSource() throws PropertyVetoException {
      // 生成datasource实例
      ComboPooledDataSource dataSource = new ComboPooledDataSource();
      // 跟配置文件一样设置以下信息
      // 驱动
      dataSource.setDriverClass(jdbcDriver);
      // 数据库连接URL
      dataSource.setJdbcUrl(jdbcUrl);
      // 设置用户名
      dataSource.setUser(jdbcUsername);
      // 设置用户密码
      dataSource.setPassword(jdbcPassword);
      // 配置c3p0连接池的私有属性
      // 连接池最大线程数
      dataSource.setMaxPoolSize(30);
      // 连接池最小线程数
      dataSource.setMinPoolSize(10);
      // 关闭连接后不自动commit
      dataSource.setAutoCommitOnClose(false);
      // 连接超时时间
      dataSource.setCheckoutTimeout(10000);
      // 连接失败重试次数
      dataSource.setAcquireRetryAttempts(2);
      return dataSource;
   }

}
package com.imooc.o2o.config.dao;

import java.io.IOException;

import javax.sql.DataSource;

import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;

@Configuration
public class SessionFactoryConfiguration {
   // mybatis-config.xml配置文件的路径
   private static String mybatisConfigFile;

   @Value("${mybatis_config_file}")
   public void setMybatisConfigFile(String mybatisConfigFile) {
      SessionFactoryConfiguration.mybatisConfigFile = mybatisConfigFile;
   }

   // mybatis mapper文件所在路径
   private static String mapperPath;

   @Value("${mapper_path}")
   public void setMapperPath(String mapperPath) {
      SessionFactoryConfiguration.mapperPath = mapperPath;
   }

   // 实体类所在的package
   @Value("${type_alias_package}")
   private String typeAliasPackage;

   @Autowired
   private DataSource dataSource;

   /**
    * 创建sqlSessionFactoryBean 实例 并且设置configtion 设置mapper 映射路径 设置datasource数据源
    * 
    * @return
    * @throws IOException
    */
   @Bean(name = "sqlSessionFactory")
   public SqlSessionFactoryBean createSqlSessionFactoryBean() throws IOException {
      SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
      // 设置mybatis configuration 扫描路径
      sqlSessionFactoryBean.setConfigLocation(new ClassPathResource(mybatisConfigFile));
      // 添加mapper 扫描路径
      PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver();
      String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + mapperPath;
      sqlSessionFactoryBean.setMapperLocations(pathMatchingResourcePatternResolver.getResources(packageSearchPath));
      // 设置dataSource
      sqlSessionFactoryBean.setDataSource(dataSource);
      // 设置typeAlias 包扫描路径
      sqlSessionFactoryBean.setTypeAliasesPackage(typeAliasPackage);
      return sqlSessionFactoryBean;
   }

}
<?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">
<mapper namespace="com.imooc.o2o.dao.AreaDao">
   <select id="queryArea" resultType="com.imooc.o2o.entity.Area">
      SELECT area_id, area_name,
      priority, create_time, last_edit_time
      FROM tb_area
      ORDER BY priority
      DESC
   </select>
   <insert id="insertArea" useGeneratedKeys="true" keyProperty="areaId"
      keyColumn="area_id">
      INSERT INTO
      tb_area(area_name,priority,
      create_time,last_edit_time)
      VALUES
      (#{areaName},#{priority},
      #{createTime},#{lastEditTime})
   </insert>
   <update id="updateArea" parameterType="com.imooc.o2o.entity.Area">
      update tb_area
      <set>
         <if test="areaName != null">area_name=#{areaName},</if>
         <if test="priority != null">priority=#{priority},</if>
         <if test="lastEditTime != null">last_edit_time=#{lastEditTime}</if>
      </set>
      where area_id=#{areaId}
   </update>
   <delete id="deleteArea">
      DELETE FROM
      tb_area
      WHERE
      area_id =
      #{areaId}
   </delete>
   <delete id="batchDeleteArea" parameterType="long">
      DELETE FROM
      tb_area
      WHERE area_id IN
      <foreach collection="list" item="areaId" open="(" separator=","
         close=")">
         #{areaId}
      </foreach>
   </delete>
</mapper>

以上是与dao有关的配置文件,抽取了AreaDao的mapper,我已清除过缓存重启等等都没用,请老师指点

写回答

1回答

好帮手慕阿满

2019-11-15

同学你好,这个可能还是IDEA的原因造成,建议同学使用@Resource替换@Autowired,如:

http://img.mukewang.com/climg/5dce3c400981024e03850123.jpg

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

0

0 学习 · 8263 问题

查看课程