JdbcTemplate简介

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

  JdbcTemplate位于中。其全限定命名为org.springframework.jdbc.core.JdbcTemplate。要使用JdbcTemlate还需一个这个包包含了一下事务和异常控制

  

JdbcTemplate主要提供以下五类方法:

  • execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;

  • update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;

  • query方法及queryForXXX方法:用于执行查询相关语句;

  • call方法:用于执行存储过程、函数相关语句。

下面进行案件分析

在src下面新建一个属性配置文件

  1. 1 jdbc.user=root
  2. 2 jdbc.password=123456
  3. 3 jdbc.driverClass=com.mysql.jdbc.Driver
  4. 4 jdbc.jdbcUrl=jdbc\:mysql\:///test

  我们通常将数据库的配置信息单独放到一个文件中,这样也为了方便后期维护

配置Spring配置文件applicationContext.xml

  1. 1 <context:property-placeholder location="classpath:db.properties"/>
  2. 2 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  3. 3 <property name="user" value="${jdbc.user}"></property>
  4. 4 <property name="password" value="${jdbc.password}"></property>
  5. 5 <property name="driverClass" value="${jdbc.driverClass}"></property>
  6. 6 <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
  7. 7 </bean>
  8. 8
  9. 9 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
  10. 10 <property name="dataSource" ref="dataSource"></property>
  11. 11 </bean>

  第一行代码:用来读取db.properties文件中的数据。

  第二行代码:用来配置一个数据源,这里数据实现类来自C3P0中的一个属性类。其中属性的值就是来自于db.properties

  第九行代码:配置一个JdbcTemplate实例,并注入一个dataSource数据源

测试代码

 

1、update()方法

a、通过update插入数据

  1. 1 //启动IoC容器
  2. 2 ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
  3. 3 //获取IoC容器中JdbcTemplate实例
  4. 4 JdbcTemplate jdbcTemplate=(JdbcTemplate) ctx.getBean("jdbcTemplate");
  5. 5 String sql="insert into user (name,deptid) values (?,?)";
  6. 6 int count= jdbcTemplate.update(sql, new Object[]{"caoyc",3});
  7. 7 System.out.println(count);

  这里update方法,第二参可以为可变参数。在数据库中可以看到,数据以被正确插入

b、通过update修改数据

  1. 1 String sql="update user set name=?,deptid=? where id=?";
  2. 2 jdbcTemplate.update(sql,new Object[]{"zhh",5,51});

 c、通过update删除数据

  1. 1 String sql="delete from user where id=?";
  2. 2 jdbcTemplate.update(sql,51);

2、batchUpdate()批量插入、更新和删除方法

a、批量插入

  1. 1 String sql="insert into user (name,deptid) values (?,?)";
  2. 2
  3. 3 List<Object[]> batchArgs=new ArrayList<Object[]>();
  4. 4 batchArgs.add(new Object[]{"caoyc",6});
  5. 5 batchArgs.add(new Object[]{"zhh",8});
  6. 6 batchArgs.add(new Object[]{"cjx",8});
  7. 7
  8. 8 jdbcTemplate.batchUpdate(sql, batchArgs);

  batchUpdate方法第二参数是一个元素为Object[]数组类型的List集合

3、从数据中读取数据到实体对象

  先定一个User实体类

  1. 1 package com.proc;
  2. 2
  3. 3 public class User {
  4. 4 private Integer id;
  5. 5 private String name;
  6. 6 private Integer deptid;
  7. 7 public Integer getId() {
  8. 8 return id;
  9. 9 }
  10. 10 public void setId(Integer id) {
  11. 11 this.id = id;
  12. 12 }
  13. 13 public String getName() {
  14. 14 return name;
  15. 15 }
  16. 16 public void setName(String name) {
  17. 17 this.name = name;
  18. 18 }
  19. 19 public Integer getDeptid() {
  20. 20 return deptid;
  21. 21 }
  22. 22 public void setDeptid(Integer deptid) {
  23. 23 this.deptid = deptid;
  24. 24 }
  25. 25
  26. 26 public String toString() {
  27. 27 return "User [id=" + id + ", name=" + name + ", deptid=" + deptid + "]";
  28. 28 }
  29. 29 }

