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条)

报告相同问题?

悬赏问题

  • ¥20 matlab计算中误差
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