作者:追梦1819

原文:https://www.cnblogs.com/yanfei1819/p/10868954.html

版权声明:本文为博主原创文章,转载请附上博文链接!

引言

  前面几篇文章介绍了 SpringBoot 的一些基本信息,但是还没有跟数据库交互。接下来几章,我们将陆续介绍 SpringBoot 整合各大主流的 ORM 框架。

  操作数据库的方式有很多种。本章介绍 JDBCTemplate 操作数据库。

JDBCTemplate 简介

  JDBCTemplate 是 Spring 对数据库操作在jdbc上做的深层封装。使用 Spring 的注入功能,可以把DataSource注册到JdbcTemplate 之中。

  参照 JdbcTemplate API文档 可以总结出,JDBCTemplate 主要分为四类方法:

  • query 方法/ queryForXXX 方法:用于执行查询相关语句;
  • update 方法:update 方法用于执行新增、修改、删除等语句;batchUpdate 方法用于执行批处理相关语句;
  • execute 方法:可以用于执行任何 SQL 语句,一般用于执行 DDL 语句;
  • call 方法:用于执行存储过程、函数相关语句。

## SpringBoot 整合JDBCTemplate

  下面以示例演示 JDBCTemplate 在 SpringBoot 中的应用。

  首先,是准备工作,初始化表和数据:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for book
-- ----------------------------
DROP TABLE IF EXISTS `book`;
CREATE TABLE `book` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`book_name` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`book_price` decimal(10, 2) NOT NULL,
`book_author` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of book
-- ----------------------------
INSERT INTO `book` VALUES (1, 'java', 45.00, 'shiyanfei');
INSERT INTO `book` VALUES (2, 'PHP', 45.65, 'admin');
SET FOREIGN_KEY_CHECKS = 1;

  其次,新建 SpringBoot 工程,创建实体类并引入 maven 依赖:

  book 实体类:

package com.yanfei1819.jdbctemplatedemo.entity;

/**
* Created by 追梦1819 on 2019-05-15.
*/
public class Book {
private Long id;
private String bookName;
private Double bookPrice;
private String bookAuthor;
// set/get 省略
}

  pom.xml 引入依赖:

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

  然后,在 application.properties 中配置数据库信息:

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.1.88:3306/test?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=pass123

  下面,编写测试接口。为了简化代码,此处不对 Java web项目做分层处理,将所有的业务逻辑都放在 controller 层中。

package com.yanfei1819.jdbctemplatedemo.web.controller;

import com.yanfei1819.jdbctemplatedemo.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.*; import java.util.List; /**
* Created by 追梦1819 on 2019-05-15.
*/
@RestController
public class BookController {
@Autowired
private JdbcTemplate jdbcTemplate;
// 查询所有的书籍
@GetMapping("/book/queryBooks")
public List<Book> queryBooks(){
String sql = "select * from book ";
return jdbcTemplate.query(sql,new Object[]{},new BeanPropertyRowMapper<>(Book.class));
}
// 根据id查询书籍
@GetMapping("/book/{id}")
public Book queryBookById(@PathVariable Long id){
String sql = "select * from book where id = ?";
return jdbcTemplate.queryForObject(sql,new Object[]{id},new BeanPropertyRowMapper<>(Book.class));
}
// 新增书籍
@PostMapping("/book/save")
public int saveBook(@RequestBody Book book){
String sql = "insert into book(book_name,book_price,book_author) values(?,?,?)";
return jdbcTemplate.update(sql,book.getBookName(),book.getBookPrice(),book.getBookAuthor());
}
// 删除书籍
@GetMapping("/book/delete/{id}")
public int deleteBook(@PathVariable Long id){
String sql = "delete from book where id = ?";
return jdbcTemplate.update(sql,id);
}
}

  最后,可用 Postman 或者别的客户端工具进行测试。可以对数据库进行增删改查操作。







总结

  市面上有很多 ORM 框架,基本上都是各有优缺点。针对于 JDBCTemplate ,它的优点是更加接近底层的 JDBC,配置少,spring 全家桶自家封装,使用起来简单快捷。但是缺点就是业务代码和 sql 脚本糅合在一起了,不利于 sql 的维护。

  个人认为,要使用好 JDBCTemplate ,只需将 JdbcTemplate API文档 仔细研究研究。

  源码:我的GitHub

