`

Spring中基于JdbcDaoSupport使用SimpleJdbcDaoSupport

 
阅读更多
学习在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;
	}
}
1
2
分享到:
评论

相关推荐

    spring的JdbcDaoSupport的一些用法示例

    在Java的Spring框架中,`JdbcDaoSupport`是一个非常重要的工具类,它为基于JDBC的数据访问对象(DAO)提供了一种简化数据库操作的方法。这个类是`org.springframework.jdbc.core.support`包下的一个抽象基类,它为...

    Spring MVC+SimpleJdbcDaoSupport增删改查小例子

    在本例中,我们将结合Spring MVC与SimpleJdbcDaoSupport进行数据库操作,实现数据的增删改查功能。 **一、Spring MVC 概述** 1. **核心组件**:DispatcherServlet负责请求分发,Controller处理请求,Model存储数据...

    _Spring_使用 JdbcTemplate和JdbcDaoSupport.rar

    在Spring框架中,`JdbcTemplate`和`JdbcDaoSupport`是两个重要的组件,它们用于简化Java数据库连接(JDBC)的操作,提高了代码的可读性和可维护性。本篇文章将详细阐述这两个类的核心概念、使用场景以及如何在实际...

    JdbcDaoSupport类的使用

    在Spring框架中,`JdbcDaoSupport`是一个非常重要的辅助类,它为使用JDBC(Java Database Connectivity)的DAO(Data Access Object)层提供了一种基础支持。这个类是Spring JDBC模块的一部分,它使得开发者可以方便...

    spring5框架学习笔记

    本笔记主要介绍了 Spring 5 框架的相关知识点,包括 IoC 原理分析、基于 XML 的 IoC 实现、基于 XML 的 DI 使用、基于注解的 IoC 实现、Spring 纯注解实现方式、Spring 整合 Junit、Spring 分模块开发、Spring AOP ...

    Spring JdbcDaoSupport 批量插入数据

    在Spring框架中,`JdbcDaoSupport`是一个非常重要的类,它是Spring为简化数据库操作而提供的基础支持类。本文将深入探讨如何利用`JdbcDaoSupport`进行批量插入数据的操作,以及其背后的原理和源码分析。 首先,`...

    4.Spring中的JdbcTemplate,Spring中的的事务,

    #### 在DAO中使用JdbcTemplate 在DAO层使用JdbcTemplate可以有两种方式: 1. **直接在DAO类中定义JdbcTemplate**: ```java public class AccountDao { private JdbcTemplate jdbcTemplate; public void ...

    Spring3.0MVC注解+SringJdbcDaoSupport案例

    在Spring中,可以使用注解或者XML配置来定义切点(匹配特定方法的点),然后在这些切点上应用通知(如前置通知、后置通知等)。 2. **声明式事务管理**:Spring AOP可以用来实现声明式事务管理,开发者只需在方法上...

    尚硅谷佟刚Spring4代码及PPT.rar

    代码及ppt涵盖 Spring4.0 的所有核心内容:在 Eclipse 中安装 SpringIDE 插件、IOC & DI、在 Spring 中配置 Bean、自动装配、Bean 之间的关系(依赖、继承)、Bean 的作用域、使用外部属性文件、SpEL、管理 Bean 的...

    基于SpringJDBC的BaseDAO

    在Spring JDBC中,可以通过继承`JdbcDaoSupport`类来简化代码编写过程。下面将详细分析BaseDAO类的实现原理及其核心方法。 #### 核心方法解析 1. **查询方法(query)** - **方法定义**:`public List, Object&gt;&gt; ...

    Spring基础讲义-java 入门必备

    在早期版本的Spring中,XML配置文件被用来定义Bean及其依赖。通过`&lt;bean&gt;`标签,可以在配置文件中声明Bean的类型、属性以及依赖关系。 3. **基于注解的IoC实现**: 随着Java注解的发展,Spring引入了基于注解的...

    Spring持久化模板总结

    本文将深入探讨Spring对JDBCTemplate和HibernateTemplate的整合使用方法,以及JdbcDaoSupport和HibernateDaoSupport的支持。 **JdbcTemplate** JdbcTemplate是Spring提供的一个简单、灵活且强大的JDBC抽象层。它...

    spring常用架包

    Spring框架是Java开发中最常用的轻量级开源框架之一,它为构建企业级应用程序提供了全面的基础设施。这个"spring常用架包"集合了Spring框架中常用的核心组件,方便开发者在项目中快速引用。以下是对这些核心组件及其...

    spring.doc

    Spring框架是Java开发中广泛应用的一个轻量级框架,它的核心特性包括依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect-Oriented Programming,简称AOP)。Spring的组件主要包括一系列的jar包、配置...

    spring和数据库层的结合

    3. **自动注入与便利获取**:Spring还提供了`JdbcDaoSupport`等类,这些类可以方便地进行数据源的自动注入,并且很容易地获取到模板对象,进一步减少了代码量。 #### 三、Spring与Hibernate的集成 **Hibernate** ...

    spring.jdbc-3.0.5.jar

    本文将详细探讨Spring JDBC-3.0.5.jar中的核心概念、功能和使用技巧。 1. **Spring JDBC的核心理念** Spring JDBC的主要目标是简化传统的JDBC编程模型,通过提供模板类和数据访问对象(DAO)支持,来处理数据库...

    ibatis+spring

    在Spring框架中,可以使用DI来管理对象间的依赖关系,使用AOP来实现通用横切关注点的模块化。 ### ibatis与Spring的整合 ibatis与Spring的整合主要体现在以下几个方面: #### 1. 依赖管理 在Spring的配置文件中...

    spring_JdbcTemplete使用详解

    ### Spring JDBC 模板类(JdbcTemplate)使用详解 #### 一、Spring JDBC 概述 Spring 提供了一个强大的模板类 `JdbcTemplate` 来简化 JDBC 操作。通过使用 `JdbcTemplate`,开发者能够减少大量的样板代码,提高...

    Spring支持DAO需要的jar包

    此外,Spring的JdbcDaoSupport类可以作为所有基于JDBC的DAO的基类,它提供了与JdbcTemplate的集成。 6. **AOP支持**:Spring的AOP模块可以创建拦截器来增强DAO方法,例如添加日志、性能监控等功能。`spring-aop.jar...

Global site tag (gtag.js) - Google Analytics