ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

电脑常识SpringBoot2.X基础教程:SpringBoot整合JdbcTemplate【附源码】

2021-11-18 09:31:47  阅读:392  来源: 互联网

标签:return ResponseUtil title id blog 源码 SpringBoot2 基础教程 public


电脑常识SpringBoot2.X基础教程:SpringBoot整合JdbcTemplate【附源码】

文章目录


JdbcTemplate 是 Spring 自带的 JDBC 模板组件,底层实现了对 JDBC 的封装,我们可以借助 JdbcTemplate 来执行所有数据库操作,例如插入、更新、删除和从数据库中检索数据,并且有效避免直接使用 jdbc 带来的繁琐编码。

JdbcTemplate主要提供以下五种类型的方法:

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

当然,在大部分情况下,我们都会直接使用更加强大的持久化框架来访问数据库,比如MyBatis、Hibernate 或者 Spring Data JPA,我们这里讲解 JdbcTemplate 的整合,只是想让家更加了解底层原理。

一、准备数据表

CREATE TABLE `spring_boot`.`article` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) NULL COMMENT '文章标题', `author` varchar(255) NULL COMMENT '作者', PRIMARY KEY (`id`) ) COMMENT = '文章表'; 

二、引入依赖

 mysql mysql-connector-java runtime org.springframework.boot spring-boot-starter-jdbc org.springframework.boot spring-boot-starter-web 

三、配置数据源

spring.datasource.url = jdbc:mysql://139.196.20.xxx:3306/spring_boot?useUnicode=true&characterEncoding=utf-8 spring.datasource.username = root spring.datasource.password = 123456 spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver 

因为 Spring Boot 2.5.4 默认使用了MySQL 8.0.26 的驱动,所以这里采用com.mysql.cj.jdbc.Driver,而不是老的com.mysql.jdbc.Driver。

四、编写领域对象

@Data @NoArgsConstructor public class Blog { private Integer id; private String title; private String author; } 

这里我们使用Lombok,需要在IDEA里安装Lombok插件,不然会报错,get、set方法找不到。
在这里插入图片描述

五、新增

JdbcTemplate 中,除了查询有几个 API 之外,增删改统一都使用 update 来操作,自己来传入 SQL 即可。

update 方法的返回值就是 SQL 执行受影响的行数。

@RestController public class BlogController { @Autowired public BlogService blogService; /** * 新增一篇文章 * * @param blog 文章实体类 * @return */ @PostMapping(value = "/create") public Object create(@RequestBody Blog blog) { if (StringUtils.isBlank(blog.getTitle())) { return ResponseUtil.fail(ResultEnums.BAD_ARGUMENT_VALUE.getCode(), "请输入文章标题"); } if (StringUtils.isBlank(blog.getAuthor())) { return ResponseUtil.fail(ResultEnums.BAD_ARGUMENT_VALUE.getCode(), "请输入文章作者"); } return blogService.create(blog); } } @Service public class BlogServiceImpl implements BlogService { @Autowired private JdbcTemplate jdbcTemplate; @Override public Object create(Blog blog) { int count = jdbcTemplate.update("insert into article(title, author) values(?, ?)", blog.getTitle(), blog.getAuthor()); if (count > 0) { return ResponseUtil.ok("插入成功"); } else { return ResponseUtil.fail(ResultEnums.SERIOUS.getCode(), "插入失败"); } } } 

在这里插入图片描述

六、修改

