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个回答

找到问题了,出在我没有贴出来的代码上,因为我使用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;
    }
liruo233
liruo233 我原来就是按照这个改的,但还是报空指针错误四月 03, 2019 8:48:51 上午 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet [springmvc] in context with path [/LibraryManagementSystem] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause java.lang.NullPointerException
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