学习在Spring中使用数据库的时候发现Spring对JDBC的Dao有个支持类JdbcDaoSupport,通过继承这个类可以减少JdbcTemplate的代码量,于是就照着《Spring In Action 2》中的没想到出现了下列异常
Failed to convert property value of type org.springframework.jdbc.core.simple.SimpleJdbcTem plate] to required
type [org.springframework.jdbc.core.JdbcTemplate] for property "jdbcTemplate';
自己的配置文件是
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="jdbc.properties"/>
</bean>
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClassName}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="autoCommitOnClose" value="true"/>
<property name="checkoutTimeout" value="${cpool.checkoutTimeout}"/>
<property name="initialPoolSize" value="${initialPoolSize}"/>
<property name="minPoolSize" value="${cpool.minPoolSize}"/>
<property name="maxPoolSize" value="${cpool.maxPoolSize}"/>
<property name="maxIdleTime" value="${cpool.maxIdleTime}"/>
<property name="acquireIncrement" value="${cpool.acquireIncrement}"/>
<property name="maxIdleTimeExcessConnections" value="${cpool.maxIdleTimeExcessConnections}"/>
</bean>
<bean id="simpleJdbcTemplate"
class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">
<constructor-arg><ref bean="dataSource"/></constructor-arg>
</bean>
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg><ref bean="dataSource"/></constructor-arg>
</bean>
<bean id="testImpl" class="spring.TestImpl">
<property name="jdbcTemplate" ref="simpleJdbcTemplate"/>
</bean>
</beans>
通过异常很清楚的找到了出问题的配置部分
<bean id="testImpl" class="spring.TestImpl">
<property name="jdbcTemplate" ref="simpleJdbcTemplate"/>
</bean>
于是就试着把这段改为
<bean id="testImpl" class="spring.TestImpl">
<property name="simpleJdbcTemplate" ref="simpleJdbcTemplate"/>
</bean>
没想到出现了simpleJdbcTemplate不能设置的错误。
于是接着查看spring官方API发现org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport继承了 JdbcDaoSupport,同时新增了SimpleJdbcTemplate getSimpleJdbcTemplate()和protected void initTemplateConfig()两个方法,并没有setSimpleJdbcTemplate()方法,没有这个方法当然不能进行注入了,所以会出现simpleJdbcTemplate不能设置的错误。但是我们发现了initTemplateConfig()这个方法,通过查阅API发现这个方法是通过配置的的JdbcTemplate创建一个新的SimpleJdbcTemplate。所以只要把原来出错的那段配置文件改为
<bean id="testImpl" class="spring.TestImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
就解决问题了。经过测试,问题解决。
附TestImpl代码
package spring;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;
public class TestImpl extends SimpleJdbcDaoSupport implements TestDao {
public TestImpl()
{
}
private static final String SEARCH_BY_ID = "select * from test where id=?";
@Override
public Test searchById(int id) {
List<Test> matches = this.getSimpleJdbcTemplate().query(SEARCH_BY_ID, new ParameterizedRowMapper<Test>(){
@Override
public Test mapRow(ResultSet rs, int rowNum) throws SQLException {
Test test= new Test();
test.setId(rs.getInt(1));
test.setMsg(rs.getString(2));
return test;
}
},id);
return matches.size() > 0 ? matches.get(0) : null;
}
}
分享到:
相关推荐
在Java的Spring框架中,`JdbcDaoSupport`是一个非常重要的工具类,它为基于JDBC的数据访问对象(DAO)提供了一种简化数据库操作的方法。这个类是`org.springframework.jdbc.core.support`包下的一个抽象基类,它为...
在本例中,我们将结合Spring MVC与SimpleJdbcDaoSupport进行数据库操作,实现数据的增删改查功能。 **一、Spring MVC 概述** 1. **核心组件**:DispatcherServlet负责请求分发,Controller处理请求,Model存储数据...
在Spring框架中,`JdbcTemplate`和`JdbcDaoSupport`是两个重要的组件,它们用于简化Java数据库连接(JDBC)的操作,提高了代码的可读性和可维护性。本篇文章将详细阐述这两个类的核心概念、使用场景以及如何在实际...
在Spring框架中,`JdbcDaoSupport`是一个非常重要的辅助类,它为使用JDBC(Java Database Connectivity)的DAO(Data Access Object)层提供了一种基础支持。这个类是Spring JDBC模块的一部分,它使得开发者可以方便...
本笔记主要介绍了 Spring 5 框架的相关知识点,包括 IoC 原理分析、基于 XML 的 IoC 实现、基于 XML 的 DI 使用、基于注解的 IoC 实现、Spring 纯注解实现方式、Spring 整合 Junit、Spring 分模块开发、Spring AOP ...
在Spring框架中,`JdbcDaoSupport`是一个非常重要的类,它是Spring为简化数据库操作而提供的基础支持类。本文将深入探讨如何利用`JdbcDaoSupport`进行批量插入数据的操作,以及其背后的原理和源码分析。 首先,`...
#### 在DAO中使用JdbcTemplate 在DAO层使用JdbcTemplate可以有两种方式: 1. **直接在DAO类中定义JdbcTemplate**: ```java public class AccountDao { private JdbcTemplate jdbcTemplate; public void ...
在Spring中,可以使用注解或者XML配置来定义切点(匹配特定方法的点),然后在这些切点上应用通知(如前置通知、后置通知等)。 2. **声明式事务管理**:Spring AOP可以用来实现声明式事务管理,开发者只需在方法上...
代码及ppt涵盖 Spring4.0 的所有核心内容:在 Eclipse 中安装 SpringIDE 插件、IOC & DI、在 Spring 中配置 Bean、自动装配、Bean 之间的关系(依赖、继承)、Bean 的作用域、使用外部属性文件、SpEL、管理 Bean 的...
在Spring JDBC中,可以通过继承`JdbcDaoSupport`类来简化代码编写过程。下面将详细分析BaseDAO类的实现原理及其核心方法。 #### 核心方法解析 1. **查询方法(query)** - **方法定义**:`public List, Object>> ...
在早期版本的Spring中,XML配置文件被用来定义Bean及其依赖。通过`<bean>`标签,可以在配置文件中声明Bean的类型、属性以及依赖关系。 3. **基于注解的IoC实现**: 随着Java注解的发展,Spring引入了基于注解的...
本文将深入探讨Spring对JDBCTemplate和HibernateTemplate的整合使用方法,以及JdbcDaoSupport和HibernateDaoSupport的支持。 **JdbcTemplate** JdbcTemplate是Spring提供的一个简单、灵活且强大的JDBC抽象层。它...
Spring框架是Java开发中最常用的轻量级开源框架之一,它为构建企业级应用程序提供了全面的基础设施。这个"spring常用架包"集合了Spring框架中常用的核心组件,方便开发者在项目中快速引用。以下是对这些核心组件及其...
Spring框架是Java开发中广泛应用的一个轻量级框架,它的核心特性包括依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect-Oriented Programming,简称AOP)。Spring的组件主要包括一系列的jar包、配置...
3. **自动注入与便利获取**:Spring还提供了`JdbcDaoSupport`等类,这些类可以方便地进行数据源的自动注入,并且很容易地获取到模板对象,进一步减少了代码量。 #### 三、Spring与Hibernate的集成 **Hibernate** ...
本文将详细探讨Spring JDBC-3.0.5.jar中的核心概念、功能和使用技巧。 1. **Spring JDBC的核心理念** Spring JDBC的主要目标是简化传统的JDBC编程模型,通过提供模板类和数据访问对象(DAO)支持,来处理数据库...
在Spring框架中,可以使用DI来管理对象间的依赖关系,使用AOP来实现通用横切关注点的模块化。 ### ibatis与Spring的整合 ibatis与Spring的整合主要体现在以下几个方面: #### 1. 依赖管理 在Spring的配置文件中...
### Spring JDBC 模板类(JdbcTemplate)使用详解 #### 一、Spring JDBC 概述 Spring 提供了一个强大的模板类 `JdbcTemplate` 来简化 JDBC 操作。通过使用 `JdbcTemplate`,开发者能够减少大量的样板代码,提高...
此外,Spring的JdbcDaoSupport类可以作为所有基于JDBC的DAO的基类,它提供了与JdbcTemplate的集成。 6. **AOP支持**:Spring的AOP模块可以创建拦截器来增强DAO方法,例如添加日志、性能监控等功能。`spring-aop.jar...