02 - SpringBoot中级

本章目录

  1. SpringBoot整合JdbcTemplate
  2. SpringBoot整合MyBatis
  3. SpringBoot整合MyBatis-Plus
  4. 分页插件的集成

1.0 SpringBoot整合JdbcTemplate

Spring Framework对数据库的操作在JDBC上面做了深层次的封装,通过依赖注入功能,可以将 DataSource 注册到JdbcTemplate之中,使我们可以轻易的完成对象关系映射,并有助于规避常见的错误,在SpringBoot中我们可以很轻松的使用它。

特点:

  • 速度快,对比其它的ORM框架而言,JDBC的方式无异于是最快的
  • 配置简单,Spring自家出品,几乎没有额外配置
  • 学习成本低,毕竟JDBC是基础知识,JdbcTemplate更像是一个DBUtils

1.1 整合JdbcTemplate

在 pom.xml 中添加对 JdbcTemplate 的依赖

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>

application.properties中添加如下配置。值得注意的是,SpringBoot默认会自动配置DataSource,它将优先采用HikariCP连接池,如果没有该依赖的情况则选取tomcat-jdbc,如果前两者都不可用最后选取Commons DBCP2通过spring.datasource.type属性可以指定其它种类的连接池

# 数据源
spring:datasource:url: jdbc:mysql:///boot?useUnicode=true&characterEncoding=UTF-8driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword:

启动项目,通过日志,可以看到默认情况下注入的是HikariDataSource

2022-11-16 09:14:46.329  INFO 16472 --- [           main] com.xja.Day03Application                 : Starting Day03Application using Java 1.8.0_201 on DESKTOP-TTS40QH with PID 16472 (E:\课程记录\T6\03-SpringBoot整合\day03\target\classes started by lenovo in E:\课程记录\T6\03-SpringBoot整合\day03)
2022-11-16 09:14:46.336  INFO 16472 --- [           main] com.xja.Day03Application                 : No active profile set, falling back to 1 default profile: "default"
2022-11-16 09:14:47.614  INFO 16472 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JDBC repositories in DEFAULT mode.
2022-11-16 09:14:47.624  INFO 16472 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 5 ms. Found 0 JDBC repository interfaces.
2022-11-16 09:14:48.329  INFO 16472 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2022-11-16 09:14:48.342  INFO 16472 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2022-11-16 09:14:48.342  INFO 16472 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.68]
2022-11-16 09:14:48.559  INFO 16472 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2022-11-16 09:14:48.560  INFO 16472 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2156 ms
2022-11-16 09:14:48.977  WARN 16472 --- [           main] ion$DefaultTemplateResolverConfiguration : Cannot find template location: classpath:/templates/ (please add some templates, check your Thymeleaf configuration, or set spring.thymeleaf.check-template-location=false)
2022-11-16 09:14:49.090  INFO 16472 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2022-11-16 09:14:49.283  INFO 16472 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2022-11-16 09:14:49.586  INFO 16472 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2022-11-16 09:14:49.596  INFO 16472 --- [           main] com.xja.Day03Application                 : Started Day03Application in 4.047 seconds (JVM running for 7.288)

1.2 案例测试

创建一张 t_user 的表

CREATE TABLE `student` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`age` int(1) DEFAULT NULL,`description` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

实体类

package com.xja.entity;import lombok.Data;@Data
public class Student {private Integer id;private String name;private int age;private String description;
}

控制层

package com.xja.controller;
import java.util.List;@Controller
@RequestMapping("/student")
public class StudentController {@Autowiredprivate StudentService studentService;/*** 查询*/@RequestMapping("queryStudentList")public String queryStudentList(Model model){List<Student> list = studentService.queryStudentList();model.addAttribute("list",list);return "student_list";}/*** 增加跳转*/@RequestMapping("/toAdd")public String toAdd(){return  "student_add";}/*** 增加*/@RequestMapping("/saveStudent")public String saveStudent(Student student){studentService.saveStudent(student);return "redirect:/student/queryStudentList";}@RequestMapping("/deleteStudent")public String deleteStudent(Integer id){studentService.deleteStudent(id);return "redirect:/student/queryStudentList";}
}

业务层省略->持久化层

package com.xja.dao;
import java.util.List;@Repository //老实持久层的标记 同 @Controller @Service 一起的
public class StudentDao {@Autowiredprivate JdbcTemplate jdbcTemplate;public List<Student> queryStudentList() {String sql = "select * from student";List<Student> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Student.class));return list;}//单个对象  queryForObjectpublic void saveStudent(Student student) {String sql = "insert into student (name,age,description) value (?,?,?)";jdbcTemplate.update(sql,student.getName(),student.getAge(),student.getDescription());}public void deleteStudent(Integer id) {String sql = "delete from student where id = ?";jdbcTemplate.update(sql,id);}
}