a、读取单个对象

  1. 1 String sql="select id,name,deptid from user where id=?";
  2. 2
  3. 3 RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);
  4. 4 User user= jdbcTemplate.queryForObject(sql, rowMapper,52);
  5. 5 System.out.println(user);

  输出结果:

  User [id=52, name=caoyc, deptid=6]

【注意】:1、使用BeanProperytRowMapper要求sql数据查询出来的列和实体属性需要一一对应。如果数据中列明和属性名不一致,在sql语句中需要用as重新取一个别名

     2、使用JdbcTemplate对象不能获取关联对象

b、读取多个对象

  1. 1 String sql="select id,name,deptid from user";
  2. 2
  3. 3 RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);
  4. 4 List<User> users= jdbcTemplate.query(sql, rowMapper);
  5. 5 for (User user : users) {
  6. 6 System.out.println(user);
  7. 7 }

输出结果

...

User [id=49, name=姓名49, deptid=5] User [id=50, name=姓名50, deptid=8] User [id=52, name=caoyc, deptid=6] User [id=53, name=zhh, deptid=8] User [id=54, name=cjx, deptid=8]

---

c、获取某个记录某列或者count、avg、sum等函数返回唯一值

  1. 1 String sql="select count(*) from user";
  2. 2
  3. 3 int count= jdbcTemplate.queryForObject(sql, Integer.class);
  4. 4 System.out.println(count);

在实际开发中可以怎样用

UserDao.java

  1. 1 package com.proc;
  2. 2
  3. 3 import org.springframework.beans.factory.annotation.Autowired;
  4. 4 import org.springframework.jdbc.core.BeanPropertyRowMapper;
  5. 5 import org.springframework.jdbc.core.JdbcTemplate;
  6. 6 import org.springframework.jdbc.core.RowMapper;
  7. 7 import org.springframework.stereotype.Repository;
  8. 8
  9. 9 @Repository
  10. 10 public class UserDao {
  11. 11
  12. 12 @Autowired
  13. 13 private JdbcTemplate jdbcTemplate;
  14. 14
  15. 15 public User get(int id){
  16. 16 String sql="select id,name,deptid from user where id=?";
  17. 17 RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);
  18. 18 return jdbcTemplate.queryForObject(sql, rowMapper,id);
  19. 19 }
  20. 20 }

xml配置:

  1. 1 <?xml version="1.0" encoding="UTF-8"?>
  2. 2 <beans xmlns="http://www.springframework.org/schema/beans"
  3. 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. 4 xmlns:aop="http://www.springframework.org/schema/aop"
  5. 5 xmlns:context="http://www.springframework.org/schema/context"
  6. 6 xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
  7. 7 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  8. 8 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
  9. 9
  10. 10 <context:component-scan base-package="com.proc"></context:component-scan>
  11. 11 <context:property-placeholder location="classpath:db.properties"/>
  12. 12 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  13. 13 <property name="user" value="${jdbc.user}"></property>
  14. 14 <property name="password" value="${jdbc.password}"></property>
  15. 15 <property name="driverClass" value="${jdbc.driverClass}"></property>
  16. 16 <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
  17. 17 </bean>
  18. 18
  19. 19 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
  20. 20 <property name="dataSource" ref="dataSource"></property>
  21. 21 </bean>
  22. 22 </beans>

代码测试

  1. 1 UserDao userDao=(UserDao) ctx.getBean("userDao");
  2. 2 System.out.println(userDao.get(53));

转:https://www.cnblogs.com/caoyc/p/5630622.html

