`
wang19841229
  • 浏览: 96556 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

spring中如何注解JDBCDAO的datasource属性

 
阅读更多

最近看了看spring的东西,发现注解是个好东西。不过在应用到JDBC DAO的时候遇到点小麻烦。现在和大家分享一下。

我们知道我们使用spring的JDBC功能时候,无非是继承spring提供的三个JDBC DAO的父类。

JdbcDaoSupport,NamedParameterJdbcDaoSupport,SimpleJdbcDaoSupport。其中在3.0以后SimpleJdbcDaoSupport已经被标记为过期了。原因是3.0以后只支持JAVA5环境应用,所以SimpleJdbcDaoSupport的特性前两个DAO父类都已经提供了。

在原来上我们继承这个种DAO的父类目的主要是为了使用它们自己JDBC模板。

 

/*
 * Copyright 2002-2012 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.jdbc.core.namedparam;

import org.springframework.jdbc.core.support.JdbcDaoSupport;

/**
 * Extension of JdbcDaoSupport that exposes a NamedParameterJdbcTemplate as well.
 *
 * @author Thomas Risberg
 * @author Juergen Hoeller
 * @since 2.0
 * @see NamedParameterJdbcTemplate
 */
public class NamedParameterJdbcDaoSupport extends JdbcDaoSupport {

	private NamedParameterJdbcTemplate namedParameterJdbcTemplate;


	/**
	 * Create a NamedParameterJdbcTemplate based on the configured JdbcTemplate.
	 */
	@Override
	protected void initTemplateConfig() {
		this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(getJdbcTemplate());
	}

	/**
	 * Return a NamedParameterJdbcTemplate wrapping the configured JdbcTemplate.
	 */
	public NamedParameterJdbcTemplate getNamedParameterJdbcTemplate() {
	  return namedParameterJdbcTemplate;
	}

}

 上面是用NamedParameterJdbcDaoSupport类的源代码,我们发现其中有一个叫做NamedParameterJdbcTemplate的成员变量和一个getNamedParameterJdbcTemplatef方法。

 

我们在平时开发的时候就继承这个类,在自己的方法中调用getNamedParameterJdbcTemplate()方法获取模板。再利用模板的回调进行数据库操作,这就是Spring引以自豪的模板模式。有兴趣的可以查看模板模式这个比较牛X的设计模式,对大家的程序设计提高很有好处的。但是这种模式有一个比较大的问题,我估计伟大的ROD先生设计Spring这部分的时候没有想到后来JAVA世界中出现了注解这个东东,因为在spring早期版本的的时候还完全都是XML的配置时代。从源代码看这个类的设计是2003年的时候。在XML配置时代我们除了要继承spring的JDBC父类以外还有做一件事情很重要,就是在XML中配置Data source属性的注入。

 

<bean class="com.tjsinfo.springauto.dao.SubUserDAO">
	<property name="dataSource" ref="dataSource"</property>
</bean>

 

 

就想现在这样,可是现在是注解的天下了。大家都已少配置多注解多约定为时尚(不过我个人感觉过度的使用注解和约定对于软件管理的要求很重要)。我们怎么才能使datasouce注解的方式注入到自己的DAO内呢?

小弟我一开始想了很多办法都不行,比如自己定义一个datasouce成员变量,在变量上增加注解。后来我看看源代码突然领悟到。问题的关键不在于datasouce,其实我们只要可以获得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"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">
	<context:component-scan base-package="com.tjsinfo.springauto"/>
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://127.0.0.1:3306/springmvc" />
		<property name="username" value="root" />
		<property name="password" value="root" />
	</bean>
	<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
	   <constructor-arg ref="dataSource" />
	</bean>
	
	
	
</beans>

 在XML文件中配置一个NamedParameterJdbcTemplate,我用的是NamedParameterJdbcTemplate用别的模板的可以换成自己的熟悉的模板,对这个模板的注入DataSource。

自己的DAO中这样注解

package com.tjsinfo.springauto.dao;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;

import com.tjsinfo.springauto.vo.User;

@Repository("userDAO")
public class SuperUserDAO  implements IUserDAO {
	
	@Autowired
	private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
	
	private static final String ADDUSERSQL = "INSERT INTO `t_system_user` (`id`,`loginname`,`password`,`systemname`,`state`,`sort`) VALUES (:id,:loginname,:password,:systemname,:state,:sort);";
	public Boolean addUser(User user) {
		// TODO Auto-generated method stub
	BeanPropertySqlParameterSource beanPropertySqlParameterSource = new BeanPropertySqlParameterSource(user);
	namedParameterJdbcTemplate.update(ADDUSERSQL, beanPropertySqlParameterSource);
	return true;
    }

}

 直接使用一个模板的成员变量,在上面注解而且连原来的spring的父类也不用继承了。也算是解耦了。

这是小弟的自己的解决办法,不知道会不会有什么问题,不过我自己JUnit测试操作都是可以的。

欢迎大家拍砖,spring博大精深献丑了。

 

分享到:
评论

相关推荐

    SpringBoot框架Datasource注入

    `@ConfigurationProperties`注解允许我们将YAML或properties配置文件中的属性绑定到`DataSource`的配置上,`prefix = "spring.datasource"`指定了配置前缀。 Spring Boot的自动配置机制(Auto Configuration)会在...

    Spring mvc、 Spring、 Spring jdbc 整合实例源码

    Spring MVC、Spring和Spring JDBC是Java开发中非常重要的三大框架,它们构成了Spring框架的核心部分,广泛应用于企业级应用开发。本实例源码旨在提供一个整合这三者的基础模板,帮助开发者理解和掌握它们之间的协同...

    利用JUnit和Spring-test对SpringJDBC组件DAO层测试

    这使得我们可以在测试中注入所需的Bean,例如DataSource、JdbcTemplate或NamedParameterJdbcTemplate,这些都是SpringJDBC的核心组件。 下面是如何设置一个基本的测试场景: 1. 引入必要的依赖:在项目中添加JUnit...

    干净的spring初始化工程,包含ioc,di,datasource,但是不包含aop

    在这个初始化工程中,已经包含了对DataSource的支持,这意味着我们可以方便地配置数据库连接,并通过Spring的DAO支持进行数据访问。 在Spring项目中,通常会有一个`applicationContext.xml`或类似的配置文件,用于...

    Spring学习笔记(17)----使用Spring注解方式管理事务

    在本篇Spring学习笔记中,我们将探讨如何使用Spring框架的注解方式来管理事务,这是一种在现代Java应用中广泛采用的方法。Spring框架以其强大的依赖注入和面向切面编程能力,为事务管理提供了简洁且高效的解决方案。...

    Stuts2+Spring+JDBC的配置

    在Spring框架中,JDBC的使用可以通过DataSource和JdbcTemplate等类进行简化,减少了手动处理连接、事务和异常的繁琐工作。 将Struts2、Spring和JDBC集成,首先需要在项目中引入相关的jar包。这些jar包通常包括...

    spring中Resource和Component注解

    例如,如果一个类有一个名为`dataSource`的属性,我们可以在该属性上使用`@Resource`注解,Spring会自动寻找名字为`dataSource`的bean并将其注入。`@Resource`注解可以用于字段、setter方法或者构造器参数,支持JSR-...

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

    &lt;bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"&gt; &lt;property name="driverClassName" value="com.mysql.jdbc.Driver"/&gt; &lt;property name="url" value="jdbc:mysql://...

    spring中事物配置

    &lt;bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"&gt; &lt;property name="dataSource" ref="dataSource"/&gt; ``` 其中,`dataSource`是你的数据源引用。 2...

    spring.zip

    在Spring JDBC中,我们需要创建一个名为`DataSource`的配置,用于连接数据库,如`applicationContext.xml`或`beans.xml`: ```xml &lt;bean id="dataSource" class="org.springframework.jdbc.datasource....

    Spring的DAO

    Spring的DAO支持是其核心模块之一,用于简化数据访问层(DAO)的开发,通过将固定的数据访问逻辑和业务逻辑分离,提高了代码的可维护性和复用性。Spring的DAO设计模式主要体现在模板(Template)和回调(Callback)...

    spring整合myBatis源码及jar

    &lt;bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"&gt; &lt;!-- 数据库连接属性 --&gt; &lt;bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"&gt; ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    12.2.2. 在Spring的application context中创建 SessionFactory 12.2.3. HibernateTemplate 12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. ...

    实验 spring 声明事务

    &lt;bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"&gt; &lt;property name="dataSource" ref="dataSource" /&gt; &lt;!-- 启用基于注解的事务管理 --&gt; &lt;!-- ...

    Spring声明式事务配置模板2.x

    3. **@Transactional注解**:在Java代码中,我们可以在Service层或者DAO层的方法上使用`@Transactional`注解,指定事务的属性,如传播行为、隔离级别、超时时间等。例如: ```java @Service public class ...

    SpringBoot项目采用JDBC连接MySql示例

    示例中的`sample1-jdbc`可能包含一个简单的DAO(Data Access Object)类,使用`JdbcTemplate`执行SQL查询。例如,创建一个用户的方法如下: ```java @Autowired private JdbcTemplate jdbcTemplate; public ...

    spring内置jdbctemplate使用demo

    &lt;bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"&gt; &lt;property name="dataSource" ref="dataSource"/&gt; ``` 5. **使用注解控制事务**:在需要进行事务...

    spring整合mybatis的jar_spring+mybatis_

    &lt;bean id="sqlSessionFactory" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"&gt; &lt;property name="dataSource" ref="dataSource"/&gt; ``` - 最后,配置MyBatis的...

    Spring-事务的配置

    本文将深入探讨Spring中如何配置事务管理,包括JDBC事务的使用。 首先,Spring支持两种事务管理方式:声明式事务管理和编程式事务管理。声明式事务管理通过在XML配置文件或注解中定义事务边界,使事务管理与业务...

    Spring中文帮助文档

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

Global site tag (gtag.js) - Google Analytics