[Spring框架]Spring JDBCTmplate基础入门总结.

前言:
前面有讲过 Spring IOC以及AOP的基本使用方法, 这里就再来讲下Spring JDBCTemplate的使用方法.

一, 概述
这里先说一下Spring 整合的一些模板:

从上图中可以看出 Spring为各种支持的持久化技术,都提供了简单操作的模板和回调.

二, 使用JdbcTemplate

2.1 Spring JDBC是Spring提供的持久层技术
简化JDBC API开发,使用上和Apache公司的DBUtils框架非常类似

具体开发使用的jar包结构如图:
    |

2.2, Spring配置连接池
  1, 配置Spring的内置的连接池 

1 <!-- 配置Spring的内置的连接池 -->
2 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
3     <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
4     <property name="url" value="jdbc:mysql:///spring_day02"/>
5     <property name="username" value="root"/>
6     <property name="password" value="123"/>
7 </bean>

  2, 配置DBCP连接池

1 <!-- 配置DBCP连接池 -->
2 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
3     <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
4     <property name="url" value="jdbc:mysql:///spring_day02"/>
5     <property name="username" value="root"/>
6     <property name="password" value="123"/>
7 </bean>

注: 这里如果使用DBCP连接池的话还需要导入Spring 整合DBCP的两个jar包.

  3. C3P0连接池

1 <!-- 配置C3P0连接池 -->
2 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
3     <property name="driverClass" value="com.mysql.jdbc.Driver"/>
4     <property name="jdbcUrl" value="jdbc:mysql:///spring_day02"/>
5     <property name="user" value="root"/>
6     <property name="password" value="123"/>
7 </bean>

  4,引入属性文件: 写jdbc.properties 文件, 然后直接将配置文件注入到Spring中
      jdbc.properties 配置文件:

jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///spring_day02
jdbc.user=root
jdbc.password=123

  在Spring的核心配置中引入属性文件: 两种 方式

1 <!-- 引入方式一:引入属性文件 -->
2 <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
3     <property name="location" value="classpath:jdbc.properties"/>
4 </bean>
5 <!--引入方式二:引入context的约束-->
6 <context:property-placeholder location="classpath:jdbc.properties"/>

三, 开发案例, 使用Spring JDBCTemplate 进行CRUD操作.

Customer.java:

 1 public class Customer {
 2     private Integer cid;
 3     private String cname;
 4     private Integer age;
 5     public Integer getCid() {
 6         return cid;
 7     }
 8     public void setCid(Integer cid) {
 9         this.cid = cid;
10     }
11     public String getCname() {
12         return cname;
13     }
14     public void setCname(String cname) {
15         this.cname = cname;
16     }
17     public Integer getAge() {
18         return age;
19     }
20     public void setAge(Integer age) {
21         this.age = age;
22     }
23     @Override
24     public String toString() {
25         return "Customer [cid=" + cid + ", cname=" + cname + ", age=" + age
26                 + "]";
27     }
28
29 }

CustomerDao.java:

 1 /**
 2  * 完成对Customer的CRUD的操作
 3  *
 4  */
 5 public class CustomerDao extends JdbcDaoSupport {
12
13     public void save(Customer customer) {
14         this.getJdbcTemplate().update("insert into customer values (null,?,?)",
15                 customer.getCname(), customer.getAge());
16     }
17
18     public void update(Customer customer) {
19         this.getJdbcTemplate().update(
20                 "update customer set cname = ?,age = ? where cid = ?",
21                 customer.getCname(), customer.getAge(), customer.getCid());
22     }
23
24     public void delete(Integer cid) {
25         this.getJdbcTemplate()
26                 .update("delete from customer where cid = ?", cid);
27     }
28
29     public Integer findCount() {
30         int count = this.getJdbcTemplate().queryForInt(
31                 "select count(*) from customer");
32         return count;
33     }
34
35     public String findNameById(Integer cid) {
36         String cname = this.getJdbcTemplate().queryForObject(
37                 "select cname from customer where cid = ?", String.class, cid);
38         return cname;
39     }
40
41     public Customer findById(Integer cid) {
42         Customer customer = this.getJdbcTemplate().queryForObject(
43                 "select * from customer where cid = ?",
44                 new BeanPropertyRowMapper<Customer>(Customer.class), cid);
45         return customer;
46     }
47
48     public List<Customer> findAll() {
49         List<Customer> list = this.getJdbcTemplate().query("select * from customer",
50                 new BeanPropertyRowMapper<Customer>(Customer.class));
51         return list;
52     }
53 }

