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接口. 动态变量:用户名.密码.连接的数据库. ...
随机推荐
- koa2 get post api restful前端联调
1.git https://github.com/MengFangui/koa2-restful-api 2.示例代码 //引入 Koa 服务器 const koa = require('koa'); ...
- mysql死锁(锁与事务)
线上某服务时不时报出如下异常(大约一天二十多次):“Deadlock found when trying to get lock;”. Oh, My God! 是死锁问题.尽管报错不多,对性能目前看来 ...
- FormsAuthentication使用指南,实现登录
一般情况下,在我们做访问权限管理的时候,会把用户的正确登录后的基本信息保存在Session中,以后用户每次请求页面或接口数据的时候,拿到Session中存储的用户基本信息,查看比较他有没有登录和能否访 ...
- Netty实现SSL双向验证完整实例
Netty实现SSL双向验证完整实例 博客分类: netty nettyssl自签证书 一.证书准备 要使用ssl双向验证,就必须先要生成服务端和客户端的证书,并相互添加信任,具体流程如下(本人调试 ...
- sqlyog 社区版
https://github.com/webyog/sqlyog-community/wiki/Downloads
- 码云初次导入项目(Idea)
一.新建项目 使用ssh时记得配置码云的个人中的秘钥 [问题原因] 远程仓库和本地仓库的内容不一致 [解决方法] 在git项目对应的目录位置打开Git Bash 然后在命令窗输入下面命令: gi ...
- 【视频开发】EasyIPCamera通过RTSP协议接入海康、大华等摄像机,摒弃私有SDK接入弊端
近期工作中需要开发一套视频监控系统,实现WEB端.手机APP端预览局域网内的道路监控摄像机,我负责一些后台服务的开发工作. 由于之前项目中的程序都是采用私有协议.各摄像机厂商的SDK进行视频监控系统开 ...
- 面试之leetcode两数求和
1 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样 ...
- Javaspring+mybit+maven中实现定时任务
背景:在Javaspring中,定时的启动某一个任务时,使用@Scheduled来实现 Javaspring工程创建好之后,直接创建下面的class文件即可.具体的用法可参照 https://www. ...
- ReentrantLock 非公平锁不公平在哪
重入锁关键地带: 1:使用unsafe的cas方式对AQS中的state成员变量进行“原子加一”操作. 2:如果当前线程多次lock,相当于对state在原有值基础上继续加一操作:释放锁的条件为“原子 ...