Java 之 JDBCTemplate
Spring JDBC
Spring 框架是对 JDBC 的简单封装,提供了一个 JDBCTemplate 对象简化 JDBC 的开发。
步骤:
1、导入 jar 包

2、创建 JDBCTemplate 对象,依赖于数据源 DataSource。
JdbcTemplate template = new JdbcTemplate(ds);
3、调用 JdbcTemplate 的方法来完成 CRUD 操作
常用方法:
1、update():执行DML语句。增、删、改语句。
2、queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合,(注意:这个方法查询的结果集长度只能是1)
3、queryForList():查询结果将结果集封装为list集合(注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中)
4、query():查询结果,将结果封装成 JavaBean 对象,
query的参数:RowMapper
① 创建一个匿名内部类 RowMapper,重写里面的方法
② 一般使用 BeanPropertyRowMapper 实现类,可以完成数据到 JavaBean 的自动封装
new BeanPropertyRowMapper<类型>(类型.class)
5、queryForObject():查询结果,将结果封装成对象,一般用于聚合函数的查询
案例:
在bookstores 数据库中有一个book表,表结构和记录如下:

需求:
(1)修改1号数据的 num 为10;
(2)添加一条记录;
(3)删除刚刚添加的记录;
(4)查询 id 为1的记录,将其封装为 Map 集合;
(5)查询所有记录,将其封装为 List;
(6)查询所有记录,将其封装为 Emp对象的 List 集合;
(7)查询总记录数。
代码实现:
import cn.ks.beans.Book;
import cn.ks.utils.JDBCUtils;
import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper; import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map; public class JdbcTemplateDemo { //1获取JDBCTemplate 对象
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); /*
* 1、修改1号数据的 num 为10;
*/
@Test
public void test1() { // 2 定义SQL
String sql = "update book set num=10 where id=1";
// 3 执行SQL
int count = template.update(sql); System.out.println(count); } /*
* 2 添加一条记录;
*/
@Test
public void test2() {
String sql = "insert into book values(?,?,?,?,?)";
int count = template.update(sql, null, "红楼梦", 3, 33.0, 6);
System.out.println(count);
} /*
* 3、删除刚刚添加的记录;
*/
@Test
public void test3() {
String sql = "delete from book where id=?";
int count = template.update(sql, 3);
System.out.println(count);
} /*
* 4、查询 id 为1的记录,将其封装为 Map 集合;
* 注意,这个方法查询的结果长度只能是1
*/
@Test
public void test4() {
// String sql = "select * from book where id=? or id=?";
// Map<String, Object> map = template.queryForMap(sql, 1, 2);
String sql = "select * from book where id=?";
Map<String, Object> map = template.queryForMap(sql, 1);
System.out.println(map);
//{id=1, name=西游记, kind=1, price=22.0, num=5}
} /*
5、查询所有记录,将其封装为 List;
*/
@Test
public void test5() {
String sql = "select * from book";
List<Map<String, Object>> list = template.queryForList(sql); for (Map<String,Object> item : list) {
System.out.println(item);
}
} /*
6、查询所有记录,将其封装为 Emp对象的 List 集合;
*/
@Test
public void test6() {
String sql = "select * from book";
List<Book> list = template.query(sql, new RowMapper<Book>() { //匿名内部类
@Override
public Book mapRow(ResultSet resultSet, int i) throws SQLException {
Book book = new Book();
book.setId(resultSet.getInt("id"));
book.setName(resultSet.getString("name"));
book.setKind(resultSet.getString("kind"));
book.setPrice(resultSet.getDouble("price"));
book.setNum(resultSet.getInt("num")); return book;
}
}); for (Book book : list) {
System.out.println(book);
}
} /*
6、查询所有记录,将其封装为 Emp对象的 List 集合;
*/
@Test
public void test7() {
String sql = "select * from book";
List<Book> list = template.query(sql, new BeanPropertyRowMapper<Book>(Book.class));
for (Book book : list) {
System.out.println(book);
}
} /*
* 7、查询总记录数。
*/
@Test
public void test8() {
String sql = "select count(id) from book";
Long aLong = template.queryForObject(sql, Long.class);
System.out.println(aLong);
}
}
Java 之 JDBCTemplate的更多相关文章
- JAVA Spring JdbcTemplate ( 以 SQLSERVER 为例 ) 的简单使用
< 1 > 配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&q ...
- JdbcTemplate学习笔记
JdbcTemplate学习笔记 1.使用JdbcTemplate的execute()方法执行SQL语句 Java 代码 jdbcTemplate.execute("CREATE TABLE ...
- jdbcTemplate获取mysql的blob
java使用jdbcTemplate操作mysql数据库,遇到blob字段,正常读取出来是blob的地址,而不是blob的内容. 下面采用2中方式读取blob的内容: 1.以二进制数组形式读取blob ...
- spring---transaction(5)---事务的体系
1.写在前面 事务的模型为3中: 本地事务模式. 编程事务模式. 声明事务模式. 例子1:本地事务模式 Connection conn=jdbcDao.getConnection(); Prepare ...
- SpringMVC -jquery实现分页
效果图: 关键类的代码: package:utils: SpringUtil.java 通过jdbcTemplate连接oracle数据库 package com.utils; import org. ...
- 数据库表数据传输到Oracle方案
方案步骤为:数据导出到文件(增量或全量),通知接口文件就绪(上传到ftp或提供下载url),接收方下载文件,解析文件并入库.Oracle需要建立对应的临时表和正式表,入库步骤为:清空临时表,批量插入数 ...
- 走进JavaWeb技术世界3:JDBC的进化与连接池技术
走进JavaWeb技术世界3:JDBC的进化与连接池技术 转载公众号[码农翻身] 网络访问 随着 Oracle, Sybase, SQL Server ,DB2, Mysql 等人陆陆续续住进数据库 ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】
一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...
随机推荐
- Kali Linux之速会BEEF & XSS攻击
beef 安装指南:https://github.com/beefproject/beef/wiki/Installation 升级ruby指南:https://www.cnblogs.com/waw ...
- Netty对WebSocket的支持
WebSocket长连接 一.创建服务端代码 1.MyServer 类 public class MyServer { public static void main(String[] args) t ...
- jmeter常用四种断言
jmeter常用四种断言 一.Response Assertion(响应断言)二.Size Assertion(数据包字节大小断言)三.Duration Assertion(持续时间断言)四.bean ...
- oracle/mysql java jdbc类型映射
MySQL数据类型 JAVA数据类型 JDBC TYPE 普通变量类型 主键类型 BIGINT Long BIGINT 支持 支持 TINYINT Byte TINYINT 支持 不支持 SMALLI ...
- 善用mysql中的FROM_UNIXTIME()函数和UNIX_TIMESTAMP()函数
我们经常会面临要从数据库里判断时间,取出特定日期的查询.但是数据库里储存的都是unix时间戳,处理起来并不是特别友好.幸而MYSQL提供了几个处理时间戳的函数,可以帮助我们在查询的时候,就将时间戳格式 ...
- 子页面赋值给父页面:window.opener.document.getElementById
window.opener 返回的是创建当前窗口的那个父窗口的引用,比如点击了a.htm上的一个链接而打开了b.htm,然后我们打算在b.htm上输入一个值然后赋予a.htm上的一个id为“name” ...
- NFS的安装与使用
一.服务器端: 1.1安装NFS服务: #执行以下命令安装NFS服务器, #apt会自动安装nfs-common.rpcbind等13个软件包 sudo apt install nfs-kernel- ...
- (6)Flask项目之会员注册页面
一.添加注册页面的路由 修改app/home/views.py内容,追加注册("/regist/")页面的路由: # coding:utf8 from . import home ...
- 【Git】.git/FETCH_HEAD: Permission denied 的解决方法
背景: 用webhook去拉取代码.报错 .git/FETCH_HEAD: Permission denied 原因分析:.git/FETCH_HEAD的这个文件所属组和所属主是root权限,而我用w ...
- k8s记录-不同集群服务互联
1.外部访问内部服务 添加nodePort 修改type:ClusteIP为type:NodePort 2.内部服务访问外部服务 kubectl create -f test.yaml apiVers ...