SpringDemo2.java 测试类:

 1 @RunWith(SpringJUnit4ClassRunner.class)
 2 @ContextConfiguration("classpath:applicationContext2.xml")
 3 public class SpringDemo2 {
 4
 5     @Resource(name="customerDao")
 6     private CustomerDao customerDao;
 7
 8     @Test
 9     public void demo1(){
10
11         Customer customer = new Customer();
12         customer.setCname("马大帅");
13         customer.setAge(48);
14
15         customerDao.save(customer);
16     }
17
18     @Test
19     public void demo2(){
20
21         Customer customer = new Customer();
22         customer.setCid(8);
23         customer.setCname("马小帅");
24         customer.setAge(38);
25
26         customerDao.update(customer);
27     }
28
29     @Test
30     public void demo3(){
31         customerDao.delete(7);
32     }
33
34     @Test
35     public void demo4(){
36         int count = customerDao.findCount();
37         System.out.println(count);
38     }
39
40     @Test
41     public void demo5(){
42         String cname = customerDao.findNameById(8);
43         System.out.println(cname);
44     }
45
46     @Test
47     public void demo6(){
48         Customer customer = customerDao.findById(8);
49         System.out.println(customer);
50     }
51
52     @Test
53     public void demo7(){
54         List<Customer> customers = customerDao.findAll();
55         for (Customer customer : customers) {
56             System.out.println(customer);
57         }
58     }
59 }

applicationContext.xml 配置文件:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:context="http://www.springframework.org/schema/context"
 5        xsi:schemaLocation="
 6 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 7 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
 8
 9
10     <context:property-placeholder location="classpath:jdbc.properties"/>
11
12     <!-- 配置C3P0连接池 -->
13     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
14         <property name="driverClass" value="${jdbc.driverClass}"/>
15         <property name="jdbcUrl" value="${jdbc.url}"/>
16         <property name="user" value="${jdbc.user}"/>
17         <property name="password" value="${jdbc.password}"/>
18     </bean>
19
20
21     <!-- 配置DAO -->
22     <bean id="customerDao" class="cn.itcast.jdbc.demo2.CustomerDao">
23         <property name="dataSource" ref="dataSource"/>
24     </bean>
25 </beans>

好了, 一个基本的CRUD操作就完成了, 在这里我们可以发现配置文件特别的简洁, 我们只是给customerDao注入了一个dataSource , 然后在CustomerDao.java中就可以用this.getJdbcTemplate()获取到JDBCTemplate的实例了, 这个原理是因为我们的CustomerDao继承了 JdbcDaoSupport , 这里我们就来看下它的源码:

首先我们使用this.getJdbcTemplate而获取到一个jdbcTemplate实例:

1 /**
2  * Return the JdbcTemplate for this DAO,
3  * pre-initialized with the DataSource or set explicitly.
4  */
5 public final JdbcTemplate getJdbcTemplate() {
6   return this.jdbcTemplate;
7 }

那么又返回的这个this.jdbcTemplate是否是有值得呢?  再看源代码原来是在我们setDataSource的时候生成了jdbcTemplate实例.

1 /**
2  * Set the JDBC DataSource to be used by this DAO.
3  */
4 public final void setDataSource(DataSource dataSource) {
5     if (this.jdbcTemplate == null || dataSource != this.jdbcTemplate.getDataSource()) {
6         this.jdbcTemplate = createJdbcTemplate(dataSource);
7         initTemplateConfig();
8     }
9 }

好了, 到了这里就没有了, 关于JDBCTemplate的总结就这么多了. (该睡觉了.)

时间: 2024-10-02 14:30:37

