Spring 梳理-JdbcTemplate简介
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 jdbc.user=root
- 2 jdbc.password=123456
- 3 jdbc.driverClass=com.mysql.jdbc.Driver
- 4 jdbc.jdbcUrl=jdbc\:mysql\:///test
我们通常将数据库的配置信息单独放到一个文件中,这样也为了方便后期维护
配置Spring配置文件applicationContext.xml

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

第一行代码:用来读取db.properties文件中的数据。
第二行代码:用来配置一个数据源,这里数据实现类来自C3P0中的一个属性类。其中属性的值就是来自于db.properties
第九行代码:配置一个JdbcTemplate实例,并注入一个dataSource数据源
测试代码
1、update()方法
a、通过update插入数据

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

这里update方法,第二参可以为可变参数。在数据库中可以看到,数据以被正确插入
b、通过update修改数据
- 1 String sql="update user set name=?,deptid=? where id=?";
- 2 jdbcTemplate.update(sql,new Object[]{"zhh",5,51});
c、通过update删除数据
- 1 String sql="delete from user where id=?";
- 2 jdbcTemplate.update(sql,51);
2、batchUpdate()批量插入、更新和删除方法
a、批量插入

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

batchUpdate方法第二参数是一个元素为Object[]数组类型的List集合
3、从数据中读取数据到实体对象
先定一个User实体类

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

a、读取单个对象
- 1 String sql="select id,name,deptid from user where id=?";
- 2
- 3 RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);
- 4 User user= jdbcTemplate.queryForObject(sql, rowMapper,52);
- 5 System.out.println(user);
输出结果:
User [id=52, name=caoyc, deptid=6]
【注意】:1、使用BeanProperytRowMapper要求sql数据查询出来的列和实体属性需要一一对应。如果数据中列明和属性名不一致,在sql语句中需要用as重新取一个别名
2、使用JdbcTemplate对象不能获取关联对象
b、读取多个对象

- 1 String sql="select id,name,deptid from user";
- 2
- 3 RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);
- 4 List<User> users= jdbcTemplate.query(sql, rowMapper);
- 5 for (User user : users) {
- 6 System.out.println(user);
- 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 String sql="select count(*) from user";
- 2
- 3 int count= jdbcTemplate.queryForObject(sql, Integer.class);
- 4 System.out.println(count);
在实际开发中可以怎样用
UserDao.java

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

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

代码测试
- 1 UserDao userDao=(UserDao) ctx.getBean("userDao");
- 2 System.out.println(userDao.get(53));
转:https://www.cnblogs.com/caoyc/p/5630622.html
Spring 梳理-JdbcTemplate简介的更多相关文章
- Spring利用JDBCTemplate实现批量插入和返回id
1.先介绍一下java.sql.Connection接口提供的三个在执行插入语句后可取的自动生成的主键的方法: //第一个是 PreparedStatement prepareStatement(St ...
- Spring Web Flow 简介
Spring Web Flow 简介 博客分类: 转载 SSH 最近在TSS上看到了一片介绍Spring Web Flow的文章,顺便就翻译了下来,SWF的正式版估计要到6月份才能看到了,目前的例子都 ...
- Spring 中jdbcTemplate 实现执行多条sql语句
说一下Spring框架中使用jdbcTemplate实现多条sql语句的执行: 很多情况下我们需要处理一件事情的时候需要对多个表执行多个sql语句,比如淘宝下单时,我们确认付款时要对自己银行账户的表里 ...
- spring使用jdbcTemplate和jdbcdaosupport和namedparameter
jdbcTemplate: 首先连接数据库 <!-- 导入外部文件 --> <context:property-placeholder location="classpat ...
- Spring中AOP简介与切面编程的使用
Spring中AOP简介与使用 什么是AOP? Aspect Oriented Programming(AOP),多译作 "面向切面编程",也就是说,对一段程序,从侧面插入,进行操 ...
- Spring之JDBCTemplate学习
一.Spring对不同的持久化支持: Spring为各种支持的持久化技术,都提供了简单操作的模板和回调 ORM持久化技术 模板类 JDBC org.springframework.jdbc.core. ...
- spring+spring mvc+JdbcTemplate 入门小例子
大家使用这个入门时候 最好能够去 搜一下 spring mvc 的 原理,我放一张图到这里,自己琢磨下,后面去学习就容易了 给个链接 (网上一把,千万不能懒) https://www.cnblo ...
- Unit03: Spring Web MVC简介 、 基于XML配置的MVC应用 、 基于注解配置的MVC应用
Unit03: Spring Web MVC简介 . 基于XML配置的MVC应用 . 基于注解配置的MVC应用 springmvc (1)springmvc是什么? 是一个mvc框架,用来简化基于mv ...
- spring 学习(四): spring 的 jdbcTemplate 操作
spring 学习(四): spring 的 jdbcTemplate 操作 spring 针对 javaee 的每一层,都提供了相应的解决技术,jdbcTemplate 的主要操作在 dao 层. ...
随机推荐
- Codeforces 396D
题意略. 思路: 很经典的逆序对计数问题. https://blog.csdn.net/v5zsq/article/details/79006684 这篇博客讲得很好. 当循环到n的时候,我们需要特殊 ...
- 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 ...
- 从SpringBoot构建十万博文聊聊限流特技
前言 在开发十万博客系统的的过程中,前面主要分享了爬虫.缓存穿透以及文章阅读量计数等等.爬虫的目的就是解决十万+问题:缓存穿透是为了保护后端数据库查询服务:计数服务解决了接近真实阅读数以及数据库服务的 ...
- liunx安装jdk
jdk 安装包 https://pan.baidu.com/s/1cKnUQGU2Sk2nsARAzzVAHw [root@localhost ~]# tar -zxvf jdk-8u152-lin ...
- 2019 HZNU Winter Training Day 13 Comprehensive Training
A.Jongmah CodeForces-1110D 题意:你在玩一个数字游戏,有一堆写在瓦片上的数字,希望你能组成最多的三元组(三个数字相同,或顺子). 这题用到的方法是动态规划.f[i][j] ...
- 用webpack构建一个常规项目,好处和坏处分析
最近项目改版,用webpack重新架构. 些许心得我会写几篇记录一下. 好处如下: 1.ES6语法用起来,babel-loader转义,各种新语法用起来. 2.import 语法写起来,webpack ...
- 【Linux】一些常用命令(待整理)
一.关机重启命令 二.查询ip 三.查询杀死进程 四.CentOS7 关闭防火墙 五.vim常用 5.1 搜索 5.2 设置行号 剪切 替换 一.关机重启命令 shutdown -h 10 #计算机将 ...
- Python中字典,集合和元组函数总结
## 字典的所有方法- 内置方法 - 1 cmp(dict1, dict2) 比较两个字典元素. - 2 len(dict) 计算字典元素个数,即键的总数. - 3 str(dict) 输出字典可打印 ...
- 小白学Python-S3-day04-用户信息的增删改查、变更权限
一.用户信息 文件中每一行就是用户的详细信息,每一行是按照冒号为分隔符分成七段 第一段用户名,第二段密码占位符,第三段UID,第四段GID,第五段是描述信息,第六段是家目录.第七段是 是否 可以登录操 ...
- springboot打包jar包后运行
我们知道,spring boot内嵌tomcat,打包成jar包以后,直接就可以运行. 我们也可以使用启动项里面的mian入口来运行程序. 运行jar包时,我们一般是java -jar xxx.jar ...