`

Spring JDBC原理与应用实例讲解

阅读更多

本文工程下载

一、概述

使用Spring进行基本的JDBC访问数据库有多种选择。Spring至少提供了三种不同的工作模式:Spring JDBC抽象框架core包提供了JDBC模板类,其中JdbcTemplate是core包的核心类,所以其他模板类都是基于它封装完成的,JDBC模板类是第一种工作模式。三种模式如下:

  • JdbcTemplate:是Spring中最基本的JDBC模板, 利用JDBC和简单的索引参数查询对数据库进行简单访问
  • NamedParameterJdbcTemplate:能够在查询的时候把值绑定到SQL里的命名参数,而不是索引参数   NamedParameterJdbcTemplate内部包含了一个JdbcTemplate,所以JdbcTemplate能做的事情NamedParameterJdbcTemplate都能干    NamedParameterJdbcTemplate相对于JdbcTemplate主要增加了参数可以命名的功能。
  •  SimpleJdbcTemplate:利用Java5的特性,比如自动装箱、通用和可变参数列表来简化JDBC模板的使用SimpleJdbcTemplate内部包含了一个NamedParameterJdbcTemplate;所以NamedParameterJdbcTemplate能做的事情SimpleJdbcTemplate都能干,SimpleJdbcTemplate相对于NamedParameterJdbcTemplate主要增加了JDK5.0的泛型和可变长度参数支持。

 

      下面主要来讲 JdbcTemplate:

       JdbcTemplate类通过模板设计模式帮助我们消除了冗长的代码,只做需要做的事情(即可变部分),并且帮我们做哪些固定部分,如连接的创建及关闭。 JdbcTemplate类对可变部分采用回调接口方式实现,如ConnectionCallback通过回调接口返回给用户一个连接,从而可以使用该连 接做任何事情、StatementCallback通过回调接口返回给用户一个Statement,从而可以使用该Statement做任何事情等等,还 有其他一些回调接口如图所示。

 

JdbcTemplate支持的回调接口

Spring JDBC抽象框架所带来的价值将在以下几个方面得以体现:(注:使用了Spring JDBC抽象框架之后,应用开发人员只需要完成斜体字部分的编码工作。) 

 

  • 定义数据库连接参数
  • 打开数据库连接
  • 声明SQL语句
  • 预编译并执行SQL语句
  • 遍历查询结果(如果需要的话)
  • 处理每一次遍历操作
  • 处理抛出的任何异常
  • 处理事务
  • 关闭数据库连接

Spring将替我们完成所有使用JDBC API进行开发的单调乏味的、底层细节处理工作。 

 

二、使用步骤

1、使用JdbcTemplate来访问数据

    只需要配置DataSource就能够让JdbcTemplate工作,如下配置:

 

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. <!-- 配置数据源 -->  
  2. <bean id="dataSource"  
  3.     class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
  4.     <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
  5.     <property name="url" value="jdbc:mysql://localhost:3306/test" />  
  6.     <property name="username" value="root" />  
  7.     <property name="password" value="christmas258@" />  
  8. </bean>  
  9.   
  10. <!--配置一个JdbcTemplate实例,并将这个“共享的”,“安全的”实例注入到不同的DAO类中去 -->  
  11. <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">  
  12.     <property name="dataSource" ref="dataSource" />  
  13. </bean>  


2、现在我们可以把JdbcTemplate装配到DAO,使用它来访问数据库

 

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. @Autowired  
  2. private JdbcTemplate jdbcTemplate;  


3、开始操作数据库,如下面的插入

 

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. @Override  
  2. public void insert(Student student) {  
  3.     jdbcTemplate.update("INSERT INTO student VALUES('" + student.getId()  
  4.             + "', '" + student.getName() + "', '" + student.getAge()  
  5.             + "', '" + student.getSex() + "')");  
  6. }  

 

三、使用范例

本文工程下载

 

这里我们要实例Spring Jdbc和Mysql数据库连接,建表、执行插入、查找、删除等功能。

1、新建一个JavaProject工程,导入包mysql-connector-java-5.1.22-bin.jar+spring3.2+commons-logging-1.2.jar

2、首先先建好数据库对应的Model:

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. package com.mucfc.model;  
  2. /**   
  3. *数据库传输类 
  4. *作者 林炳文(ling20081005@126.com 博客:http://blog.csdn.net/evankaka)   
  5. *时间 2015.5.24 
  6. */  
  7. public class Student {  
  8.     private int id;  
  9.     private String name;  
  10.     private int age;  
  11.     private String sex;  
  12.     public Student(){  
  13.           
  14.     }  
  15.     public Student(int id,String name,int age,String sex){  
  16.         this.id=id;  
  17.         this.name=name;  
  18.         this.age=age;  
  19.         this.sex=sex;  
  20.     }  
  21.     public int getId() {  
  22.         return id;  
  23.     }  
  24.     public void setId(int id) {  
  25.         this.id = id;  
  26.     }  
  27.     public String getName() {  
  28.         return name;  
  29.     }  
  30.     public void setName(String name) {  
  31.         this.name = name;  
  32.     }  
  33.     public int getAge() {  
  34.         return age;  
  35.     }  
  36.     public void setAge(int age) {  
  37.         this.age = age;  
  38.     }  
  39.     public String getSex() {  
  40.         return sex;  
  41.     }  
  42.     public void setSex(String sex) {  
  43.         this.sex = sex;  
  44.     }  
  45.   
  46.   
  47. }  

然后还有一个数据库每一行的封装

 

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. package com.mucfc.model;  
  2. import java.sql.ResultSet;  
  3. /**   
  4. *封装数据中的一行 
  5. *作者 林炳文(ling20081005@126.com 博客:http://blog.csdn.net/evankaka)   
  6. *时间 2015.5.24 
  7. */  
  8. import java.sql.SQLException;  
  9. /** 
  10.  * RowMapper可以将数据中的每一行封装成用户定义的类 
  11.  */  
  12. import org.springframework.jdbc.core.RowMapper;     
  13. public class StudentMapper implements RowMapper<Student>{  
  14.        public Student mapRow(ResultSet rs, int rowNum) throws SQLException {  
  15.               Student student = new Student();  
  16.               student.setId(rs.getInt("id"));  
  17.               student.setName(rs.getString("name"));  
  18.               student.setAge(rs.getInt("age"));  
  19.               student.setSex(rs.getString("sex"));  
  20.               return student;  
  21.        }  
  22.     }  


3、DAO层:

 

接口类:

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. package com.mucfc.dao;  
  2. import java.util.List;  
  3. import com.mucfc.model.Student;  
  4. /**   
  5. *DAO接口类 
  6. *作者 林炳文(ling20081005@126.com 博客:http://blog.csdn.net/evankaka)   
  7. *时间 2015.5.24 
  8. */  
  9. public interface StudentDao {  
  10.     /** 
  11.      * 创建数据库表结构 
  12.      * @param sql 
  13.      */  
  14.     public void create();  
  15.     /** 
  16.      * 插入一条学生数据 
  17.      * @param student 
  18.      */  
  19.     public void insert(Student student);  
  20.     /** 
  21.      * 通过主键取得对象 
  22.      * @param id 
  23.      * @return student 
  24.      */  
  25.     public Student getStudent(Integer id);  
  26.     /** 
  27.      * 取得表中所有的学生 
  28.      * @param id 
  29.      * @return student 
  30.      */  
  31.     public List<Student> listStudents();  
  32.     /** 
  33.      * 通过主键删除对象 
  34.      * @param id 
  35.      */  
  36.     public void delete(Integer id);  
  37.     /** 
  38.      * 通过主键更改对象 
  39.      * @param id 
  40.      */  
  41.     public void update(Student student);  
  42.   
  43. }  

实现类:

 

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. package com.mucfc.dao;  
  2.   
  3. import java.util.Iterator;  
  4. import java.util.List;  
  5. import java.util.Map;  
  6.   
  7. import org.springframework.beans.factory.annotation.Autowired;  
  8. import org.springframework.jdbc.core.JdbcTemplate;  
  9. import org.springframework.stereotype.Component;  
  10.   
  11. import com.mucfc.model.Student;  
  12. import com.mucfc.model.StudentMapper;  
  13. /**   
  14. *DAO实现类 
  15. *作者 林炳文(ling20081005@126.com 博客:http://blog.csdn.net/evankaka)   
  16. *时间 2015.5.24 
  17. */  
  18. @Component  
  19. public class StudentDaoImpl implements StudentDao {  
  20.     @Autowired  
  21.     private JdbcTemplate jdbcTemplate;  
  22.   
  23.     @Override  
  24.     public void create() {  
  25.         System.out.println("执行建表操作");  
  26.         jdbcTemplate  
  27.         .execute("DROP TABLE IF EXISTS  student");  
  28.         jdbcTemplate  
  29.                 .execute("CREATE TABLE student (id int primary key, name varchar(100),age int,sex varchar(2))");  
  30.     }  
  31.   
  32.     @Override  
  33.     public void insert(Student student) {  
  34.         System.out.println("================执行插入操作================");  
  35.         jdbcTemplate.update("INSERT INTO student VALUES('" + student.getId()  
  36.                 + "', '" + student.getName() + "', '" + student.getAge()  
  37.                 + "', '" + student.getSex() + "')");  
  38.     }  
  39.   
  40.     @Override  
  41.     public Student getStudent(Integer id) {  
  42.         System.out.println("================执行查找单个数据操作================");  
  43.         String SQL = "select * from Student where id = ?";  
  44.           Student student = jdbcTemplate.queryForObject(SQL,new Object[]{id},new StudentMapper());  
  45.           return student;  
  46.     }  
  47.   
  48.     @Override  
  49.     public List<Student> listStudents() {  
  50.         System.out.println("================执行查找全部操作================");  
  51.         List rows = jdbcTemplate.queryForList("SELECT * FROM student");    
  52.         Iterator it = rows.iterator();    
  53.         while(it.hasNext()) {    
  54.             Map studentMap = (Map) it.next();    
  55.             System.out.print("学生id:"+studentMap.get("id") + "; ");    
  56.             System.out.print("学生name:"+studentMap.get("name") + "; ");    
  57.             System.out.print("学生age:"+studentMap.get("age") + "; ");    
  58.             System.out.println("学生sex:"+studentMap.get("sex"));    
  59.         }    
  60.         return rows;  
  61.     }  
  62.   
  63.     @Override  
  64.     public void delete(Integer id) {  
  65.         System.out.println("================执行删除单个数据操作================");  
  66.           String SQL = "delete from Student where id = ?";  
  67.           jdbcTemplate.update(SQL, id);  
  68.           System.out.println("Deleted Record with ID = " + id );  
  69.           return;  
  70.     }  
  71.   
  72.     @Override  
  73.     public void update(Student student) {  
  74.         System.out.println("================执行更新单个数据操作================");  
  75.         jdbcTemplate.update(  
  76.                 "UPDATE student SET name = ?,age=?,sex=? WHERE id = ?",  
  77.                 new Object[] { student.getName(), student.getAge(),  
  78.                         student.getSex(), student.getId() });  
  79.   
  80.     }  
  81.   
  82. }  


4、Spring配置

 

新建一个beans.xml,内容如下:

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  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" xmlns:context="http://www.springframework.org/schema/context"  
  4.     xmlns:aop="http://www.springframework.org/schema/aop"  
  5.     xsi:schemaLocation="    
  6.            http://www.springframework.org/schema/beans    
  7.            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd    
  8.            http://www.springframework.org/schema/aop    
  9.            http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
  10.            http://www.springframework.org/schema/context    
  11.            http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
  12.     <!-- 配置数据源 -->  
  13.     <bean id="dataSource"  
  14.         class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
  15.         <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
  16.         <property name="url" value="jdbc:mysql://localhost:3306/test" />  
  17.         <property name="username" value="root" />  
  18.         <property name="password" value="christmas258@" />  
  19.     </bean>  
  20.   
  21.     <!--配置一个JdbcTemplate实例,并将这个“共享的”,“安全的”实例注入到不同的DAO类中去 -->  
  22.     <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">  
  23.         <property name="dataSource" ref="dataSource" />  
  24.     </bean>  
  25.   
  26.     <!-- 自动扫描注解的bean -->  
  27.     <context:component-scan base-package="com.mucfc.dao" />  
  28.   
  29. </beans>  


5、测试:

 

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. package com.mucfc.service;  
  2.   
  3. import org.springframework.context.ApplicationContext;  
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  5.   
  6. import com.mucfc.dao.StudentDaoImpl;  
  7. import com.mucfc.model.Student;  
  8.   
  9. public class Test {  
  10.   
  11.     public static void main(String[] args) {  
  12.          ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");  
  13.          StudentDaoImpl studentDaoImpl=(StudentDaoImpl)context.getBean("studentDaoImpl");  
  14.          studentDaoImpl.create();  
  15.          Student student1=new Student(1,"红红",12,"女");  
  16.          studentDaoImpl.insert(student1);  
  17.          studentDaoImpl.insert(new Student(2,"明明",16,"男"));  
  18.          studentDaoImpl.insert(new Student(3,"小王",22,"男"));  
  19.          studentDaoImpl.insert(new Student(4,"小刘",15,"男"));  
  20.          studentDaoImpl.insert(new Student(5,"张三",23,"男"));    
  21.          studentDaoImpl.listStudents();  
  22.         System.out.println(studentDaoImpl.getStudent(2));   
  23.         studentDaoImpl.update(new Student(2,"大明",15,"男"));  
  24.         System.out.println(studentDaoImpl.getStudent(2));   
  25.         studentDaoImpl.delete(2);  
  26.          studentDaoImpl.listStudents();  
  27.     }  
  28.   
  29. }  


输出结果:

 

分享到:
评论

相关推荐

    Spring JDBC应用实例讲解

    通过学习这些Spring JDBC的应用实例,你可以有效地整合Spring与数据库,提升开发效率,同时保持代码的简洁和可维护性。在实际项目中,Spring JDBC可以与MyBatis、Hibernate等ORM框架结合使用,以满足不同层次的需求...

    SpringJDBC.rar_SpringJDBC_spring jdbc

    通过这个SpringJDBC.rar的案例,初学者可以学习到如何配置DataSource,如何创建JdbcTemplate实例,以及如何编写和执行SQL语句。同时,实践中还可以了解到如何将Spring JDBC整合到Spring Boot项目中,以及如何处理...

    JDBC_Spring.zip_spring jdbc

    本教程将深入讲解如何在Spring框架中集成JDBC,以高效且灵活地管理数据库操作。 首先,Spring的JDBC模块提供了对JDBC的高级封装,简化了数据库访问流程,减少了手动处理连接、事务等繁琐工作。通过Spring的...

    spring-jdbc-RoutingDataSource

    在Spring JDBC模块中,RoutingDataSource是一个动态数据源,它可以根据一定的规则(比如基于数据库连接池的名字、运行时环境等)来决定使用哪个具体的数据源。这种方式允许我们在应用程序中灵活地切换或组合不同的...

    SpringJDBC+myeclipse6+事例+工程源码.rar

    本资源“SpringJDBC+myeclipse6+事例+工程源码.rar”提供了一次深入学习Spring JDBC与myeclipse6集成的实践机会。本文将详细讲解这一主题,帮助读者掌握如何在myeclipse6环境下利用Spring的JDBC模块进行数据库操作。...

    JSF+Spring+Hibernate的实例讲解

    本实例讲解将深入探讨这三者的结合使用,帮助开发者更好地理解和应用这些工具。 JSF,全称为JavaServer Faces,是一种Java EE规范,用于构建用户界面。它提供了组件模型,使得开发人员可以使用预定义的UI组件(如...

    boot-crmSpring数据库开发--SpringJDBC的配置

    本教程将详细讲解如何在Spring Boot项目中配置Spring JDBC,以便进行数据库开发。 首先,让我们了解Spring Boot的特点。Spring Boot简化了Spring应用的初始搭建以及开发过程,通过内嵌的Tomcat服务器和自动配置功能...

    Java网络编程 JAVA web开发实例讲解 宠物分类展现web项目 实战讲解 全套PPT课件 共10个章节.rar

    Java网络编程 JAVA web开发实例讲解 宠物分类展现web项目 第03章 数据库准备及JDBC(共40页).ppt Java网络编程 JAVA web开发实例讲解 宠物分类展现web项目 第04章 用Hibernate优化宠物分类展现DAO类(共33页).ppt ...

    JSF+Spring+Hibernate的实例讲解.doc

    JavaServer Faces (JSF)、Spring Framework 和 Hibernate 是构建现代 Web 应用程序的三个关键技术。JSF 是一种用户界面框架,适用于基于 Model-View-Controller (MVC) 架构的应用程序,提供了丰富的组件库和事件驱动...

    spring6pdf详细讲解

    在本教程中,我们将详细讲解 Spring 框架的各个方面,包括 IoC、DI、AOP、事务管理和 JDBC 等。我们还将提供多种实践和示例代码,以帮助开发者快速掌握 Spring 框架。 在 Spring 中,控制反转(IoC)和依赖注入(DI...

    Spring MVC 实例(附带详细讲解)

    实践中,Spring MVC还可以与其他Spring模块集成,如Spring Security进行权限控制,Spring AOP进行切面编程,以及Spring JDBC或MyBatis进行数据访问,构建出功能丰富的Web应用。同时,Spring Boot的出现进一步简化了...

    Spring+JDBC集成学习笔记(可参考ppt附件38-46页)

    **Spring+JDBC集成学习笔记** 在Java Web开发中,Spring框架因其强大的功能和灵活性而被广泛应用。...同时,了解源码和工具相关的标签,意味着这些资料可能涉及Spring JDBC的内部实现原理以及使用工具辅助开发的方法。

    Struts2、Spring和Hibernate应用实例

    "Spring和Hibernate"可能涵盖了Spring如何与Hibernate集成,以及如何在Spring中配置和使用Hibernate的相关信息。"Struts2.doc"则可能讲解了Struts2框架的使用,包括Action配置、拦截器、结果类型等内容。 总的来说...

    Spring JDBC的使用方法详解

    实例讲解 第一步:导入依赖 在使用Spring JDBC之前,需要导入相关依赖,包括mysql-connector、spring-jdbc、spring-tx、spring-core、spring-context等。 第二步:数据库的建立、配置xml 在使用Spring JDBC之前...

    Jdbcsupport培训 详细讲解jdbcsupport

    Jdbcsupport是Spring框架中用于简化JDBC操作的...此外,了解如何与Spring的事务管理结合使用,能够更好地利用Jdbcsupport进行高效、可靠的数据库操作。最后,不断实践和总结,才能真正掌握并运用这些技术解决实际问题。

    实例讲解组合struts,Hibernate,spring

    本实例旨在通过详细讲解,帮助开发者理解如何将这三个框架整合起来,构建一个完整的MVC(Model-View-Controller)架构的应用。 首先,Struts是Apache组织开发的一款用于构建企业级Web应用的MVC框架。它通过Action类...

    Spring+Hibernate注解事务实例

    通过实践这个实例,你不仅能掌握Spring和Hibernate的基本用法,还能深入理解声明式事务管理的工作原理,这对于开发复杂的、需要事务支持的Java应用程序来说是非常重要的。这将提高你的代码质量和可维护性,让你的...

    Spring的连接数据库以及JDBC模板(实例讲解)

    在本文中,我们将深入探讨如何使用Spring框架与JDBC模板来连接数据库并执行数据库操作。Spring JDBC模板提供了一种简洁的API,可以帮助我们避免手动管理数据库连接和事务,从而简化了数据库操作。 首先,要使用...

    Spring+3.x企业应用开发实战光盘源码(全)

     第11章:讲解了如何使用Spring JDBC进行数据访问操作,我们还重点讲述了LOB字段处理、主键产生和获取等难点知识。  第12章:讲解了如何在Spring中集成Hibernate、myBatis等数据访问框架,同时,读者还将学习到ORM...

    Maven搭建Spring+Mybatis+MySql实例

    本实例将详细讲解如何利用Maven来搭建一个整合了Spring、Mybatis和MySql的项目。 首先,我们从创建Maven项目开始。Maven是Apache开发的一款项目管理和综合工具,它通过POM(Project Object Model)文件管理项目的...

Global site tag (gtag.js) - Google Analytics