个人总结,转载请注明出处:http://www.cnblogs.com/lidabnu/p/5679354.html

基于Spring4.3.1官方文档总结,官方文档链接http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#jdbc

Spring JDBC能干什么,如下图所示,可见,其目的还是“简化开发”,把通用的业务无关的操作都在框架中做了。

先思考一下使用JDBC操作数据库需要解决哪些问题:

  1. 如何配置数据库连接;
  2. 执行查询:根据返回值类型可分为查询出对象,查询出对象列表,查询出数量等标量;然后再有带条件的查询。
  3. 执行删除、修改和插入;
  4. 批量操作数据库。

先简要介绍下Spring4.3.1中的JDBC操作相关类:

  1. JDBCTemplate:最经典也是最流行的类,其他类都基于JDBCTemplate封装;JDBCTemplat是线程安全的,这也是多个Dao共用一个JDBCTemplate的前提
  2. NamedParameterJdbcTemplate: 封装JDBCTemplate提供可命名的参数赋值方法,来代替JDBCTemplate的传统占位符"?“,当SQL中有多个待赋值参数时更方便。
  3. SimpleJDBCInsert和SimpleJDBCCall:利用数据库的元数据简化配置,使用它们时,仅需提供数据库中的表名或者存储过程名称以及一组与列名匹配的参数。需要数据库提供足够的元数据支持。
  4. RDBMSObject:略

一个个看要解决的问题:

如何配置数据库连接:

Spring有三种方式配置数据源,即:使用JNDI来利用外部数据源(例如Tomcat等WEB容器)、利用DBCP管理的数据库连接池、以及使用Spring自带的DriveManagerDataSource(这个不支持连接池,因此不能用于生产环境)。这里仅仅介绍DBCP。其使用方式十分简单,就是在配置文件中配置一个DBCP数据源即可。

  1. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
  2. <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
  3. <property name="url" value="jdbc:mysql://localhost:3306/stock"></property>
  4. <property name="username" value="root"></property>
  5. <property name="password" value="123456"></property>
  6. <property name="initialSize" value="5"></property>
  7. <property name="maxActive" value="10"></property>
  8. </bean>

当然,一般情况下,数据库的URL以及用户名、密码等均会在额外的配置文件中配置,所以可以利用SpEL表达式来弄。需要使用context:property-placeholder来配置“配置文件的路径”。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <beans xmlns="http://www.springframework.org/schema/beans"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xmlns:util="http://www.springframework.org/schema/util" xmlns:mvc="http://www.springframework.org/schema/mvc"
  7. xsi:schemaLocation="
  8. http://www.springframework.org/schema/util
  9. http://www.springframework.org/schema/util/spring-util-3.0.xsd
  10. http://www.springframework.org/schema/beans
  11. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  12. http://www.springframework.org/schema/context
  13. http://www.springframework.org/schema/context/spring-context-3.0.xsd">
  14.  
  15. <!-- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> -->
  16. <!-- <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> -->
  17. <!-- <property name="url" value="jdbc:mysql://localhost:3306/stock"></property> -->
  18. <!-- <property name="username" value="root"></property> -->
  19. <!-- <property name="password" value="123456"></property> -->
  20. <!-- <property name="initialSize" value="5"></property> -->
  21. <!-- <property name="maxActive" value="10"></property> -->
  22. <!-- </bean> -->
  23.  
  24. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
  25. <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
  26. <property name="url" value="jdbc:mysql://localhost:3306/stock"></property>
  27. <property name="username" value="${jdbc.username}"></property>
  28. <property name="password" value="${jdbc.password}"></property>
  29. <property name="initialSize" value="5"></property>
  30. <property name="maxActive" value="10"></property>
  31. </bean>
  32.  
  33. <context:property-placeholder location="jdbc.properties"></context:property-placeholder>
  34.  
  35. <bean id="stockDao" class="testjdbc.dao.StockDao">
  36. <property name="dataSource" ref="dataSource"></property>
  37. </bean>
  38. <!-- <context:component-scan base-package="stock.dao"></context:component-scan> -->
  39.  
  40. </beans>

如何执行查询:


查询标量:

  1. int countOfActorsNamedJoe = this.jdbcTemplate.queryForObject(
  2. "select count(*) from t_actor where first_name = ?", Integer.class, "Joe");
  3.  
  4. String lastName = this.jdbcTemplate.queryForObject(
  5. "select last_name from t_actor where id = ?",
  6. new Object[]{1212L}, String.class);

查询对象:使用queryForObject方法,输入参数使用Object数组,重载定义“行-对象”转换对象RowMapper

  1. Stock queryStock(String code)
  2. {
  3. return getJdbcTemplate().queryForObject("select * from stock where code=?",new Object[]{code}, new RowMapper<Stock>()
  4. {
  5.  
  6. public Stock mapRow(ResultSet rs, int arg1) throws SQLException {
  7. Stock stock = new Stock();
  8. stock.setCode(rs.getString("code"));
  9. stock.setName(rs.getString("name"));
  10. stock.setId(rs.getInt("id"));
  11. return stock;
  12. }
  13.  
  14. });
  15. }

