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

  1. 【Spring JDBC】spring jdbc 介绍(一)

    Spring JDBC模块是Spring框架的基础模块之一.在Spring JDBC模块中,所有的类可以被分到四个单独的包: core 核心包:它包含了JDBC的核心功能.此包内有很多重要的类,包括: ...

  2. 三种数据库访问——Spring JDBC

    本篇随笔是上两篇的延续:三种数据库访问——原生JDBC:数据库连接池:Druid Spring的JDBC框架 Spring JDBC提供了一套JDBC抽象框架,用于简化JDBC开发. Spring主要 ...

  3. Spring JDBC(一)jdbcTemplate

    前言 最近工作中经常使用Spring JDBC操作数据库,也断断续续的看了一些源码,便有了写一些总结的想法,希望在能帮助别人的同时,也加深一下自己对Spring JDBC的理解. Spring JDB ...

  4. 【Spring JDBC】JdbcTemplate(三)

    传统Jdbc API与Spring jdbcTemplate比较 //JDBC API Statement statement = conn.createStatement(); ResultSet ...

  5. Spring Jdbc事例说明(三)

    上一篇文章已经讲解了如何使用Spring搭建工程,这一篇文章是接着上一篇文章来描述的. 一.载入依赖 新增加了两个依赖,mysql数据库驱动和alibaba数据源包 <!-- mysql驱动包 ...

  6. 【Spring】Spring的数据库开发 - 1、Spring JDBC的配置和Spring JdbcTemplate的解析

    Spring JDBC 文章目录 Spring JDBC Spring JdbcTemplate的解析 Spring JDBC的配置 简单记录-Java EE企业级应用开发教程(Spring+Spri ...

  7. Spring对 JDBC 的支持,JdbcTemplate类的使用

    导包:spring框架的包 和 连接数据库连接池的c3p0包 连接mysql数据库的包; 在src目录下建立jdbc.properties文件:存放连接数据库的属性值 jdbc.user=root j ...

  8. Spring 对JDBC的支持(JdbcTemplate)

    Spring对数据库的操作,使用JdbcTemplate对象 需要引入相关的jar文件 如版本:(Spring核心jar包就不列了) spring-jdbc-3.2.5.RELEASE.jar spr ...

  9. Spring JDBC JdbcTemplate类示例

    org.springframework.jdbc.core.JdbcTemplate类是JDBC核心包中的中心类.它简化了JDBC的使用,并有助于避免常见的错误. 它执行核心JDBC工作流,留下应用程 ...

随机推荐

  1. Django中的Model.objects.create() 和 Model() 的区别?

    Django 官方文档说明 objects.create 是 A convenience method for creating an object and saving it all in one ...

  2. 用Express 4和 MongoDB打造Todo List

    本篇文章主要參考自DreamersLab - 用Express和MongoDB寫一個todo list.原文的教學內容是使用Express 3.x版,在這邊做簡單Express 4.12.1的todo ...

  3. 12月18日风险投资速递:Facebook收购实时体育数据提供商Sport Stream

    国内公司 1.手游公司成都掌沃无限获得近千万元天使投资 成都掌沃无限成立于2013年,是一家新成立的手机游戏开发商,创始人及CEO张涛拥有超过10年的游戏行业从业经验和连续创业经历,其首款游戏产品为& ...

  4. fastcgi_param详解

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;#脚本文件请求的路径 fastcgi_param QUERY_STRI ...

  5. linux下大文件处理

    linux下采用先分割后合并的策略处理大文件 第一步:分割文件 split split 参数:-a, --suffix-length=N     指定输出文件名的后缀,默认为2个-b, --bytes ...

  6. MIZ702N开发环境的准备1

    前言 最近由于工作需要开始接手基于MIZ702的硬件平台的Linux的开发,仔细想想,工作这么久,这好像还是我第一次接手嵌入式Liunx相关的工作.这几天拿到开发板,开始了阅读文档.安装Ubuntu虚 ...

  7. 【系统篇】Archlinux系统安装

    本教程为最新安装Linux的教程,想看更详细可以到我B站主页看视频教程 ArchLinux安装配置手册[系统篇] 本教程参考自 https://wiki.archlinux.org/index.php ...

  8. sql -- update表子查询、多条件判断case when

    表结构: 需求 思路: 求出平均数 select avg(user_total) as avg from user_level 更新他的等级 update user_level set user_ra ...

  9. Mysql报错:Authentication .....Reading from the stream has failed

    连接Mysql5.7版本的数据库出现报错:Authentication to host '171.13.164.***' for user 'root' using method 'mysql_nat ...

  10. 渗透之——MSF提权

    在WEB渗透中当我们拿到webshell了,我们可以试试用MSF(metasploit)来进行提权,在MSF里meterpreter很强大的! 我们先用msfvenom生成一个EXE的木马后门. ms ...