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的更多相关文章

  1. JAVA Spring JdbcTemplate ( 以 SQLSERVER 为例 ) 的简单使用

    < 1 > 配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&q ...

  2. JdbcTemplate学习笔记

    JdbcTemplate学习笔记 1.使用JdbcTemplate的execute()方法执行SQL语句 Java 代码 jdbcTemplate.execute("CREATE TABLE ...

  3. jdbcTemplate获取mysql的blob

    java使用jdbcTemplate操作mysql数据库,遇到blob字段,正常读取出来是blob的地址,而不是blob的内容. 下面采用2中方式读取blob的内容: 1.以二进制数组形式读取blob ...

  4. spring---transaction(5)---事务的体系

    1.写在前面 事务的模型为3中: 本地事务模式. 编程事务模式. 声明事务模式. 例子1:本地事务模式 Connection conn=jdbcDao.getConnection(); Prepare ...

  5. SpringMVC -jquery实现分页

    效果图: 关键类的代码: package:utils: SpringUtil.java 通过jdbcTemplate连接oracle数据库 package com.utils; import org. ...

  6. 数据库表数据传输到Oracle方案

    方案步骤为:数据导出到文件(增量或全量),通知接口文件就绪(上传到ftp或提供下载url),接收方下载文件,解析文件并入库.Oracle需要建立对应的临时表和正式表,入库步骤为:清空临时表,批量插入数 ...

  7. 走进JavaWeb技术世界3:JDBC的进化与连接池技术

    走进JavaWeb技术世界3:JDBC的进化与连接池技术 转载公众号[码农翻身] 网络访问 随着 Oracle, Sybase, SQL Server ,DB2,  Mysql 等人陆陆续续住进数据库 ...

  8. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  9. 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】

    一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...

随机推荐

  1. uniapp - 关于调试跨域

    [] 1.右键Chrome图标 2.选中属性(R) 3.在目标(T) chrome.exe后添加 --disable-web-security --user-data-dir --allow-runn ...

  2. IDEA启动Springboot时,解决报错java.lang.NoClassDefFoundError: javax/servlet/Filter

    如下所示,将spring-boot-starter-tomcat依赖中的<scope>provided</scope>注释掉 <dependency> <gr ...

  3. beyond compare解决特殊字符无法输出、多sheet页无法对比以及文件太大超出系统内存问题的Excel转txt脚本

    beyond compare解决特殊字符无法输出.多sheet页无法对比以及文件太大超出系统内存问题的Excel转txt脚本 ' XLS_to_CSV.vbs ' ' Converts an Exce ...

  4. 013 Enhancer创建动态代理

    在上一章使用了Enhancer,没有仔细说明代理的问题,在这一章进行详细的说明. 原本想使用cf包的,后来发现使用framework包下的包也没有问题,程序中就一直使用framework中的类. 一: ...

  5. Tomcat Response encode

    Character Encoding - Apache Tomcat - Apache Software Foundation https://cwiki.apache.org/confluence/ ...

  6. git如何查找已经被删除文件的历史修改记录?

    答: 使用以下命令即可: git log --all --full-history -- <path-to-file>

  7. vue---使用Class

    在用vue-cli开发项目的时候,很多时候会用到类.具体的使用方法: config.js(使用类,还可以定义构造函数) class config { /** * 构造函数 * @param {stri ...

  8. thinkphp5---安装到宝塔出现Warning: require(): open_basedir错误

    使用thinkphp5安装到宝塔的linux上,出现以下错误: Warning: require(): open_basedir restriction in effect. File(/www/ww ...

  9. Vue.js实现tab切换效果

    利用Vue实现简易tab切换效果 1.1 在我们平时浏览网站的时候,经常看到的特效有图片轮播.导航子菜单的隐藏.tab标签的切换等等.这段时间学习了vue后,开始要写出一些简单的特效. 1.2 实现思 ...

  10. 【翻译】Flink Table Api & SQL —Streaming 概念 ——在持续查询中 Join

    本文翻译自官网 :  Joins in Continuous Queries   https://ci.apache.org/projects/flink/flink-docs-release-1.9 ...