JDBC(三)----Spring JDBC(JDBCTemplate)
## Spring JDBC
* Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发
1、步骤
1、导入jar包

2、创建JDBCTemplate对象。依赖于数据源DataSource
* JDBCTemplate template = new JdbcTemplate(ds);
3、调用JDBCTemplate的方法来完成CRUD的操作
* update():执行DML(增删改)语句
* queryForMap():查询结果将结果集封装为Map集合,将列名作为key,将值作为value,将这条记录封装为一个map集合
注意:这个方法查询的结果集长度只能是1
* queryForList():查询结果将结果集封装为list集合,
注意:没讲一条记录封装为一个Map集合,再讲Map集合装载到List集合中
* query():查询结果,将结果封装为JavaBean对象
注意:query的参数:RowMapper
* 一般使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装
* new BeanPropertyRowMapper<类型>(类型.class)
* queryForObject():查询结果,将结果封装为对象
注意:一般用于聚合函数的查询
2、练习
工具类:Druid
package com.ftj.DS.practice; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties; /**
* Druid工具类
*/
public class ComUtils { private static DataSource ds; //静态代码块加载配置文件
static {
try {
Properties pro = new Properties();
InputStream is = ComUtils.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
} //获取数据库连接
public static Connection getConn() throws SQLException {
return ds.getConnection();
} //获取连接
public static DataSource getDs() {
return ds;
} //关闭数据库资源
public static void close(Connection conn, PreparedStatement pstmt, ResultSet rs) {
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
//归还连接
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} //关闭数据库连接
public static void close(Connection conn, PreparedStatement pstmt) {
close(conn, pstmt, null);
}
}
测试类
package com.ftj.DS.practice; import com.ftj.DS.entity.User;
import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper; import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map; /**
* 练习
*/
public class Work01 { //创建DJBCTemplate对象,依赖于数据源DataSource
private JdbcTemplate template = new JdbcTemplate(ComUtils.getDs()); //修改user表的密码为 654321
@Test
public void test01() {
//调用创建DJBCTemplate对象下的方法来执行sql
String sql = "update user set password = ? where id = ?";
int update = template.update(sql, "abc", 1);
if (update > 0) {
System.out.println("密码更新成功!");
}
} //添加一条记录
@Test
public void test02() {
//调用创建DJBCTemplate对象下的方法来执行sql
String sql = "insert into user values(null,?,?)";
int admin = template.update(sql, "admin", "123");
if (admin > 0){
System.out.println("success");
}
} //查询id为1的记录,封装为Map集合 注意:这个方法查询的结果集长度只能是1
@Test
public void test03(){
String sql = "select * from user where id = 1";
Map<String, Object> map = template.queryForMap(sql);
System.out.println(map);
} /*
查询所有记录将其封装为List
*/
@Test
public void test04(){
String sql = "select * from user";
List<Map<String, Object>> maps = template.queryForList(sql);
for (Map<String, Object> map : maps) {
System.out.println(map);
}
} //查询所有记录,将其封装为User对象的List集合
@Test
public void test06(){
String sql = "select * from user";
List<User> lsit = template.query(sql, new RowMapper<User>() {
@Override
public User mapRow(ResultSet rs, int i) throws SQLException {
User user = new User();
int id = rs.getInt("id");
String username = rs.getString("username");
String password = rs.getString("password");
user.setId(id);
user.setUsername(username);
user.setPassword(password);
return user;
}
});
for (User user : lsit) {
System.out.println(user);
}
} //优化
@Test
public void test06_2(){
String sql = "select * from user";
List<User> list = template.query(sql, new BeanPropertyRowMapper<User>(User.class));
for (User user : list) {
System.out.println(user);
}
} //查询所有记录
@Test
public void test07(){
String sql = "select count(id) from user";
Long total = template.queryForObject(sql, Long.class);
System.out.println(total);
}
}
JDBC(三)----Spring JDBC(JDBCTemplate)的更多相关文章
- 【Spring JDBC】spring jdbc 介绍(一)
Spring JDBC模块是Spring框架的基础模块之一.在Spring JDBC模块中,所有的类可以被分到四个单独的包: core 核心包:它包含了JDBC的核心功能.此包内有很多重要的类,包括: ...
- 三种数据库访问——Spring JDBC
本篇随笔是上两篇的延续:三种数据库访问——原生JDBC:数据库连接池:Druid Spring的JDBC框架 Spring JDBC提供了一套JDBC抽象框架,用于简化JDBC开发. Spring主要 ...
- Spring JDBC(一)jdbcTemplate
前言 最近工作中经常使用Spring JDBC操作数据库,也断断续续的看了一些源码,便有了写一些总结的想法,希望在能帮助别人的同时,也加深一下自己对Spring JDBC的理解. Spring JDB ...
- 【Spring JDBC】JdbcTemplate(三)
传统Jdbc API与Spring jdbcTemplate比较 //JDBC API Statement statement = conn.createStatement(); ResultSet ...
- Spring Jdbc事例说明(三)
上一篇文章已经讲解了如何使用Spring搭建工程,这一篇文章是接着上一篇文章来描述的. 一.载入依赖 新增加了两个依赖,mysql数据库驱动和alibaba数据源包 <!-- mysql驱动包 ...
- 【Spring】Spring的数据库开发 - 1、Spring JDBC的配置和Spring JdbcTemplate的解析
Spring JDBC 文章目录 Spring JDBC Spring JdbcTemplate的解析 Spring JDBC的配置 简单记录-Java EE企业级应用开发教程(Spring+Spri ...
- Spring对 JDBC 的支持,JdbcTemplate类的使用
导包:spring框架的包 和 连接数据库连接池的c3p0包 连接mysql数据库的包; 在src目录下建立jdbc.properties文件:存放连接数据库的属性值 jdbc.user=root j ...
- Spring 对JDBC的支持(JdbcTemplate)
Spring对数据库的操作,使用JdbcTemplate对象 需要引入相关的jar文件 如版本:(Spring核心jar包就不列了) spring-jdbc-3.2.5.RELEASE.jar spr ...
- Spring JDBC JdbcTemplate类示例
org.springframework.jdbc.core.JdbcTemplate类是JDBC核心包中的中心类.它简化了JDBC的使用,并有助于避免常见的错误. 它执行核心JDBC工作流,留下应用程 ...
随机推荐
- http2.0与WebSocket的关系是怎么样的
按照OSI网络分层模型,IP是网络层协议,TCP是传输层协议,而HTTP是应用层的协议.在这三者之间,SPDY和WebSocket都是与HTTP相关的协议,而TCP是HTTP底层的协议.WebSock ...
- 这是100年后火星的未来,到处都是CBD!
火星是个荒漠之地,尽管如此,最近几十年人类一直准备登录火星,然后殖民火星.随着科技的迅猛发展,感觉火星离我们越来越近了.不过,人类如何在火星上生存下去,这一直是科学家们最热衷的话题. 意大利建筑师 ...
- Nginx+PHP配置错误,日志:[error] 24324#0: *31 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
一.问题现象 1.安装nginx.php.php-fpm后,浏览器访问php报错,“File not found”: 二.问题排查 1.检查nginx.php-fpm服务是否正常启动,均正常启动: 2 ...
- javaScript系列 [28]
本文介绍JavaScript事件相关的知识点,主要包括事件流.事件处理程序.事件对象(event)以及常见事件类型和事件委托等相关内容. 在网页开发涉及的三种基础技术(HTML CSS JavaScr ...
- 一起了解 .Net Foundation 项目 No.9
.Net 基金会中包含有很多优秀的项目,今天就和笔者一起了解一下其中的一些优秀作品吧. 中文介绍 中文介绍内容翻译自英文介绍,主要采用意译.如与原文存在出入,请以原文为准. DLR/IronPytho ...
- Java入门教程五(数字和日期处理)
Java 提供了处理相关问题的类,包括 Math 类.Random 类.BigInteger 类.Date 类等. Math类 Math 类封装了常用的数学运算,提供了基本的数学操作,如指数.对数.平 ...
- Python 十大语法
前言 Python 是一种代表简单思想的语言,其语法相对简单,很容易上手.不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了.本文精心筛选了最能展现 Python 语法之精妙的十个知识 ...
- python库常用函数学习
os.path #返回标准化的绝对路径,基本等同于normpath() os.path.abspath(path) #返回文件名 os.path.basename(path) #返回目录名 os.pa ...
- Rust入坑指南:朝生暮死
今天想和大家一起把我们之前挖的坑再刨深一些.在Java中,一个对象能存活多久全靠JVM来决定,程序员并不需要去关心对象的生命周期,但是在Rust中就大不相同,一个对象从生到死我们都需要掌握的很清楚. ...
- Appium自动化测试实践
安装配置Appium环境 安装appium 安装appium有两种方式,一种是通过命令行终端方式,一种是Appium Desktop.这里推荐使用Appium Desktop方式,只需下载下来安装就可 ...