liruo233
liruo233
采纳率50%
2019-04-02 23:05 阅读 373

Spring框架JdbcDaoSupport中的getJdbcTemplate()为空

5

网上的方法试过好几次,我记得前几天下面这种写法还可以顺利执行的,后来我大改了一下,在改回来就行不通了
使用注解获取不到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 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;
        }
    
    点赞 评论 复制链接分享
  • devmiao devmiao 2019-04-03 00:41
    点赞 评论 复制链接分享

相关推荐