SpringBoot第四篇:整合JDBCTemplate的更多相关文章

  1. SpringBoot(四)-- 整合Servlet、Filter、Listener

    SpringBoot中有两种方式可以添加 Servlet.Filter.Listener. 1.代码注册 通过ServletRegistrationBean. FilterRegistrationBe ...

  2. springboot学习四:整合mybatis

    在application.properties加入配置 ## Mybatis 配置 mybatis.typeAliasesPackage=org.spring.springboot.domain my ...

  3. springboot第四篇:debug模式开发运用

    前提:项目是以maven project结构建立的,现状是无法进行断点调试的.怎么才能在eclipse里进行调试呢? 需要:①将项目打包部署到tomcat ②往项目加入dynamic web modu ...

  4. SpringBoot第四集:整合JdbcTemplate和JPA(2020最新最易懂)

    SpringBoot第四集:整合JdbcTemplate和JPA(2020最新最易懂) 当前环境说明: Windows10_64 Maven3.x JDK1.8 MySQL5.6 SpringTool ...

  5. springboot 整合jdbcTemplate

    springboot 整合jdbcTemplate 〇.搭建springboot环境(包括数据库的依赖) 一.添加依赖 如果导入了jpa的依赖,就不用导入jdbctemplete的依赖了jpa的依赖: ...

  6. springboot(十四):springboot整合shiro-登录认证和权限管理(转)

    springboot(十四):springboot整合shiro-登录认证和权限管理 .embody{ padding:10px 10px 10px; margin:0 -20px; border-b ...

  7. SpringBoot消息篇Ⅲ --- 整合RabbitMQ

    知识储备:  关于消息队列的基本概念我已经在上一篇文章介绍过了(传送门),本篇文章主要讲述的是SpringBoot与RabbitMQ的整合以及简单的使用. 一.安装RabbitMQ 1.在linux上 ...

  8. SpringBoot分布式篇Ⅷ --- 整合SpringCloud

    SpringCloud是一个分布式的整体解决方案.Spring Cloud为开发者提供了在分布式系统(配置管理,服务发现,熔断,路由,微代理,控制总线,一次性token,全局锁,leader选举.分布 ...

  9. SpringBoot第六篇:整合通用Mapper

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10876339.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言   在以往的项 ...

随机推荐

  1. 【java提高】---patchca生成验证码

    Java使用patchca生成验证码        Patchca是Piotr Piastucki写的一个java验证码开源库,打包成jar文件发布,patchca使用简单但功能强大. 本例实现了自定 ...

  2. Java编程基础——数组和二维数组

    Java编程基础——数组和二维数组 摘要:本文主要对数组和二维数组进行简要介绍. 数组 定义 数组可以理解成保存一组数的容器,而变量可以理解为保存一个数的容器. 数组是一种引用类型,用于保存一组相同类 ...

  3. 小鸟初学Shell编程(六)变量赋值

    变量的意义 我们在使用Linux命令或脚本的时候,会有一些输出,那么这些输出的信息可以用变量临时存储,以备我们下一条命令或脚本使用. 变量的定义 变量的定义建议用一个有意义的英文单词来代表变量,不要使 ...

  4. 关于Qt 静态成员函数调用信号

    class globalCalcThread; extern globalCalcThread *g_calcThread; class globalCalcThread : public QThre ...

  5. vuePress自动部署到Github Page脚本踩坑

    背景 照着官网的教程来就行了,踩了个小坑,记录一下,希望对你有帮助 这是部署后的效果 小坑1 如图所示,官网推荐部署命令 然而windows 没有bash 指令, 直接运行报错 两个解决方法: 项目根 ...

  6. vue3.0和2.0的区别,Vue-cli3.0于 8月11日正式发布,更快、更小、更易维护、更易于原生、让开发者更轻松

    vue3.0和2.0的区别Vue-cli3.0于 8月11日正式发布,看了下评论,兼容性不是很好,命令有不少变化,不是特别的乐观vue3.0 的发布与 vue2.0 相比,优势主要体现在:更快.更小. ...

  7. Windows中将nginx添加到服务(转)

    下载安装nginx http://nginx.org/en/download.html 下载后解压到C盘 C:\nginx-1.14.0 添加服务 需要借助"Windows Service ...

  8. Writing Your Own Widget(自定义组件)

    英文地址:http://dojotoolkit.org/reference-guide/1.10/quickstart/writingWidgets.html#quickstart-writingwi ...

  9. day09 作业

    简述定义函数的三种方式 空函数.无参函数.有参函数 简述函数的返回值 函数内部代码经过一系列的逻辑处理返回的结果 函数没有返回值,默认返回None 函数可以通过return返回出返回值 return可 ...

  10. JS高阶---H5之Web Workers多线程

    大纲: 主体: (1)介绍 (2)案例 编程实现斐波那契数列的计算 递归调用实现案例: Web Workers多线程的新标准并没有改变JS单线程的本质,分离出的子线程完全受主线程控制,且不得操作DOM ...