`
mmdev
  • 浏览: 12926089 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Spring研究 (3) 使用JDBC

阅读更多

Spring对JDBC进行了非常优雅的封装,通过一系列的模板方法,我们只需简单的几行代码就可实现数据库的访问。

在上次的Web App的基础上,我们将通过Spring的JdbcTemplate访问数据库从而实现用户验证。

为了尽量简化,我们创建一个Access数据库,建立表Account,包含两个字段:

username:VARCHAR(20),主键;
password:VARCHAR(20)。

然后输入一些测试数据,注册到系统DSN,名字为Blog。

接下来我们在Tomcat中配置一个名为“jdbc/blog”的DataSource如下:

如果你使用其他数据库,只需要保证表的逻辑结构和JDNI名“jdbc/blog”。在AccountManager中,我们使用JdbcTemplate访问数据库来验证用户:

Account getAccount(String username, String password) throws Exception {
// validate the password:
InitialContext ctx = new InitialContext();
DataSource dataSource = (DataSource)ctx.lookup("java:comp/env/jdbc/blog");
JdbcTemplate jt = new JdbcTemplate(dataSource);
String pass = (String) jt.queryForObject(
"select password from Account where username=?",
new Object[] {username}, String.class);
if(password.equals(pass))
{
Account account = new Account();
account.setUsername(username);
account.setPassword(password);
return account;
}
throw new Exception("authorization failed.");
}

编译运行,我们可以输入hello.c?username=xxx&password=xxx来测试用户登录,如果匹配数据库中的记录,会显示出用户名,否则可以看到authorization failed异常。要更友好的显示登陆失败,可以在Controller中导向一个login_failed.jsp并给出登陆失败的原因。

下面我们来看这个AccountManager,很显然在验证逻辑中我们写入了JNDI查找DataSource的代码,这将导致比较“生硬”的编码。“依赖注入”此刻显示出了威力:我们让容器注入DataSource:

public class AccountManager implements java.io.Serializable {
private DataSource dataSource;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}

Account getAccount(String username, String password) throws Exception {
JdbcTemplate jt = new JdbcTemplate(dataSource);
...
}
}

OK,现在这个AccountManager变得优雅多了,现在如何配置DataSource的注入呢?Spring提供了一个DataSourceUtils类,通过静态方法getDataSourceFromJndi来获得容器中配置的DataSource。我们添加以下配置:

<bean id="dataSource"
class="org.springframework.jdbc.datasource.DataSourceUtils"
factory-method="getDataSourceFromJndi">
<constructor-arg><value>jdbc/blog</value></constructor-arg>
</bean>
<bean id="accountManager" class="AccountManager">
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>

现在重新部署,效果和以前一样,但是相关代码已被“放到”配置文件中了。

:( 待续... :)

分享到:
评论

相关推荐

    Spring Mybatis Sharding-JDBC demo

    学习spring与sharding-jdbc时苦于无demo,自行研究过于麻烦,用别人的代码,整理后,本地跑通。对理解还是有一定的帮助的。自己去找,会浪费大量时间。按照步骤就可以。如有问题,请看日志,认真解决。

    Spring源码学习文档,绝对值得好好研究~~

    Spring源代码分析(三):Spring JDBC.doc Spring源代码解析(四):Spring MVC.doc Spring源代码解析(五):Spring AOP获取Proxy.doc Spring源代码解析(六):Spring声明式事务处理.doc Spring源代码解析(七):Spring...

    精通spring--源代码

    精通spring 源代码 对JavaEE5及Spring2.5进行了综述。包括Java EE5,步入Spring2.5,获得... 全书理论与实践并重,通过大量的实例帮助读者尽快掌握Spring2,5的各种基本和高级使用技巧,从而提高本书的参考和阅读价值

    精通Spring(书签)

    专业人士,权威经典。  Spring 2.5是迄今为止完美的Java EE架构级框架,全面深入、多维度... 全书理论与实践并重,通过大量的实例帮助读者尽快掌握Spring2,5的各种基本和高级使用技巧,从而提高本书的参考和阅读价值

    Spring in Action(第2版)中文版

    目录 第一部分spring的核心 第1章开始spring之旅 ...b.3使用spring进行综合测试 b.3.1测试装配后的对象 b.3.2综合测试事务处理对象 b.3.3测试数据库 b.3.4使用gienahtesting在junit4中进行测试 b.4小结

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

    5.3.3 使用Spring对JDBC的DAO支持类 5.4 在Spring里集成Hibernate 5.4.1 选择Hibernate的版本 5.4.2 使用Hibernate模板 5.4.3 建立基于Hibernate的DAO 5.4.4 使用Hibernate 3上下文会话 5.5 Spring和Java...

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

    5.3.3 使用Spring对JDBC的DAO支持类 5.4 在Spring里集成Hibernate 5.4.1 选择Hibernate的版本 5.4.2 使用Hibernate模板 5.4.3 建立基于Hibernate的DAO 5.4.4 使用Hibernate 3上下文会话 5.5 Spring和Java...

    精通Spring (书签版)

    专业人士,权威经典。  Spring 2.5是迄今为止完美的... 全书理论与实践并重,通过大量的实例帮助读者尽快掌握Spring2,5的各种基本和高级使用技巧,从而提高本书的参考和阅读价值 请大家查阅我的资源,共分为三部分。

    struts2.1.6+spring2.0+hibernate3.2常用配置包

    spring-jdbc.jar //3 spring-web-2.5.6.jar //1 struts2-core-2.1.6.jar //2 struts2-convention-plugin-2.1.6.jar //2* struts2-spring-plugin-2.1.6.jar //1 xwork-2.1.2.jar //2 xerces-2.6.2.jar //3 xml-apis....

    精通Spring(书签版)

    专业人士,权威经典。  Spring 2.5是迄今为止完美的Java EE架构级框架,全面深入、多维度... 全书理论与实践并重,通过大量的实例帮助读者尽快掌握Spring2,5的各种基本和高级使用技巧,从而提高本书的参考和阅读价值

    Spring MVC、Spring framework 一整套实验室预约系统.zip

    项目使用了Spring MVC、Spring framework、Hibernate和Spring JDBC、Bootstrap、ECharts等技术. 毕业设计是高等教育阶段学生在完成学业前所进行的一项重要学术任务,旨在检验学生通过学习所获得的知识、技能以及对...

    Spring 3.x的事务处理机制的研究比较

    Spring提供了多样化的事务编程支持,包括编程式事务和声明式事务。针对JDBC的事务处理对各类实现方式进行了介绍,并对实现效率进行了比较。当事务处理量少时,可以考虑用基于JDBC模板的编程式事务,当事务涉及量大时...

    基于Spring Cloud(Finchley版本)架构体系

    微服务架构: Spring Cloud全家桶 + Spring boot 2.x + Oauth2 + Mybatis + Druid + Mysql + Sharding-JDBC 3.x + Redis Sentinel + Spring-Session; 全方位监控:Spring Boot Admin 2.x + Turbine + Hystrix ...

    基于Spring Boot的人职匹配推荐系统的设计与实现-开题报告

    完成基本的增、删、改、查功能,使用java script 脚本完成网站功能,使用JDBC实现前台网站与后台数据库的链接,最后对整个系统进行调试,完成课题所需功能。实现功能包括: 管理员:用户管理、人才信息管理、用人...

    方立勋jDBC ppt文档

    对J2EE有深入理解,尤其是对 Java安全和以Java语言为基础的各种框架有深入研究,包括Struts、Spring、Hibernate 、iBATIS 、AppFuse、AJAX等,有5年J2EE项目经验,具备很强的项目管理能力和丰富的项目实施经验。...

    论文研究-基于Spring简化数据库操作的研究及应用 .pdf

    基于Spring简化数据库操作的研究及应用,李涛,徐宁,随着Internet的发展,基于B/S架构开发的J2EE项目需要频繁的进行数据库操作。然而java提供的JDBC API过于复杂,代码过于冗余。本文主要是针

    spring-framework-2.5.5和中文手册

    介绍了Spring2.5和拥有的新特性;主要讲述了核心技术:IOC、资源,校验、面向切面和测试用例;中间成数据访问:事务管理、DAO支出、JDBC进行数据访问和使用ORM工具进行数据访问;Web MVC 框架

    activiti 基础 web项目 spring mvc

    4.程序中使用的是spring mvc注解的方式,可扩展的地方也很多,我是从网上下的maven项目,然后自己改成web项目,除了整个架子外,其他的都是我自己的东西 5.目前能实现的功能就是走一个流程,适合初学者研究 我深知...

    jsets-shiro-spring-boot-starter:SpringBoot Starter for Shiro (springboot shiro 权限管理插件)

    jsets-shiro-spring-boot-starter项目说明springboot中使用shiro大都是通过shiro-spring.jar进行的整合的,虽然不是太复杂,但是也无法做到spring-boot-starter风格的开箱即用。项目中经常用到的功能比如:验证码、...

    SSH框架示例(可以直接用)

    ****比较适合新手理解SSH框架***** 闲下来搭了个SSH框架,写些... spring负责使用JDBC操作数据库。都写了一个小例子。 搭这个框架的初衷主要是想自己配置一下spring整合proxool以及aop思想对service层的事物控制等。

Global site tag (gtag.js) - Google Analytics