Spring自学教程-jabc编程详解、RowMapper使用(三)
一、JDBC
1、JDBC的编程特点
静态代码+动态变量 = jdbc编程。在spring中动态变量可以用注入的形式给予。这样的编程方式适合包装成模板。静态代码构成了模板,而动态变量则是需要传入的参数。
2、Spring引入JDBC
配置文件中配置数据库的连接
1
2
3
4
5
6
7
8
9
|
<!-- 配置dbcp的数据库连接池 --> < bean id = "dataSource" class = "org.apache.commons.dbcp.BasicDataSource" > < property name = "driverClassName" value = "com.mysql.jdbc.Driver" /> < property name = "username" value = "root" /> < property name = "password" value = "root" /> </ bean > |
配置好后,我们就可以在客户端进行连接了,下面说些JdbcTemplate的事情。
首先我们看下JdbcTemplate类,我们找到第一个划红圈的地方,就是我们在spring中配置的DataSource注入到JdbcTemplate中,我们就可以使用JdbcTemplate模板了。
JdbcTemplate把所有的对数据库的操作都封装在了一起,第二个红圈就是我们想要的结果,这样省去了我们自己写的函数了,很像是别人写的类我们直接拿来用一样。。。。
那我们怎样把DataSource传递给JdbcTemplate呢?
下面我们看看这些相关的类是怎样调用的,也就是怎样依赖注入的
这样我们就可以看出来他们的关系了,那我们就可以很直接的在客户端将DataSource注入到JdbcTemplate中了
下面介绍三种方案来进行注入。。。
(1)客户端通过继承JdbcDaoSupport来进行注入
在JdbcDaoTemplate中有个setDataSource的set方法我们就可以注入datasource
然后调用createJdbcTemplate
之后在调用JdbcTemplate
这样才真正的传入datasource了,相关的配置文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<!-- 配置dbcp的数据库连接池 --> < bean id = "dataSource" class = "org.apache.commons.dbcp.BasicDataSource" > < property name = "driverClassName" value = "com.mysql.jdbc.Driver" /> < property name = "username" value = "root" /> < property name = "password" value = "root" /> </ bean > < bean id = "personDao" class = "cn.itcast.spring0909.jdbc.PersonDaoImpl" > < property name = "dataSource" > < ref bean = "dataSource" /> </ property > </ bean > |
(2)直接引入JdbcTemplate就行了
相关的配置文件如下:
1
2
3
4
5
6
7
8
9
10
11
|
< bean id = "jdbcTemplate" class = "org.springframework.jdbc.core.JdbcTemplate" > < property name = "dataSource" > < ref bean = "dataSource" /> </ property > </ bean > < bean id = "personDao2" class = "cn.itcast.spring0909.jdbc.PersonDaoImpl2" > < property name = "jdbcTemplate" > < ref bean = "jdbcTemplate" /> </ property > </ bean > |
(3)直接继承JdbcTemplate,通过构造函数向他的父类中传入datasource
相关的配置文件如下:
1
2
3
|
< bean id = "personDao3" class = "cn.itcast.spring0909.jdbc.PersonDaoImpl2" > < constructor-arg index = "0" ref = "dataSource" ></ constructor-arg > </ bean > |
二、RowMapper的使用
可以通过建立内部类实现RowMapper接口,RowMapper中有一个mapRow方法,所以实现RowMapper接口一定要实现mapRow方法,而对自定义类的包装就在mapRow方法中实现.
下面说下他的原理是什么样的。。。就像我们自己写的RowMapper接口一样,只是spring中已经封装好了此类。
Spring自学教程-jabc编程详解、RowMapper使用(三)的更多相关文章
- Spring AOP面向切面编程详解
前言 AOP即面向切面编程,是一种编程思想,OOP的延续.在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等等.在阅读本文前希望您已经对Spring有一定的了解 注:在能对代码进行添 ...
- ORACLE PL/SQL编程详解
ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...
- Spring Boot的启动器Starter详解
Spring Boot的启动器Starter详解 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs Spring Boot ...
- Spring Boot 之使用 Json 详解
Spring Boot 之使用 Json 详解 简介 Spring Boot 支持的 Json 库 Spring Web 中的序列化.反序列化 指定类的 Json 序列化.反序列化 @JsonTest ...
- 【Qt】Qt Quick 之 QML 与 C++ 混合编程详解
Qt Quick 之 QML 与 C++ 混合编程详解 - CSDN博客 专栏:Qt Quick简明教程 - CSDN博客 .
- Spring 入门 web.xml配置详解
Spring 入门 web.xml配置详解 https://www.cnblogs.com/cczz_11/p/4363314.html https://blog.csdn.net/hellolove ...
- Spring学习 6- Spring MVC (Spring MVC原理及配置详解)
百度的面试官问:Web容器,Servlet容器,SpringMVC容器的区别: 我还写了个文章,说明web容器与servlet容器的联系,参考:servlet单实例多线程模式 这个文章有web容器与s ...
- 《挑战30天C++入门极限》入门教程:实例详解C++友元
入门教程:实例详解C++友元 在说明什么是友元之前,我们先说明一下为什么需要友元与友元的缺点: 通常对于普通函数来说,要访问类的保护成员是不可能的,如果想这么做那么必须把类的成员都生命成为pu ...
- Qt零基础教程(四) QWidget详解篇
在博客园里面转载我自己写的关于Qt的基础教程,没次写一篇我会在这里更新一下目录: Qt零基础教程(四) QWidget详解(1):创建一个窗口 Qt零基础教程(四) QWidget详解(2):QWid ...
随机推荐
- 【单源最短路模板】 poj 2387
#include <cstdio> #include <iostream> #include <stdlib.h> #include <memory.h> ...
- layer弹出层
最近因为项目要求做了一个layer弹出层demo,先看效果图 好了,现在开始上代码 index.jsp <%@ page language="java" import=&qu ...
- Animals and Puzzle
Animals and Puzzle time limit per test 5 seconds memory limit per test 512 megabytes input standard ...
- C++矩阵处理库--Eigen初步使用
项目要进行比较多的矩阵操作,特别是二维矩阵.刚开始做实验时,使用了动态二维数组,于是写了一堆Matrix函数,作矩阵的乘除加减求逆求行列式.实验做完了,开始做代码优化,发现Matrix.h文件里适 ...
- OpenGL ES 详解纹理生成和纹理映射步骤以及函数
通常一个纹理映射的步骤是: 创建纹理对象.就是获得一个新的纹理句柄 ID. 指定纹理.就是将数据赋值给 ID 的纹理对象,在这一步,图像数据正式加载到了 ID 的纹理对象中. 设定过滤器.定义了ope ...
- 动态链接库dll,导入库lib,静态链接库lib
目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库” ...
- CRT堆
实验环境:win764位旗舰版.VS2010旗舰版 每个进程都有一个默认堆,在进程初始化的时候会创建这个默认堆,可以通过GetProcessHeap()获取默认堆的句柄.使用CRT时,也会有一个CRT ...
- Intent之间无法传递大数据的替代方法
/** * TODO: Activity之间传递list,对象等工具类 * * @author * @date 2014-9-12 下午5:35:38 * @version 0.1.0 */ publ ...
- PAT (Advanced Level) 1110. Complete Binary Tree (25)
判断一棵二叉树是否完全二叉树. #include<cstdio> #include<cstring> #include<cmath> #include<vec ...
- 【啊哈!算法】算法6:只有五行的Floyd最短路算法
暑假,小哼准备去一些城市旅游.有些城市之间有公路,有些城市之间则没有,如下图.为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程. 上图中有 ...