查询页面

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Title</title><link rel="stylesheet" th:href="@{/css/bootstrap.min.css}"><script type="text/javascript" th:src="@{/js/jquery-3.6.0.js}"></script><script type="text/javascript" th:src="@{/js/bootstrap.min.js}"></script><script>$(function () {$("#save").click(function () {window.location = "toAdd";})})function deletes(id){alert(id);}</script>
</head>
<body><button class="btn btn-success" id="save">增加</button><table class="table table-bordered" style="width: 800px"><tr><th>序号</th><th>姓名</th><th>年龄</th><th>描述</th><th>操作</th></tr><tr th:each="stu,i:${list}"><td th:text="${i.count}"></td><td th:text="${stu.name}"></td><td th:text="${stu.age}"></td><td th:text="${stu.description}"></td><td><button class="btn btn-sm btn-danger" th:onclick="|deletes(${stu.id})|">删除</button><a th:href="|deleteStudent?id=${stu.id}|">删除</a></td></tr></table>
</body>
</html>

效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xZxCmMa8-1668683830489)(images/TlVz6Nv0enOIGdLDmJuhCqSw5wT8yWjQeeEQUJzQ52Q.png)]

2.0 SpringBoot整合MyBatis

2.1 构建项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S9FRi8Y3-1668683830490)(images/xJRg9_mqMAmy3TfT8a_Nx9tJfHK4uXdZ9OKa-rmQew0.png)]

启动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wfvH9w6G-1668683830491)(images/MwKissBG6NwU_kQ26aRj3RfNsSBr5It6PVsxiCqc_x0.png)]

原因:没有配置数据源

# 数据源
spring:datasource:url: jdbc:mysql:///boot?useUnicode=true&characterEncoding=UTF-8driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword:type: com.zaxxer.hikari.HikariDataSourcehikari:# 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 默认:30秒connection-timeout: 30000# 最小连接数minimum-idle: 5# 最大连接数maximum-pool-size: 20# 事务自动提交auto-commit: true# 连接超时的最大时长(毫秒),超时则被释放(retired),默认:10分钟idle-timeout: 600000# 连接池名字pool-name: DateSourceHikariCP# 连接的生命时长(毫秒),超时而且没被使用则被释放(retired),默认:30分钟 1800000msmax-lifetime: 1800000#配置
mybatis:type-aliases-package: com.xja.entity#如果文件接口和mapper名字及路径都相同则可以省略,否则加上mapper-locations: classpath*:/mapper/*.xml

dao 转化为 mapper

@Mapper
public interface StudentMapper {List<Student> queryStudentList();void saveStudent(Student student);void deleteStudent(Integer id);
}

mapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xja.mapper.StudentMapper"><insert id="saveStudent" parameterType="com.xja.entity.Student">insert into student (name,age,description) value (#{name},#{age},#{description})</insert><delete id="deleteStudent" parameterType="integer">delete from student where id = #{id}</delete><select id="queryStudentList" resultType="com.xja.entity.Student">select * from student</select>
</mapper>

3.0 SpringBoot整合MyBatis-Plus

https://baomidou.com/

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LfZ9sg8l-1668683830492)(images/_ZAh4lELV0uvYCX7eg_uymLDb0A7h8sVdhKvftuB0fc.png)]

依赖 mybatis plus 部分依赖

<!-- mp -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.1</version>
</dependency>
<!-- 代码生成工具 -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.4.1</version>
</dependency>
<!-- 代码生成模板 -->
<dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.2</version>
</dependency>

代码生成器

office

配置文件

# 数据源
spring:datasource:url: jdbc:mysql:///boot?useUnicode=true&characterEncoding=UTF-8driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword:type: com.zaxxer.hikari.HikariDataSourcehikari:# 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 默认:30秒connection-timeout: 30000# 最小连接数minimum-idle: 5# 最大连接数maximum-pool-size: 20# 事务自动提交auto-commit: true# 连接超时的最大时长(毫秒),超时则被释放(retired),默认:10分钟idle-timeout: 600000# 连接池名字pool-name: DateSourceHikariCP# 连接的生命时长(毫秒),超时而且没被使用则被释放(retired),默认:30分钟 1800000msmax-lifetime: 1800000#添加mybatis-plus配置
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印SQL执行详情type-aliases-package: com.xja.entity

