【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操作数据库来说,省略了创建连接以及释放的过程。

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

时间: 2024-08-30 03:31:32

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

(一)《Spring实战》——Spring核心

<Spring实战>(第4版) 第一章:Spring之旅 1. 简化Java开发 为了降低Java开发的复杂性,Spring采取了以下4种关键策略: 基于POJO的轻量级和最小侵入性编程: 通过依赖注入和面向接口实现松耦合: 基于切面和惯例进行声明式编程: 通过切面和模板减少样板式代码. 1.1 激发POJO的潜能 在基于Spring构建的应用中,它的类通常没有任何痕迹表明你使用了Spring.最坏的场景是,一个类或许会使用Spring注解,但它依旧是POJO. Spring赋予POJO魔力的

Spring实战-Spring in Action, 4th Edition-2015年第4版本

In Action系列中最畅销的Spring图书,近十万读者学习Spring的共同选择!In Action系列中最畅销的Spring图书,有近10万读者选择本书来学习Spring! Spring框架已经成为Java开发人员的必备知识,而且Spring 3引入了强大的新特性,例如SpEL.Spring表达式语言.IoC容器的新注解以及用户急需的对REST的支持.无论你是刚刚接触Spring还是被Spring 3.0的新特性所吸引,本书都是掌握Spring的最佳选择. 下载地址: Spring in

(二)《Spring实战》——Spring核心

第二章:装配Bean 在Spring中,对象无需自己查找或创建与其所关联的其他对象.相反,容器负责把需要相互协作的对象引用赋予各个对象.例如,一个订单管理组件需要信用卡认证组件,但它不需要自己创建信用卡认证组件.订单管理组件只需要表明自己两手空空,容器就会主动赋予它一个信用卡认证组件. 创建应用对象之间协作关系的行为通常称为装配(wiring),这也是依赖注入(DI)的本质. 1. Spring配置的可选方案 Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系.但是,

Spring入门(三)— AOP注解、jdbc模板、事务

一.AOP注解开发 导入jar包 aop联盟包. aspectJ实现包 . spring-aop-xxx.jar . spring-aspect-xxx.jar 导入约束 aop约束 托管扩展类和被扩展类 <!-- 要做AOP, 一定要托管扩展类和被扩展类 --> <bean id="us" class="com.pri.service.impl.UserServiceImpl"></bean> <bean id="

Spring(二):AOP(面向切面编程),Spring的JDBC模板类

1 AOP概述 1.2 什么是AOP 在软件业,AOP为Aspect Oriented Programmig的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率. AOP解决了OOP遇到一些问题,采取横向抽取机制,取代了传统

Spring JDBC模板惯用方式

Spring JDBC模板惯用方式          @Resource     private NamedParameterJdbcTemplate jdbcTemplate;     @Resource     private JdbcTemplate jdbcTemplateSimple; 1.插入并获取自增主键 KeyHolder keyHolder = new GeneratedKeyHolder();         jdbcTemplateSimple.update(new Pre

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

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

Spring的JDBC模板

Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架.它针对JavaEE三层中的每一层都提供了不同的解决技术,在dao层,Spring提供了JDBC模板的技术,可对数据库进行CRUD操作.Spring提供了很多持久层技术的模板类简化了编程,如下图: Spring框架对不同的持久层技术做了封装,如对传统的JDBC使用JdbcTemplate进行了封装,对Hibernate框架使用HibernateTemplate进行了封装.JdbcTemplate对JDBC进行了

[Spring实战系列](15)使用Spring基于Java的配置

并不是所有的开发人员都喜欢使用XML,所以Spring3.0 为这些人准备了一些特别的东西.可以几乎不使用XML而使用纯粹的Java代码来配置Spring应用.并且基于Java的配置拥有一些XML配置所不具有的技巧. 1. 创建基于Java的配置 即使Spring的Java配置可以让我们不使用XML就可以编写大多数的Spring配置,但是我们仍然需要极少量的XML来启用Java配置. <?xml version="1.0" encoding="UTF-8"?&

硬核推荐15个最火的Spring实战开源项目!总有一款适合你!

哔哩哔哩在线演示视频: https://www.bilibili.com/video/av92191212 Guide哥注:下面这些推荐的项目几乎都和 Spring Boot 有关,毕竟这年头没有理由再搞 SSM/SSH 这些东西了. 商城系统 Guide哥注:下面的商城系统大多比较复杂比如 mall ,如果没有 Java 基础和 Spring Boot 都还没有摸熟的话不推荐过度研究下面几个项目或者使用这些项目当作毕业设计. mall :mall 项目是一套电商系统,包括前台商城系统及后台管理