查询一批对象:与queryForObject相同

  1. List<Stock> queryStocks()//不带条件
  2. {
  3. return getJdbcTemplate().query(SELECT_SQL, new RowMapper<Stock>()
  4. {
  5.  
  6. public Stock mapRow(ResultSet rs, int arg1) throws SQLException {
  7. Stock stock = new Stock();
  8. stock.setCode(rs.getString("code"));
  9. stock.setName(rs.getString("name"));
  10. stock.setId(rs.getInt("id"));
  11. return stock;
  12. }
  13.  
  14. });
  15. }
  16. List<Stock> queryStocks(String codePrefix)//带条件
  17. {
  18. return getJdbcTemplate().query("select * from stock where code like ?",new Object[]{codePrefix+"%"}, new RowMapper<Stock>()
  19. {
  20.  
  21. public Stock mapRow(ResultSet rs, int arg1) throws SQLException {
  22. Stock stock = new Stock();
  23. stock.setCode(rs.getString("code"));
  24. stock.setName(rs.getString("name"));
  25. stock.setId(rs.getInt("id"));
  26. return stock;
  27. }
  28.  
  29. });
  30. }

  

如何执行删除、修改和插入:

  1. int insert(Stock stock)
  2. {
  3. return getJdbcTemplate().update("Insert into stock(id,code,name) value(?,?,?)", stock.getId(),stock.getCode(),stock.getName());
  4. }
  5. int delete(String stockCode)
  6. {
  7. return getJdbcTemplate().update("delete from stock where code=?", stockCode);
  8. }

如何执行批量操作:

批量操作减少了Client端(应用程序)和数据库服务器之间的网络来回,因此可提升性能,下次再单独写一篇

Spring4.3.1 JDBCTemplate操作数据库的更多相关文章

  1. JdbcTemplate操作数据库

    1.JdbcTemplate操作数据库 Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中.同时,为了支 ...

  2. 编写DAO,通过JdbcTemplate操作数据库的实践

    目的:编写DAO,通过Spring中的JdbcTemplate,对数据库中的学生数据进行增删改查操作. 要操作的数据库表结构为: 一.大体框架 1.要利用JdbcTemplate,首先要添加Sprin ...

  3. 使用JdbcTemplate操作数据库(二十九)

    使用JdbcTemplate操作数据库 Spring的JdbcTemplate是自动配置的,你可以直接使用@Autowired来注入到你自己的bean中来使用. 举例:我们在创建User表,包含属性n ...

  4. 170623、springboot编程之JdbcTemplate操作数据库

    使用JdbcTemplate操作mysql数据库! 1.在pom中引入jpa包 <dependency> <groupId>org.springframework.boot&l ...

  5. Spring Boot教程(二十九)使用JdbcTemplate操作数据库

    使用JdbcTemplate操作数据库 Spring的JdbcTemplate是自动配置的,你可以直接使用@Autowired来注入到你自己的bean中来使用. 举例:我们在创建User表,包含属性n ...

  6. Spring Boot入门系列(十四)使用JdbcTemplate操作数据库,配置多数据源!

    前面介绍了Spring Boot 中的整合Mybatis并实现增删改查.如何实现事物控制.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/c ...

  7. Spring4.0学习笔记(12) —— JDBCTemplate 操作数据库

    整体配置 1.配置xml文件 <beans:beans xmlns="http://www.springframework.org/schema/mvc" xmlns:xsi ...

  8. spring-boot-route(七)整合jdbcTemplate操作数据库

    在一部分内容中,我们学习了Restful接口的编写,及接口文档的生成.我们需要将接口数据进行持久化存储,这一部分我们主要学习几种持久化框架将数据进行存储.本部分内容中,我们都将使用mysql为例来做为 ...

  9. 【使用篇二】SpringBoot使用JdbcTemplate操作数据库(12)

    Spring对数据库的操作在jdbc上面做了深层次的封装,提供了JdbcTemplate模板. 在SpringBoot使用JdbcTemplate很简单: 引入数据库驱动包(mysql或oracle) ...

随机推荐

  1. linux和windows双系统导致的时间日

    我的博客:www.while0.com系统中有两种时间区分,一为UTC,另一为LT(地方时)两者的区别为时区不同,UTC就是0时区的时间,而我们当地是用的北京时间要慢8小时.linux采用的UTC时间 ...

  2. c标准库和运行时库

    c运行时库与c标准库的区别 c标准库包括常用的数学函数.字符串操作函数等等,这些函数都是由编程高手写的,效率高,很少出错,而且是完全符合c语言标准的函数. c运行库可以说是c标准库的扩展集,它是完全包 ...

  3. message 匹配不上grok正则 也会写入到elasticsearch

    { "message" => "scan test 20161201", "@version" => "1" ...

  4. 【HDOJ】2159 FATE

    DP+贪心优化. #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXNUM ...

  5. XtraForm中OfficeSkins以及BonusSkin皮肤的设置

    前提 http://www.cnblogs.com/chucklu/p/4786629.html 在上一篇文章的基础上,现在来使用其他主题的皮肤 一.其他皮肤主题 一共有3种类型的主题: 1.默认的 ...

  6. BZOJ2287: 【POJ Challenge】消失之物

    2287: [POJ Challenge]消失之物 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 254  Solved: 140[Submit][S ...

  7. java基础(十四)集合(一)

    这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...

  8. 水leetcode 爬楼梯

    public class Solution { public int climbStairs(int n) { if(n==1) return 1; if(n==2) return 2; int pr ...

  9. Qualcomm 8X camera daemon进程浅析

    Camera 先看一下抽象层的主要流程: 首先启动一个守护进程 int qcamsvr_start(void)( qcamsvr.c) { 1. server_fd = open(server_dev ...

  10. 【Java重构系列】重构31式之封装集合

    2009年,Sean Chambers在其博客中发表了31 Days of Refactoring: Useful refactoring techniques you have to know系列文 ...