不同spring版本合成的方式,有时候不一样,需要查看帮助文档来看如何集成,帮助文档在spring发行包中。

1.导入spring的包(这里吧Spring-3.1.3 Release的所有jar包都导入了)和导入MySQL的依赖包mysql-connector-java-5.1.17-bin.jar

2.选择一个数据源(JDBC自己的数据源管理器,DBCP和C3p0),我们一般用DBCP

<bean id="dataSource" class="org.springframework.jdbc.DriverManagerDataSource">

下面我们讲解使用DBCP:

3.导入数据源(DBCP方式)的包commons-dbcp.jar和commons-pools.jar

4.在beans.xml中创建dataSource数据源

  dataSource中各项配置解释:http://www.cnblogs.com/snake-hand/p/3144811.html

    <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/spring_teach" />
<property name="username" value="root" />
<property name="password" value="rootadmin" />
</bean>

注意:在上面的代码中,我们直接将连接数据库所需要的用户名、密码、驱动类、连接字符串等信息直接在配置文件中给出了。我们其实也可以将这些信息写在一个

properties文件中,命名为jdbc.properties(邮件src,选择File),我们在文件中写下如下内容,驱动类的名字,可以在导入的MySQL依赖jar包中找到

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_teach
jdbc.username=root
jdbc.password=rootadmin

并且在beans.xml中稍作修改即可

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<!-- 此处还可以配置其他信息,比如连接池的初始值、连接池最大值等等 -->
</bean>
<!-- beans.xml中导入相应的properties文件,这句话不能缺 -->
<context:property-placeholder location="classpath:jdbc.properties"/>

前面提到了DataSource有三种,我们可以在帮助文档中找到每种数据源的配置方法(帮助文档374页),代码如下。

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<context:property-placeholder location="jdbc.properties"/> DBCP configuration: <bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<context:property-placeholder location="jdbc.properties"/> C3P0 configuration: <bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driverClassName}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<context:property-placeholder location="jdbc.properties"/>

7.在MySQL数据库中建立user表(int id,String username,String password,String nickname),和创建User对象

package org.zttc.itat.model;

import org.springframework.stereotype.Component;

@Component
public class User {
private int id;
private String username;
private String password;
private String nickname; public User() {
super();
}
public User(int id, String username, String password, String nickname) {
super();
this.id = id;
this.username = username;
this.password = password;
this.nickname = nickname;
} public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
} }

8 .写相应的dao,并且为这个dao创建一个JDBCTemplate对象,通过JdbcTemplate对象可以方便的完成对数据库的操作

9.为dao注入相应的dataSource,并创建JdbcTemplate

第八步和第九步代码:

10.完成数据对象的添加、删除、更新、查找操作。

11.创建JUnit测试代码如下(21分钟):

不用JUnit测试代码如下:

package org.zttc.itat.test;

import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.zttc.itat.jdbcdao.UserJdbcDao;
import org.zttc.itat.model.User; public class test { public static void main(String[] args) {
// TODO Auto-generated method stub
BeanFactory ctx = new ClassPathXmlApplicationContext("beans.xml");
UserJdbcDao dao = (UserJdbcDao) ctx.getBean("userJdbcDao");
User u=new User(6,"ss","232","fff");
dao.add(u);
BasicDataSource bs;
} }

报错:

  1.如果没有加common-logging.jar,会报如下错误

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    at org.springframework.context.support.AbstractApplicationContext.<init>(AbstractApplicationContext.java:164)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.<init>(AbstractRefreshableApplicationContext.java:90)
    at org.springframework.context.support.AbstractRefreshableConfigApplicationContext.<init>(AbstractRefreshableConfigApplicationContext.java:59)
    at org.springframework.context.support.AbstractXmlApplicationContext.<init>(AbstractXmlApplicationContext.java:61)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:136)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at org.zttc.itat.test.test.main(test.java:12)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 7 more

在这个例子中,我们发现在UserJdbcDao中,setDataSource(DataSource dataSource),需要接收的参数类型是javax.sql.DataSource,
而我们在beans.xml中配置的是org.apache.commons.dbcp.BasicDataSource(来自DBCP依赖包),也就是说我们传入的参数类型是org.apache.commons.dbcp.BasicDataSource, 所以我们可以得出结论:org.apache.commons.dbcp.BasicDataSource
继承自javax.sql.DataSource,如果javax.sql.DataSource一个接口,那么BasicDataSource就是它的一个实现类。我们从Java的源码中做了
验证,javax.sql.DataSource就是一个接口,并且他只定义了两个方法
Connection getConnection(),
Connection getConnection(String username, String password)。
这里我们就会有点明朗了,org.apache.commons.dbcp.BasicDataSource是DBCP依赖包中的类,需要额外导入jar包才能使用,而javax.sql.DataSource是java源码中的一个接口,
二者是接口与实现类的关系,我们就可以知道了javax.sql.DataSource是java的API暴露给外部的一个接口,由该接口中定义的方法可知,该接口的实现类需要完成创建和数据库的连接工作,并返回
一个Connection,我们在javax.sql.DataSource中,可以继续查看Conncetion是什么,发现他也是javaAPI的一个接口,里面定义了许多的方法,我们查看Conncetion的继承树,
发现DBCP的依赖包中有Conncetion的实现类。BasicDataSource创建了数据库的连接,并且返回了一个Connection的实现类,然后用Connection的实现类中的方法,执行sql语句。
具体是怎么实现的,我们就不往深入的探究了。

这样我们就明白了,DBCP依赖包中的BasicDataSource就是javax.sql.DataSource的实现类中的一个,DBCP依赖中其他的东西,应该是辅助各种DataSource实现类创建数据库连接的,也就是刚才说的那两个方法。