Spring 梳理-JdbcTemplate简介的更多相关文章

  1. Spring利用JDBCTemplate实现批量插入和返回id

    1.先介绍一下java.sql.Connection接口提供的三个在执行插入语句后可取的自动生成的主键的方法: //第一个是 PreparedStatement prepareStatement(St ...

  2. Spring Web Flow 简介

    Spring Web Flow 简介 博客分类: 转载 SSH 最近在TSS上看到了一片介绍Spring Web Flow的文章,顺便就翻译了下来,SWF的正式版估计要到6月份才能看到了,目前的例子都 ...

  3. Spring 中jdbcTemplate 实现执行多条sql语句

    说一下Spring框架中使用jdbcTemplate实现多条sql语句的执行: 很多情况下我们需要处理一件事情的时候需要对多个表执行多个sql语句,比如淘宝下单时,我们确认付款时要对自己银行账户的表里 ...

  4. spring使用jdbcTemplate和jdbcdaosupport和namedparameter

    jdbcTemplate: 首先连接数据库 <!-- 导入外部文件 --> <context:property-placeholder location="classpat ...

  5. Spring中AOP简介与切面编程的使用

    Spring中AOP简介与使用 什么是AOP? Aspect Oriented Programming(AOP),多译作 "面向切面编程",也就是说,对一段程序,从侧面插入,进行操 ...

  6. Spring之JDBCTemplate学习

    一.Spring对不同的持久化支持: Spring为各种支持的持久化技术,都提供了简单操作的模板和回调 ORM持久化技术 模板类 JDBC org.springframework.jdbc.core. ...

  7. spring+spring mvc+JdbcTemplate 入门小例子

    大家使用这个入门时候 最好能够去 搜一下 spring mvc 的 原理,我放一张图到这里,自己琢磨下,后面去学习就容易了 给个链接 (网上一把,千万不能懒)    https://www.cnblo ...

  8. Unit03: Spring Web MVC简介 、 基于XML配置的MVC应用 、 基于注解配置的MVC应用

    Unit03: Spring Web MVC简介 . 基于XML配置的MVC应用 . 基于注解配置的MVC应用 springmvc (1)springmvc是什么? 是一个mvc框架,用来简化基于mv ...

  9. spring 学习(四): spring 的 jdbcTemplate 操作

    spring 学习(四): spring 的 jdbcTemplate 操作 spring 针对 javaee 的每一层,都提供了相应的解决技术,jdbcTemplate 的主要操作在 dao 层. ...

随机推荐

  1. Codeforces 396D

    题意略. 思路: 很经典的逆序对计数问题. https://blog.csdn.net/v5zsq/article/details/79006684 这篇博客讲得很好. 当循环到n的时候,我们需要特殊 ...

  2. babel-loader与babel-core的版本对应关系

    babel-loader 8.x对应babel-core 7.xbabel-loader 7.x对应babel-core 6.x如何解决1. 卸载旧的babel-corenpm un babel-co ...

  3. 从SpringBoot构建十万博文聊聊限流特技

    前言 在开发十万博客系统的的过程中,前面主要分享了爬虫.缓存穿透以及文章阅读量计数等等.爬虫的目的就是解决十万+问题:缓存穿透是为了保护后端数据库查询服务:计数服务解决了接近真实阅读数以及数据库服务的 ...

  4. liunx安装jdk

    jdk 安装包  https://pan.baidu.com/s/1cKnUQGU2Sk2nsARAzzVAHw [root@localhost ~]# tar -zxvf jdk-8u152-lin ...

  5. 2019 HZNU Winter Training Day 13 Comprehensive Training

    A.Jongmah   CodeForces-1110D 题意:你在玩一个数字游戏,有一堆写在瓦片上的数字,希望你能组成最多的三元组(三个数字相同,或顺子). 这题用到的方法是动态规划.f[i][j] ...

  6. 用webpack构建一个常规项目,好处和坏处分析

    最近项目改版,用webpack重新架构. 些许心得我会写几篇记录一下. 好处如下: 1.ES6语法用起来,babel-loader转义,各种新语法用起来. 2.import 语法写起来,webpack ...

  7. 【Linux】一些常用命令(待整理)

    一.关机重启命令 二.查询ip 三.查询杀死进程 四.CentOS7 关闭防火墙 五.vim常用 5.1 搜索 5.2 设置行号 剪切 替换 一.关机重启命令 shutdown -h 10 #计算机将 ...

  8. Python中字典,集合和元组函数总结

    ## 字典的所有方法- 内置方法 - 1 cmp(dict1, dict2) 比较两个字典元素. - 2 len(dict) 计算字典元素个数,即键的总数. - 3 str(dict) 输出字典可打印 ...

  9. 小白学Python-S3-day04-用户信息的增删改查、变更权限

    一.用户信息 文件中每一行就是用户的详细信息,每一行是按照冒号为分隔符分成七段 第一段用户名,第二段密码占位符,第三段UID,第四段GID,第五段是描述信息,第六段是家目录.第七段是 是否 可以登录操 ...

  10. springboot打包jar包后运行

    我们知道,spring boot内嵌tomcat,打包成jar包以后,直接就可以运行. 我们也可以使用启动项里面的mian入口来运行程序. 运行jar包时,我们一般是java -jar xxx.jar ...