[Spring框架]Spring JDBCTmplate基础入门总结.的相关文章

[Spring框架]Spring AOP基础入门总结二:Spring基于AspectJ的AOP的开发.

前言: 在上一篇中: [Spring框架]Spring AOP基础入门总结一. 中 我们已经知道了一个Spring AOP程序是如何开发的, 在这里呢我们将基于AspectJ来进行AOP 的总结和学习. 一, AspectJ的概述: AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件. Spring为了简化自身的AOP的开发,将AspectJ拿过来作为Spring自身一个AOP的开发.

Spring框架的一些基础知识

Spring 框架 Spring 框架是一个分层架构,由 7 个定义良好的模块组成.Spring 模块构建在核心容器之上,核心容器定义了创建.配置和管理 bean 的方式,如图 1 所示. 图 1. Spring 框架的 7 个模块 组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现.每个模块的功能如下: 核心容器:核心容器提供 Spring 框架的基本功能.核心容器的主要组件是 BeanFactory,它是工厂模式的实现.BeanFactory 使用控

跟着刚哥学习Spring框架--Spring容器(二)

Spring容器 启动Spring容器(实例化容器) -- IOC容器读取Bean配置创建Bean实例之前,必须对它进行实例化(加载启动),这样才可以从容器中获取Bean的实例并使用.  Bean是Spring管理的基本单位,任何的Java对象和组件都被当成Bean处理,容器还负责管理Bean与Bean之间的依赖关系.  两种类型的启动实现   1.BeanFactory:IOC容器的基本实现,是Spring框架的基础设施,面向Spring本身: -- Spring容器最基本的接口就是BeanF

Spring框架--Spring依赖注入(DI)的方式

Spring框架--Spring依赖注入(DI)的方式 构造方法式: 这是我在实体类中写的一个有参构造 配置applicationContext.xml文件,由于是注入构造方法中属性的值,所以要用constructor-arg标签 name属性:构造方法中的参数名称 value属性:给属性赋值 set方法: 注入属性时要用property标签 调用: Spring集合属性的注入 调用:   原文地址:https://www.cnblogs.com/javaisbest/p/12051897.ht

[Spring框架]Spring AOP基础入门总结一.

前言:前面已经有两篇文章讲了Spring IOC/DI 以及 使用xml和注解两种方法开发的案例, 下面就来梳理一下Spring的另一核心AOP. 一, 什么是AOP 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务

JavaWeb_(Spring框架)Spring中IoC与DI概念入门

Spring是于2003 年兴起的一个轻量级的Java 开源框架,它由Rod Johnson创建.传统J2EE应用的开发效率低,Spring作为开源的中间件,提供J2EE应用的各层的解决方案,Spring贯穿了表现层.业务层及持久层,而不是仅仅专注于某一层的方案.可以说Spring是企业应用开发的“一站式(full-stack)”选择.然而,Spring并不想取代那些已有的框架,而是与它们无缝地整合. 简单来说,Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架. Spri

[Spring框架]Spring IOC的原理及详解。

这里感谢 CSDN 的原博客:http://blog.csdn.net/m13666368773/article/details/7802126 看后  受益匪浅,这里再重温一遍Spring IOC 1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分别带动时针.分针和秒针顺时针旋转,从而在表盘上产生

[Spring框架]Spring IOC的原理及详解

这里感谢 CSDN 的原博客:http://blog.csdn.net/m13666368773/article/details/7802126 看后  受益匪浅,这里再重温一遍Spring IOC 1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分别带动时针.分针和秒针顺时针旋转,从而在表盘上产生

[Spring框架]Spring开发实例: XML+注解.

前言: 本文为自己学习Spring记录所用, 文章内容包括Spring的概述已经简单开发, 主要涉及IOC相关知识, 希望能够对新入门Spring的同学有帮助, 也希望大家一起讨论相关的知识. 一. Spring概述 1.1,什么是Spring:Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来.它是

JavaWeb_(Spring框架)Spring整合Hibernate

Dao层类要继承HibernateDaoSupport.java父类 原先使用Hibernate框架hibernate.cfg.xml配置数据库 <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name=&q