@RestController public class BlogController { @Autowired public BlogService blogService; /** * 通过id修改文章 * * @param blog * @return */ @PostMapping(value = "/updateById") public Object updateById(@RequestBody Blog blog) { if (StringUtils.isBlank(blog.getTitle())) { return ResponseUtil.fail(ResultEnums.BAD_ARGUMENT_VALUE.getCode(), "请输入文章标题"); } if (StringUtils.isBlank(blog.getAuthor())) { return ResponseUtil.fail(ResultEnums.BAD_ARGUMENT_VALUE.getCode(), "请输入文章作者"); } return blogService.updateById(blog); } } @Service public class BlogServiceImpl implements BlogService { @Autowired private JdbcTemplate jdbcTemplate; @Override public Object updateById(Blog blog) { int count = jdbcTemplate.update("update article set title=?,author=? where id=?", blog.getTitle(), blog.getAuthor(), blog.getId()); if (count > 0) { return ResponseUtil.ok("修改成功"); } else { return ResponseUtil.fail(ResultEnums.SERIOUS.getCode(), "修改失败"); } } } 

在这里插入图片描述

七、查询

@RestController public class BlogController { @Autowired public BlogService blogService; /** * 查询所有文章 * * @return */ @GetMapping(value = "/getAll") public List<Blog> getAll() { return blogService.getAll(); } /** * 通过标题查询文章 * * @param title * @return */ @GetMapping(value = "/getByTitle") public Object getByTitle(String title) { if (StringUtils.isBlank(title)) { return ResponseUtil.fail(ResultEnums.BAD_ARGUMENT_VALUE.getCode(), "请输入文章标题"); } return blogService.getByTitle(title); } } @Service public class BlogServiceImpl implements BlogService { @Autowired private JdbcTemplate jdbcTemplate; @Override public List<Blog> getAll() { return jdbcTemplate.query("select * from article", new BeanPropertyRowMapper<>(Blog.class)); } @Override public List<Blog> getByTitle(String title) { // 如果不会Lambda表达式的小伙伴可以看下面的代码 return jdbcTemplate.query("select * from article where title = ?", (resultSet, i) -> { Blog blog = new Blog(); blog.setId(resultSet.getInt("id")); blog.setTitle(resultSet.getString("title")); blog.setAuthor(resultSet.getString("author")); return blog; }, title); } @Override public List<Blog> getByTitle(String title) { // 照顾到有小伙伴不会Lambda表达式,我这里把另一种方案也写出来 return jdbcTemplate.query("select * from article where title = ?", new RowMapper<Blog>() { @Override public Blog mapRow(ResultSet resultSet, int i) throws SQLException { Blog blog = new Blog(); blog.setId(resultSet.getInt("id")); blog.setTitle(resultSet.getString("title")); blog.setAuthor(resultSet.getString("author")); return blog; } }, title); } } 

在这里插入图片描述
在这里插入图片描述

八、删除

删除也是使用 update API,传入你的 SQL 即可

@RestController public class BlogController { @Autowired public BlogService blogService; /** * 通过ID删除文章 * * @param id * @return */ @PostMapping(value = "/deleteById") public Object deleteById(Integer id) { if (null == id || 0 == id.longValue()) { return ResponseUtil.fail(ResultEnums.BAD_ARGUMENT_VALUE.getCode(), "请输入文章id"); } return blogService.deleteById(id); } } @Service public class BlogServiceImpl implements BlogService { @Autowired private JdbcTemplate jdbcTemplate; @Override public Object deleteById(Integer id) { int count = jdbcTemplate.update("delete from article where id=?", id); if (count > 0) { return ResponseUtil.ok("删除成功"); } else { return ResponseUtil.fail(ResultEnums.SERIOUS.getCode(), "删除失败"); } } } 

在这里插入图片描述

更多其他数据访问操作的使用请参考:JdbcTemplate API

彩蛋,很多小伙伴会发现一个问题,项目启动一段时间放那里不动,然后在访问接口时,就会报错,这和我们使用的数据源有关(Hikari),在后面《数据源详解》章节我会教大家如何解决。

九、源码

本文的相关例子可以查看下面仓库中的 chapter4 目录:

  • Gitee:https://gitee.com/hezhiyuan007/spring-boot-study
  • Github:https://github.com/java-fish-0907/spring-boot-study


 

标签:return,ResponseUtil,title,id,blog,源码,SpringBoot2,基础教程,public
来源: https://blog.csdn.net/wangxueying5172/article/details/121393175

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有