一、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="url" value="jdbc:mysql://localhost:3306/hibernate0909" />
       <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="url" value="jdbc:mysql://localhost:3306/hibernate0909" />
       <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使用(三)的更多相关文章

  1. Spring AOP面向切面编程详解

    前言 AOP即面向切面编程,是一种编程思想,OOP的延续.在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等等.在阅读本文前希望您已经对Spring有一定的了解 注:在能对代码进行添 ...

  2. ORACLE PL/SQL编程详解

    ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...

  3. Spring Boot的启动器Starter详解

    Spring Boot的启动器Starter详解 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs Spring Boot ...

  4. Spring Boot 之使用 Json 详解

    Spring Boot 之使用 Json 详解 简介 Spring Boot 支持的 Json 库 Spring Web 中的序列化.反序列化 指定类的 Json 序列化.反序列化 @JsonTest ...

  5. 【Qt】Qt Quick 之 QML 与 C++ 混合编程详解

    Qt Quick 之 QML 与 C++ 混合编程详解 - CSDN博客   专栏:Qt Quick简明教程 - CSDN博客   .

  6. Spring 入门 web.xml配置详解

    Spring 入门 web.xml配置详解 https://www.cnblogs.com/cczz_11/p/4363314.html https://blog.csdn.net/hellolove ...

  7. Spring学习 6- Spring MVC (Spring MVC原理及配置详解)

    百度的面试官问:Web容器,Servlet容器,SpringMVC容器的区别: 我还写了个文章,说明web容器与servlet容器的联系,参考:servlet单实例多线程模式 这个文章有web容器与s ...

  8. 《挑战30天C++入门极限》入门教程:实例详解C++友元

        入门教程:实例详解C++友元 在说明什么是友元之前,我们先说明一下为什么需要友元与友元的缺点: 通常对于普通函数来说,要访问类的保护成员是不可能的,如果想这么做那么必须把类的成员都生命成为pu ...

  9. Qt零基础教程(四) QWidget详解篇

    在博客园里面转载我自己写的关于Qt的基础教程,没次写一篇我会在这里更新一下目录: Qt零基础教程(四) QWidget详解(1):创建一个窗口 Qt零基础教程(四) QWidget详解(2):QWid ...

随机推荐

  1. JPA 系列教程5-双向一对多

    双向一对多的ddl语句 同单向多对一,单向一对多表的ddl语句一致 Product package com.jege.jpa.one2many; import javax.persistence.En ...

  2. HTML5新特性总览

    html5的革新带来了更多的功能,简单的一个标签遍可以做到很多事情,例如 (1)canvas画图,vedio视屏,geolocation等等新标签. 如何检查浏览器是否支持这些新特性? 这样就足够,改 ...

  3. ==和equals的异同

    == 和 Equals 的区别 1. == 是一个运算符. 2.Equals则是string对象的方法,可以.(点)出来. 我们比较无非就是这两种 1.基本数据类型比较 2.引用对象比较 1.基本数据 ...

  4. LightOJ 1341 Aladdin and the Flying Carpet(整数拆分定理)

    分析:题目并不难理解,就是一些细节上的优化需要我们注意,我在没有优化前跑了2000多MS,优化了一些细节后就是400多MS了,之前还TLE了好几次. 方法:将整数拆分为质因子以后,表达为这样的形式,e ...

  5. JS 的NULL undefined 空

    null,对象不存在 var ii= document.getElementById("id"); alert(ii); 当前页面不存在id对象 undefined var i; ...

  6. linux 命令实现原理

    我们知道有些Linux的命令涉及到一些高效率的算法,在此做出一个积累吧,不是系统的. 1.tail命令打印一个文件的最后num行 2.grep命令从文本中匹配字符串 基于正则表达式的匹配很快. it ...

  7. 关于mysql 删除数据后物理空间未释放(转载)

    转自 关于mysql 删除数据后物理空间未释放(转载) - NETDATA - 博客园http://www.cnblogs.com/shawnloong/archive/2013/02/07/2908 ...

  8. 转 Android开发者指南-Manifest.xml-<supports-screens

    <supports-screens> 版本:Android 3.2 语法: <supports-screensandroid:resizeable=["true" ...

  9. sql语句删除由于无主键导致完全重复的数据方法

    sql语句删除由于无主键导致完全重复的数据方法 select distinct * into #Tmp from t_column drop table t_column select * into ...

  10. Ubuntu系统如何修改主机名

    1.执行命令 hostname temp_name 这样主机名就改掉了.只不过重启后名字会恢复不一定使我们想要的.机器重启后会重新去读取/etc/hostname里面存储的主机名.所以如果想永久改掉的 ...