【Spring实战】—— 15 Spring JDBC模板使用

  前一篇通过对传统的JDBC的使用操作,可以体会到使用的繁琐与复杂,套句话说,是用了20%作了真正的工作,80%作了重复的工作。

那么通过本篇,可以了解如下的内容:

1 如何配置数据源

2 如何在spring中使用模板

3 如何建立数据源的统一的基类

  首先看一下如何配置数据源

  我们可以使用3种方式配置数据源:

  1 JNDI配置数据源

  这种做法我是没用过,感觉每次都要去修改配置Tomcat之类的web容器,很是麻烦。

  2 使用DBCP数据源连接池

  一般情况下都是采用这种方式,对于连接池的实现,也有很多种,比如DBCP,c3p0等等。

  用户可以针对连接池进行自己的配置,有助于数据库端的调优。

  如果想对数据源连接池多谢了解,可以猛戳该链接

  相对来说,最常使用的就是dbcp和c3p0了。

  3 基于JDBC的驱动的数据源

  这种是最基本的通过驱动程序管理数据源,但是没有连接池的概念。

  有两种实现方式:

  DriverManagerDataSource:一般都是使用这种,这种方式每次请求都会返回一个新的连接。

  SingleConnectionDataSource:这种每次都是使用的一个连接。

  本篇为了简单方便,就直接使用的第三种。

  Spring中的模板以及提供的基类

  在Spring中为我们提供了三种模板:

  1 JdbcTemplate

  提供最简单的数据访问等功能。

  2 NamedParameterJdbcTemplate

  通过该模板,可以把参数作为查询的条件传入方法中。

  3 SimpleJdbcTemplate(一般都是使用这种)

  结合了一些自动装箱等功能,3.0以后,整合了NamedParameterJdbcTemplate。

  为了避免每次都要把jdbctemplate的bean注入到我们的DAO里面,Spring为我们实现了三种对应的基类,我们的DAO实现类需要继承这些基类,就可以直接使用模板了。

  对应的分别是:JdbcDapSupport、SimpleJdbcDaoSupport、NamedParameterJdbcDaoSupport

  最后就是程序的使用介绍了

  首先看一下配置数据源的bean.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                         http://www.springframework.org/schema/context
                         http://www.springframework.org/schema/context/spring-context-3.0.xsd
                         http://www.springframework.org/schema/tx
                         http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
                         http://www.springframework.org/schema/aop
                         http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test"/>
        <property name="username" value="root"/>
        <property name="password" value="123qwe"/>
    </bean>

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">
        <constructor-arg ref="dataSource"/>
    </bean>

    <bean id="newjdbcdao" class="com.spring.chap5.dao.NewJdbcImpl" >
        <property name="jdbcTemplate" ref="jdbcTemplate" />
    </bean>
</beans>

  这里,我们配置了dataSource,以及jdbcTemplate,最后把jdbcTemplate注入到dao的实现类里面。

  接下来的DAO的接口:

public interface NewJdbc {
    public void insertPerson(String id,String name,int age);
    public void findPersonById(String id);
}

  DAO的实现类:

public class NewJdbcImpl implements NewJdbc{
    private SimpleJdbcTemplate jdbcTemplate;

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

    public void insertPerson(String id,String name,int age){
        jdbcTemplate.update("insert into persons (id,name,age) values (?,?,?)", id,name,age);
    }

    public void findPersonById(String id){
        Person person = jdbcTemplate.queryForObject("select * from persons where id = ?",
                new ParameterizedSingleColumnRowMapper<Person>(){
                    public Person mapRow(ResultSet rs,int rowNum) throws SQLException{
                        Person p = new Person();
                        p.setId(rs.getString(1));
                        p.setName(rs.getString(2));
                        p.setAge(rs.getInt(3));
                        return p;
                    }
                }
                , id);
        System.out.println("id:"+person.getId()+" name:"+person.getName()+" age:"+person.getAge());
    }
}

  最后是测试使用的类

public class test {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
        NewJdbc newjdbc = (NewJdbc)ctx.getBean("newjdbcdao");
        newjdbc.insertPerson("003", "xingoo3", 25);
        newjdbc.findPersonById("003");
    }
}

  以上便是Spring基于JDBC的模板使用了。

  可以看到,相对于前面的传统的JDBC操作数据库来说,省略了创建连接以及释放的过程。

  仅仅是把操作的真正的实现部分交给开发人员,这就是模板的设计模式的应用——分离模板与开发人员的实现。

本文转自博客园xingoo的博客,原文链接:【Spring实战】—— 15 Spring JDBC模板使用,如需转载请自行联系原博主。

时间: 2024-09-09 14:06:55

【Spring实战】—— 15 Spring JDBC模板使用的相关文章

Spring实战6-利用Spring和JDBC访问数据库

主要内容 定义Spring的数据访问支持 配置数据库资源 使用Spring提供的JDBC模板 写在前面:经过上一篇文章的学习,我们掌握了如何写web应用的控制器层,不过由于只定义了SpitterRepository和SpittleRepository接口,在本地启动该web服务的时候会遇到控制器无法注入对应的bean的错误,因此我决定跳过6~9章,先搞定数据库访问者一章. 在企业级应用开发中不可避免得会涉及到数据持久化层,在数据持久化层的开发过程中,可能遇到很多陷阱.你需要初始化数据库访问框架.

