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

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

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

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

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

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

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

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

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

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

book 实体类:

  1. package com.yanfei1819.jdbctemplatedemo.entity;
  2. /**
  3. * Created by 追梦1819 on 2019-05-15.
  4. */
  5. public class Book {
  6. private Long id;
  7. private String bookName;
  8. private Double bookPrice;
  9. private String bookAuthor;
  10. // set/get 省略
  11. }

pom.xml 引入依赖:

  1. <dependency>
  2. <groupId>mysql</groupId>
  3. <artifactId>mysql-connector-java</artifactId>
  4. <scope>runtime</scope>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-jdbc</artifactId>
  9. </dependency>
  10. <dependency>
  11. <groupId>org.springframework.boot</groupId>
  12. <artifactId>spring-boot-starter-web</artifactId>
  13. </dependency>

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

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

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

  1. package com.yanfei1819.jdbctemplatedemo.web.controller;
  2. import com.yanfei1819.jdbctemplatedemo.entity.Book;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.jdbc.core.BeanPropertyRowMapper;
  5. import org.springframework.jdbc.core.JdbcTemplate;
  6. import org.springframework.web.bind.annotation.*;
  7. import java.util.List;
  8. /**
  9. * Created by 追梦1819 on 2019-05-15.
  10. */
  11. @RestController
  12. public class BookController {
  13. @Autowired
  14. private JdbcTemplate jdbcTemplate;
  15. // 查询所有的书籍
  16. @GetMapping("/book/queryBooks")
  17. public List<Book> queryBooks(){
  18. String sql = "select * from book ";
  19. return jdbcTemplate.query(sql,new Object[]{},new BeanPropertyRowMapper<>(Book.class));
  20. }
  21. // 根据id查询书籍
  22. @GetMapping("/book/{id}")
  23. public Book queryBookById(@PathVariable Long id){
  24. String sql = "select * from book where id = ?";
  25. return jdbcTemplate.queryForObject(sql,new Object[]{id},new BeanPropertyRowMapper<>(Book.class));
  26. }
  27. // 新增书籍
  28. @PostMapping("/book/save")
  29. public int saveBook(@RequestBody Book book){
  30. String sql = "insert into book(book_name,book_price,book_author) values(?,?,?)";
  31. return jdbcTemplate.update(sql,book.getBookName(),book.getBookPrice(),book.getBookAuthor());
  32. }
  33. // 删除书籍
  34. @GetMapping("/book/delete/{id}")
  35. public int deleteBook(@PathVariable Long id){
  36. String sql = "delete from book where id = ?";
  37. return jdbcTemplate.update(sql,id);
  38. }
  39. }

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



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

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

版权声明:本文为yanfei1819原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/yanfei1819/p/10868954.html