`
勤业思行
  • 浏览: 82180 次
  • 性别: Icon_minigender_1
  • 来自: 贵阳
社区版块
存档分类
最新评论

Spring中装配DAO

阅读更多

在我的上个博客中对Spring的JDBC模板类进行了源码分析。我们在使用时只需要使用JdbcTemplate类就能完成数据库操作。下面我们看一个例子:

1、DAO实现类

package com.dao.jdbc;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;

import com.dao.UserDao;
import com.domain.User;

public class UserDaoImpl  implements UserDao {

	private JdbcTemplate jdbcTemplate;

	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}

	public int getMatchCount(String userName, String password) {
		String sqlStr = " SELECT count(*) FROM t_user "
				+ " WHERE user_name =? and password=? ";
		return jdbcTemplate.queryForInt(sqlStr, new Object[] { userName, password });
	}

	public User findUserByUserName(final String userName) {
		String sqlStr = " SELECT user_id,user_name,credits "
				+ " FROM t_user WHERE user_name =? ";
		final User user = new User();
		jdbcTemplate.query(sqlStr, new Object[] { userName },
				new RowCallbackHandler() {
					public void processRow(ResultSet rs) throws SQLException {
						user.setUserId(rs.getInt("user_id"));
						user.setUserName(userName);
						user.setCredits(rs.getInt("credits"));
					}
				});
		return user;
	}

	public void updateLoginInfo(User user) {
		String sqlStr = " UPDATE t_user SET last_visit=?,last_ip=?,credits=? "
				+ " WHERE user_id =?";
		jdbcTemplate.update(sqlStr, new Object[] { user.getLastVisit(),
				user.getLastIp(),user.getCredits(),user.getUserId()});
	}

}

 

从上面我们可以看出,我们在进行数据库操作时只需要JdbcTemplate类就可以完成所有操作。在DAO的实现类中并没有看到数据库连接、关闭等操作。只是根据具体的CRUD操作用面向对象的方式来传递查询参数和返回领域对象DO。

然而,我们的Spring中DAO是怎样来反问数据库的呢?

实际上在讲JdbcTemplate实现机制时我就讲到:JdbcTemplate实现了接口JdbcOperations的所有的数据库操作方法,同时它继承了JdbcAccessor类。JdbcAccessor可以从DataSource中获取相应的属性。所以JdbcTemplate就是从一个DataSource中获取或返回连接。而我们具体的DAO实现类中都有一个JdbcTemplate属性和一个setJdbcTemplate();

所以,我们要想DAO获取数据库连接,就必须事先声明一个数据源。

2、数据源声明

<beans>
	<!-- 配置数据源  -->
	<bean id="dataSource"
		class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url"
			value="jdbc:mysql://localhost:3306/sampledb" />
		<property name="username" value="root" />
		<property name="password" value="admin" />
	</bean>
...
</beans>

注:这里使用Jakarta的DBCP开源数据库实现方案定义一个数据源。并设置了数据库连接的相关属性。

3、接下来,我们需要配置所使用的JDBC模板类并设置模板类所使用的数据源

 

 

<!-- 配置Jdbc模板  -->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
	   <property name="dataSource" ><ref bean="dataSource"/> </property>
	</bean> 

注:其中的<ref bean="dataSource"/> 中的dataSource即前面定义的数据源Bean ID。

4、为DAO分配模板类:将模板类传入DAO实现类的setJdbcTemplate()

<!-- 配置dao  -->
	<bean id="loginLogDao" class="com.dao.jdbc.LoginLogDaoImpl">
	   <property name="jdbcTemplate" ref="jdbcTemplate"></property>
	</bean>	
	<bean id="userDao" class="com.dao.jdbc.UserDaoImpl">
	   <property name="jdbcTemplate" ref="jdbcTemplate"></property>
	</bean>

 为每一个DAO都要配置一个关联的JdbcTemplate Bean。

注:其中的ref="jdbcTemplate"中的jdbcTemplate为JDBC模板类配置中的Bean ID。

5、当然,可以将这些配置全部放在一个Spring配置文件中。Spring配置文件的基本结构如下:

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
         <bean>...<bean>
         ...
</beans>

 前面的数据源配置、JDBC模板类配置、DAO配置分别对应于Spring配置文件中的一个bean标记。

 

0
1
分享到:
评论

相关推荐

    Spring.3.x企业应用开发实战(完整版).part2

    2.3.4 在Spring中装配DAO 2.4 业务层 2.4.1 UserService 2.4.2 在Spring中装配Service 2.4.3 单元测试 2.5 展现层 2.5.1 配置Spring MVC框架 2.5.2 处理登录请求 2.5.3 JSP视图页面 2.6 运行Web应用 2.7 小结 第2篇...

    Spring3.x企业应用开发实战(完整版) part1

    2.3.4 在Spring中装配DAO 2.4 业务层 2.4.1 UserService 2.4.2 在Spring中装配Service 2.4.3 单元测试 2.5 展现层 2.5.1 配置Spring MVC框架 2.5.2 处理登录请求 2.5.3 JSP视图页面 2.6 运行Web应用 2.7 小结 第2篇...

    spring自动装配项目struts2

    spring自动装配项目struts2,使用了struts2 ,spring2.5 ,hibernate,和spring 自动装配

    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中文帮助文档

    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...

    模拟实现Spring中的注解装配

    在Spring中,XML文件中的bean配置是实现Spring IOC的核心配置文件,在早版本的Spring中,只能基于XML配置文件,配置各个对象之间的依赖关系。在Spring 2.5以后出现了注解,使用注解结合XML的方式,简化了XML配置的...

    Spring面试题含答案.pdf

    35. 你可以在 Spring 中注入一个 null 和一个空字符串吗? 36. 什么是基于 Java 的 Spring 注解配置? 给一些注解的例子 37. 什么是基于注解的容器配置? 38. 怎样开启注解装配? 39. @Required 注解 40. @Autowired ...

    Java后端开发-Spring库.zip

    Spring所需要的jar包都在里面。 内容: 一、Spring入门程序 1.创建项目,Spring依赖包。 2.创建JavaBean:HelloSpring ...5.编写applicationContext.xml配置文件,Dao装配到Service,Service装配到Controller

    《精通Spring2.X企业应用开发详解》随书源码1-15章

    概述 第1章 Spring概述 第2章 快速入门 第2篇 Spring核心技术 第3章 IoC容器概述 第4章 在IoC容器中装配Bean 第5章 Spring容器高级主题 第6章 Spring AOP基础 第7章 基于@AspectJ和Schema的...

    Spring in Action(第二版 中文高清版).part2

    16.5 Spring中带有DWR的支持Ajax的应用程序 16.5.1 直接Web远程控制 16.5.2 访问Spring管理的Bean DWR 16.6 小结 附录A 装配Spring A.1 下载Spring A.1.1 研究Spring发布 A.1.2 构建自己的类路径 A.2 把...

    Spring in Action(第二版 中文高清版).part1

    16.5 Spring中带有DWR的支持Ajax的应用程序 16.5.1 直接Web远程控制 16.5.2 访问Spring管理的Bean DWR 16.6 小结 附录A 装配Spring A.1 下载Spring A.1.1 研究Spring发布 A.1.2 构建自己的类路径 A.2 把...

    Spring 2.0 开发参考手册

    6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. ...

    Spring攻略(第二版 中文高清版).part1

    1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用构造程序创建Bean 14 1.3.1 问题 14 1.3.2 解决方案 14 1.3.3 工作原理 14 1.4 解决构造程序歧义 17 ...

    spring in action英文版

     2.3.1 处理自动装配中的不确定性  2.3.2 混合使用自动和手动装配  2.3.3 缺省自动装配  2.3.4 何时采用自动装配  2.4 使用Spring的特殊Bean  2.4.1 对Bean进行后处理  2.4.2 对Bean工厂进行后...

    Spring攻略(第二版 中文高清版).part2

    1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用构造程序创建Bean 14 1.3.1 问题 14 1.3.2 解决方案 14 1.3.3 工作原理 14 1.4 解决构造程序歧义 17 ...

    《精通Spring2.X企业应用开发详解》16-19章

    概述 第1章 Spring概述 第2章 快速入门 第2篇 Spring核心技术 第3章 IoC容器概述 第4章 在IoC容器中装配Bean 第5章 Spring容器高级主题 第6章 Spring AOP基础 第7章 基于@AspectJ和Schema的...

    spring chm文档

    6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. 其它资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点实施 7.2.3. AspectJ切入点表达式 7.2.4. ...

    《精通Spring2.X企业应用开发详解》20-23

    概述 第1章 Spring概述 第2章 快速入门 第2篇 Spring核心技术 第3章 IoC容器概述 第4章 在IoC容器中装配Bean 第5章 Spring容器高级主题 第6章 Spring AOP基础 第7章 基于@AspectJ和Schema的...

    Spring API

    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