【Spring实战】—— 16 基于JDBC持久化的事务管理

前面讲解了基于JDBC驱动的Spring的持久化管理,本篇开始则着重介绍下与事务相关的操作. 通过本文你可以了解到: 1 Spring 事务管理的机制 2 基于JDBC持久化的事务管理 Spring的事务管理的机制 Spring本身并不提供事务管理,它只是把事务管理提交给事务管理器,而事务管理器则有多种实现,常见的就是基于JDBC的.Hibernate的.JPA以及JTA的. 操作流程可以参考下面的图片: 其实还有好多种类的事务管理器,这里就不一一列举了. 基于JDBC持久化的事务管理 基于JD

【Spring实战】—— 14 传统的JDBC实现的DAO插入和读取

从这篇开始学习Spring的JDBC,为了了解Spring对于JDBC的作用,先通过JDBC传统的流程,实现一个数据库的插入和读取. 从这篇你可以了解到: 1 传统的JDBC插入和读取的过程. 2 如何通过JDBC连接Mysql 如何通过JDBC连接mysql 首先看一下下面这张图: 应用程序需要通过mysql的驱动程序,才能与数据连接. 驱动程序下载地址:mysql-connector-java-5.1.13-bin.jar 在设计程序的时候,应该采用接口编程的方式,这样能够减小数据操作与应用

《Spring实战(第4版)》——1.3 俯瞰Spring风景线

1.3 俯瞰Spring风景线 正如你所看到的,Spring框架关注于通过DI.AOP和消除样板式代码来简化企业级Java开发.即使这是Spring所能做的全部事情,那Spring也值得一用.但是,Spring实际上的功能超乎你的想象. 在Spring框架的范畴内,你会发现Spring简化Java开发的多种方式.但在Spring框架之外还存在一个构建在核心框架之上的庞大生态圈,它将Spring扩展到不同的领域,例如Web服务.REST.移动开发以及NoSQL. 首先让我们拆开Spring框架的核

《Spring实战(第4版)》——导读

前言 百尺竿头更进一步.十几年前,Spring刚刚进入Java开发领域,其目标是简化企业级Java开发.它使用更为简单和轻量级的模型,该模型基于简单老式的Java对象,以此挑战了当时重量级的开发模型. 现在,已经过去了很多年,Spring也发布了众多的版本,我们可以看到Spring在企业级应用开发领域已经有了巨大的影响力.对于无数的Java项目来说,它就是事实上的标准,并且对于一些规范和它本来想取代的框架,Spring也对其演进产生了影响.毫无疑问,如果Spring不挑战之前版本的企业级Java

Spring实战3:装配bean的进阶知识

主要内容: Environments and profiles Conditional bean declaration 处理自动装配的歧义 bean的作用域 The Spring Expression Language 在装配bean-依赖注入的本质一文中,我们探讨了Spring的三种管理bean的方式:自动装配.基于JavaConfig.基于XML文件.这篇文字将探讨一些Spring中关于bean的管理的高级知识,这些技能你可能不会每天都用,但是非常重要. 3.1 Environments

《Spring实战(第4版)》——第1章 Spring之旅 1.1简化Java开发

第1部分 Spring的核心 Spring可以做很多事情,它为企业级开发提供给了丰富的功能,但是这些功能的底层都依赖于它的两个核心特性,也就是依赖注入(dependency injection,DI)和面向切面编程(aspect-oriented programming,AOP). 作为本书的开始,在第1章"Spring之旅"中,我将快速介绍一下Spring框架,包括Spring DI和AOP的概况,以及它们是如何帮助读者解耦应用组件的. 在第2章"装配Bean"中

Spring实战1:Spring初探

主要内容 Spring的使命--简化Java开发 Spring容器 Spring的整体架构 Spring的新发展 现在的Java程序员赶上了好时候.在将近20年的历史中,Java的发展历经沉浮.尽管有很多为人诟病的产品,例如applets.EJB.Java Data Object(JDO)和数不清的日志框架,Java还是发展为一个庞大且丰富的开发平台,很多企业级应用都是基于JVM平台构建.Spring是JVM开发平台中的一颗明珠. Spring最开始出现的目的是替代企业级开发框架EJB,相比EJ

【Spring实战】—— 1 入门讲解

这个系列是学习spring实战的总结,一方面总结书中所写的精髓,另一方面总结一下自己的感想. 基础部分讲解了spring最为熟知的几个功能:依赖注入/控制反转 和 面向切面编程. 这两个就不再多说了,功能比较简单,也没有制作样例,后面再深入操作下. Spring使用POJO类编写程序,也就是简单的java对象. 这样spring带来的好处: 1 代码轻量级并减小编程的入侵. 2 通过依赖注入和控制反转实现松耦合. 3 基于切面和管理,进行声明式的编程. 4 通过模板,减少重复代码. 在Sprin