SpringBoot中级相关推荐

  1. SpringBoot拦截器_初级程序猿→中级程序猿必经之路_一蓑烟雨任平生

    文章目录 前言 一.拦截器原理 二.拦截器的快速使用步骤 1.定义拦截器 2.配置拦截器 三 .解决问题 1.解决静态资源被拦截问题 2.拦截器使用实例 2.取消拦截操作(自定义注解) 总结 前言 刚 ...

  2. 一套基于 SpringBoot 的完整高并发电商系统,拿去面试简直不要太好用!

    如何反驳"99% 的 Java 程序员都是 Spring 程序员"这句话? 答案是不能. 互联网发展至今,站在巨人肩膀上编程像一日三餐一样寻常.Spring Boot 的确凭一己之 ...

  3. SpringBoot 操作 ElasticSearch 详解(万字长文)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:超级小豆丁 http://www.mydlq.club/ar ...

  4. springboot 单例_如何实现一个单例及优化

    前言 社长,一个爱学习,爱分享的程序猿,始终相信,付出总会有回报的. 知识改变命运,学习成就未来.爱拼才会赢! 程序猿学社的GitHub,已整理成相关技术专刊,欢迎 Star:. https:// g ...

  5. springboot实体映射到数据库_SpringBoot 操作 ElasticSearch 详解

    点击上方☝SpringForAll社区 轻松关注!及时获取有趣有料的技术文章 本文来源:http://www.mydlq.club/article/64/ 一.ElasticSearch 简介 . 1 ...

  6. SpringBoot整合银联支付

    看完不懂你来喷我 项目需要接入新的支付渠道:银联无跳转支付,花了点时间接入成功,这里发布一个踩坑记录吧,把过程中的问题都会给大家分享下QAQ,看完不懂你来喷我o(╯□╰)o 博客中有接入其他支付 支付 ...

  7. 基于Java+SpringBoot+Vue+uniapp前后端分离图书阅读系统设计与实现

    博主介绍:✌全网粉丝3W+,全栈开发工程师,从事多年软件开发,在大厂呆过.持有软件中级.六级等证书.可提供微服务项目搭建.毕业项目实战.项目定制✌ 博主作品:<微服务实战>专栏是本人的实战 ...

  8. MySql从入门到中级到事务

    目录 入门操作 中级操作 事务 1.事务的定义 2.例子入门 3.事务初体验 springboot初识事务 1.不使用事务 2.添加事务 @Transactional常用参数 入门操作 建立数据库 c ...

  9. 基于Java+SpringBoot+Vue前后端分离商城系统设计与实现

    博主介绍:✌全网粉丝3W+,全栈开发工程师,从事多年软件开发,在大厂呆过.持有软件中级.六级等证书.可提供微服务项目搭建与毕业项目实战.定制.远程✌ 博主作品:<微服务实战>专栏是本人的实 ...

最新文章

  1. 如何datagrid分页保持每页先前选择的checkbox的状态?
  2. VMware Server使用经验记录
  3. CentOS 7 使用Google-Authenticator进行多因素认证
  4. NET 提供了执行异步操作的三种模式
  5. neu坐标系和xyz坐标系转换_ArcGIS投影坐标系下坐标转换成地理坐标系经纬度
  6. oracle 存储过程导出sql语句 导出为文件
  7. 网易有道词典 怎么在 pdf 上取词翻译
  8. python清明节作业
  9. 如何实现在直播中播放音频文件
  10. jvm调优五:jvm调优工具和调优实战
  11. 【BSV动态】VXPASS与世卫组织合作为莱索托提供数字疫苗监测服务
  12. 批量作业调度工具 Taskctl 定时器及模块之间的区别
  13. dayjs 中文文档
  14. php 获取 知乎,php - 如何获取知乎日报里的图片?
  15. basemap生成地图散点图
  16. 可以在手机制作游戏的软件
  17. 常用python组件包
  18. 医药生物行业深度报告:医药高端制造系列报告一,中国制造崛起,特色原料药受益显著(20210103).PDF
  19. NLP自然语言处理入门学习笔记(一)
  20. 蔡崇信:我为什么敢放弃580万年薪 拿月薪500跟马云

热门文章

  1. 初级会计难吗,用不用报班,自学可以吗?速看!
  2. dht11温湿度传感器特点及使用介绍
  3. 27 种确定性预测评估指标(Python实现)
  4. 全国专业技术人员计算机应用能力考试广东,广东省人事厅关于全国专业技术人员计算机应用能力考试扩充科目(模块)有关问题的通知...
  5. 关于数据库的表如何删除空行
  6. Python核心编程(一)
  7. fjksldajfmlsdmfldsalf;md;lsfml;sdmfl;sad
  8. CMake安装或CMake Error at CMakeLists
  9. SinoBBD承德德鸣3号楼数据中心获CQC最高等级机房认证
  10. 2019年下半年教师资格中学《教育知识与能力》真题与参考答案