liruo233 2019-04-02 23:05 采纳率: 50%
浏览 458
已结题

Spring框架JdbcDaoSupport中的getJdbcTemplate()为空

网上的方法试过好几次,我记得前几天下面这种写法还可以顺利执行的,后来我大改了一下,在改回来就行不通了
使用注解获取不到JdbcTemplate,使用配置文件的方式又无法重写getset方法,所以很没辙

数据层

@Repository
public class DbUtil extends JdbcDaoSupport {
    @Autowired
    public void  setDataSource22(DataSource dataSource) {
        setDataSource(dataSource);
        // 重新部署时可以输出对象,并且输出了两次
        System.out.println(getJdbcTemplate());
    }

    public List<Map<String, Object>> queryList(String sql,Object[] obj){
        // 部署完毕从jsp页面执行到这儿时输出值为空
        System.out.println(getJdbcTemplate());
        List<Map<String, Object>> queryForList = getJdbcTemplate().queryForList(sql,obj);
        return queryForList;
    }

IOC配置文件

    <!-- 配置JdbcTemplate-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <bean id="dbutil" class="com.library.dao.DbUtil">
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!-- 加载外部文件 -->
    <context:property-placeholder location="/WEB-INF/c3p0.properties"/>
    <!-- C3P0连接池配置 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
        destroy-method="close">
        <property name="driverClass" value="${driverClass}" />
        <property name="jdbcUrl" value="${jdbcUrl}" />
        <property name="user" value="${user}" />
        <property name="password" value="${password}" />
        <!-- 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数,Default:3 -->
        <property name="acquireIncrement" value="${acquireIncrement}" />
        <!-- 初始化时获取的连接池数量,Default:3 -->
        <property name="initialPoolSize" value="${initialPoolSize}" />
        <!-- 连接池中保留的最小连接数,Default:3 -->
        <property name="minPoolSize" value="${minPoolSize}" />
        <!-- 连接池中保留的最大连接数,Default:15 -->
        <property name="maxPoolSize" value="${maxPoolSize}" />
    </bean>
  • 写回答

2条回答 默认 最新

  • liruo233 2019-04-03 09:47
    关注

    找到问题了,出在我没有贴出来的代码上,因为我使用DbUtil时直接new了一个新对象出来,所以一些元素无法传递,必须使用注解自动注入才可以参考

    原代码

    @Repository
    public class LoginDaoImpl extends ExecuteSqlDao{
    
        public List<Map<String, Object>> queryLogin(LoginDo loginDo){
            **DbUtil dbutil = new DbUtil();**
            ArrayList<Object> valueList = new ArrayList<Object>();
            String sql = "select * from login where job_id=? and worker_id=? and login_pw=?";
            valueList.add(loginDo.getJob_id());
            valueList.add(loginDo.getWorker_id());
            valueList.add(loginDo.getLogin_pw());
            List<Map<String, Object>> queryForList = dbutil.queryList(sql, valueList.toArray());
    
            return queryForList;
        }
    

    新代码

    
    @Repository
    public class LoginDaoImpl extends ExecuteSqlDao{
        **@Resource(name="dbutil")
        DbUtil dbutil;**
    
        public List<Map<String, Object>> queryLogin(LoginDo loginDo){
            ArrayList<Object> valueList = new ArrayList<Object>();
            String sql = "select * from login where job_id=? and worker_id=? and login_pw=?";
            valueList.add(loginDo.getJob_id());
            valueList.add(loginDo.getWorker_id());
            valueList.add(loginDo.getLogin_pw());
            List<Map<String, Object>> queryForList = dbutil.queryList(sql, valueList.toArray());
    
            return queryForList;
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置