回过头来,我们再看JdbcTemplate,他是Spring框架中的一个类org.springframework.jdbc.core.JdbcTemplate,既然在他的构造函数new JdbcTemplate(dataSource)中,接收了
DataSource类,那么它就一定会调用getConnection()方法,我们例子中传入的是BasicDataSource,所以实际上就是调用BasicDataSource的getConnection()方法。我们导入spring
的源码,来看看是不是这样。在JdbcTemplate源码中有多处调用了DataSourceUtils.getConnection(getDataSource())方法,而在该方法中,则调用了同一个类中的doGetConnection()方法,继而调用了dataSource.getConnection()
从而验证,我们的想法是正确的。

在spring的配置文件中,如何配置dataSource:http://hackpro.iteye.com/blog/1037376,该网址中的方法,有重复。

Spring集成JDBC的更多相关文章

  1. spring集成常用技术的配置

    使用spring集成其他技术,最基本的配置都是模板化的,比如配置视图模板引擎.数据库连接池.orm框架.缓存服务.邮件服务.rpc调用等,以spring的xml配置为例,我将这些配置过程整理出来,并不 ...

  2. 完整的定时任务解决方案Spring集成+定时任务本身管理+DB持久化+集群

    完整的定时任务解决方案Spring集成+定时任务本身管理+DB持久化+集群 maven依赖 <dependency> <groupId>org.quartz-scheduler ...

  3. Spring 集成 Hibernate 和 Struts 2

    在Spring中集成Hibernate,实际上就是将Hibernate中用到的数据源DataSource. SessionFactory实例(通常使用Hibernate访问数据库时,应用程序会先创建S ...

  4. Spring实战6:利用Spring和JDBC访问数据库

    主要内容 定义Spring的数据访问支持 配置数据库资源 使用Spring提供的JDBC模板 写在前面:经过上一篇文章的学习,我们掌握了如何写web应用的控制器层,不过由于只定义了SpitterRep ...

  5. Quartz与Spring集成

    关于Quartz的基本知识,这里就不再多说,可以参考Quartz的example. 这里主要要说的是,个人在Quartz和Spring集成的过程中,遇到的问题和个人理解. 首先来说说个人的理解: 1. ...

  6. activiti搭建(二)与Spring集成

    转载请注明源地址:http://www.cnblogs.com/lighten/p/5876773.html 本文主要讲解如何将Activiti和Spring框架集成,再过一段时间将会将一个基础的de ...

  7. Java Persistence with MyBatis 3(中国版) 第五章 与Spring集成

    MyBatis-Spring它是MyBatis子模块框.它用来提供流行的依赖注入框架Spring无缝集成. Spring框架是一个基于依赖注入(Dependency Injection)和面向切面编程 ...

  8. Spring集成MyBatis框架

    Java在写数据库查询时,我接触过四种方式: 1.纯Java代码,引用对应的数据库驱动包,自己写连接与释放逻辑(可以用连接池) 这种模式实际上性能是非常不错的,但是使用起来并不是非常方便:一是要手工为 ...

  9. SSM框架开发web项目系列(五) Spring集成MyBatis

    前言 在前面的MyBatis部分内容中,我们已经可以独立的基于MyBatis构建一个数据库访问层应用,但是在实际的项目开发中,我们的程序不会这么简单,层次也更加复杂,除了这里说到的持久层,还有业务逻辑 ...

随机推荐

  1. oracle无参数和带参数的存储过程实例

    SQL中调用存储过程语句:call procedure_name(); 注:调用时”()”是不可少的,无论是有参数还是无参数. 定义对数据库存储过程的调用时1.无参数存储过程:{call proced ...

  2. Nginx报 No input file specified. 的问题解决之路 转

    https://m.aliyun.com/yunqi/articles/34240 今天接手公司的一个项目,照例将项目clone下来,配置本地host,nginx,然后访问. 怎么回事?迅速在php的 ...

  3. 换肤功能的实现以及监听storage实现多个标签页一起换肤

    1:需求:项目的侧边栏实现换肤功能,核心代码: updateSkin (val) { const existSkinLink = document.head.querySelector('link[i ...

  4. (转)Java字符串整形(例:0001)

    原文地址:https://blog.csdn.net/xuexiiphone/article/details/51372692 caseID = preFix + String.format(&quo ...

  5. tomcat Enabling JMX Remote

    wiki 利用JMX做存活监控 cat /opt/wiki/work/bin/setenv.sh | grep jmxremoteCATALINA_OPTS="-Dcom.sun.manag ...

  6. Linux System Programming 学习笔记(七) 线程

    1. Threading is the creation and management of multiple units of execution within a single process 二 ...

  7. angular中关于文件引入

    var angular = require('angular'); module.exports = angular.module('app.mymodule2', []).controller('H ...

  8. 【Visual Studio】error: /ZI”和“/Gy-”命令行选项不兼容(转)

    原文转自 http://bbs.100home.net/view/4206.html [问题说明]vc6项目用vs2015打开时遇到的错误 [解决方法]项目属性->c/c++->常规-&g ...

  9. Python struct 详解

    最近在学习python网络编程这一块,在写简单的socket通信代码时,遇到了struct这个模块的使用,当时不太清楚这到底有和作用,后来查阅了相关资料大概了解了,在这里做一下简单的总结. 了解c语言 ...

  10. ajax 将整个表单提交到后台处理

    $(document).on('click', '.user-save-btn', function () { $.ajax({ url: 'index', type: 'post', dataTyp ...