【SpringBoot 2】(十)数据库相关

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【SpringBoot 2】(十)数据库相关

1 数据库连接

1.1 配置数据库连接信息

 如果想要使用数据库连接池连接数据库进行SQL操作的话,在SpringBoot中需要经过如下三个步骤:

第一步: 导入jdbc开发的启动场景


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>


第二步: 导入数据库驱动

 之所以框架底层没有自动导入数据库的驱动,是因为不同的数据库使用的驱动不同,这需要用户根据自己的需要来进行选择。虽然框架没有对指定数据库驱动进行自动导入,但是对不同数据库驱动的版本都进行了版本仲裁,也就是说我们可以直接导入无需定义版本号。当然也可以自定义版本号,maven会根据自身的就近依赖原则导入自定义的版本


<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.32</version>
</dependency>


第三步: 配置数据库连接的配置文件


# 设置数据库

spr

ing:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: "123456"


1.2 整合Druid数据源

 SpringBoot框架中默认使用的是Hikari数据源,这也就意味着如果要是想要修改数据源的话,无非就是两种方法:自定义配置类、引入相应的启动器依赖再配置配置文件


第一步: 引入Druid的启动器依赖


<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.17</version>
</dependency>


第二步: 配置配置文件(选学,框架一般都有默认的配置)


spring:
  datasource:
    url: jdbc:mysql://localhost:3306/db_account
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
    druid:
      aop-patterns: com.atguigu.admin.*  #监控SpringBean
      filters: stat,wall     # 底层开启功能,stat(sql监控),wall(防火墙)
      stat-view-servlet:   # 配置监控页功能
        enabled: true
        login-username: admin
        login-password: admin
        resetEnable: false
      web-stat-filter:  # 监控web
        enabled: true
        urlPattern: /*
        exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
      filter:
        stat:    # 对上面filters里面的stat的详细配置
          slow-sql-millis: 1000
          logSlowSql: true
          enabled: true
        wall:
          enabled: true
          config:
            drop-table-allow: false


2 SpringBoot整合MyBatis

 mybatis开发的时候有两种开发模式:使用配置文件进行开发、纯注解开发,二者各有优点。使用配置文件进行开发在处理更加复杂的SQL语句的时候逻辑更加清晰,纯注解开发比较适合简单的SQL语句,于是我们可以在开发的时候混合使用两种方法,这样可以大大提升开发效率。


2.1 配置文件开发

第一步: 引入启动器依赖

 小知识:SpringBoot官方的所有技术启动器的命名都是spring-boot-starter-xxx而第三方技术的启动器命名则是xxx-spring-boot-starter。值得注意的是:MyBatis的启动器内部引用了dbc开发的启动场景,所以无需重复引用


<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.4</version>
</dependency>


第二步: 编写mapper接口并标注@Mapper注解


@Mapper
public interface StuMapper {
    Stu queryBySid(int sid);
}


第三步: 编写映射文件并绑定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.xiaochen.mapper.StuMapper">
    <select id="queryBySid" resultType="com.xiaochen.domain.Stu">
        select * from stu where sid=#{sid}
    </select>
</mapper>


第四步: 在配置文件中指定之前MyBatis配置文件的各种信息


# mybatis的所有配置
mybatis:
  mapper-locations: classpath:com.xiaochen.mapper/*.xml
  # 所有的全局配置文件的配置项在这下面配置
  configuration:
    # 开启驼峰命名数据库中字段值的下划线‘_’加字母会被认为是大写
    map-underscore-to-camel-case: true


2.2 纯注解开发

第一步: 引入启动器依赖


<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.4</version>
</dependency>


第二步: 编写mapper接口并标注@Mapper注解,使用对应的注解进行SQL语句操作


@Mapper
public interface StuMapper {
    @Select("select * from stu where sid=#{sid}")
    Stu queryBySid(int sid);
}


3 SpringBoot整合MyBatis-Plus

3.1 普通的CRUD方法

 MyBatis-plus的启动器内部不止引用了dbc开发的启动场景,还导入了MyBatis的启动器,所以这两个都无需再重复引用

第一步: 引入启动器依赖


<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.1</version>
</dependency>


mapper层:


 编写mapper接口标注@Mapper注解,并继承BaseMapper类。这是MyBatis-plus的独有方式,这样做的好处是继承之后直接使用父类中已经写好的简单CRUD方法,但是一些复杂的SQL业务还是需要使用映射文件来实现的,进一步提高了代码开发的效率


@Mapper
public interface StuMapper extends BaseMapper<Stu> {
}


 MyBatis-plus进行数据库表的增删改查的时候,默认把继承BaseMapper类时传进去的泛型名称当做表名去查找,如果泛型与数据库中的表名不对应的话,可以在实体类使用注解标识,除此之外注解还可以用来标识主键和非表中字段属性


@NoArgsConstructor
@AllArgsConstructor
@Data
@TableName("stu")
public class Stu {
    // 表名该字段是定义的临时变量,并不存在于数据库的表中
    @TableField(exist = false)
    private String gender;
    // 标明表的主键
    @TableId
    private int sid;
    private String sname;
    private String age;
    private String course;
    private int cardid;
}


 编写映射文件并绑定mapper接口(如果有的话)。MyBatis-plus自动配置好了默认的mapper-locations,也就是映射文件的存放位置为classpath:/mapper/**/*.xml,于是我们就按照它的默认规则在静态资源路径下mapper文件夹下。本案例中没有映射文件,于是就不创建


 如果有需要的话,还可以在配置文件中指定MyBatis-plus配置文件的各种信息


service层:

 service接口继承IService类


public interface StuService extends IService<Stu> {
}


 service的实现类先是继承ServiceImpl并传两个泛型(mapper接口,实体类),然后实现service接口


@Service
public class StuServiceImpl extends ServiceImpl<StuMapper, Stu> implements StuService {
}


controller层: 直接使用service继承类的简单方法


@Controller
public class TableController {
    @Autowired
    StuServiceImpl stuService;
    /**
     * 点击Advanced table按钮,进行页面转发,并携带一个表格数据
     * @param model 用于存储数据
     * @return 页面转发forward 到 /table/dynamic_table.html
     */
    @GetMapping("/dynamic_table")
    public String dynamic_table(Model model) {
        // 从数据库中查出user表进行展示
        List<Stu> list = stuService.list();
        model.addAttribute("stus", list);
        return "/table/dynamic_table";
    }
}


3.2 MyBatis-plus的分页实现

 MyBatis-plus的分页功能实现需要先自定义一个配置类,向容器中注册一个Interceptor


@Configuration
public class MyBatisConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
        paginationInnerInterceptor.setOverflow(true);
        paginationInnerInterceptor.setMaxLimit(500L);
        interceptor.addInnerInterceptor(paginationInnerInterceptor);
        return interceptor;
    }
}


然后就可以像普通的CRUD操作一样,直接使用service继承类的分页的相关方法即可


@GetMapping("/dynamic_table")
public String dynamic_table(@RequestParam(value = "pn", defaultValue = "1")Integer pn,  Model model) {
    // 分页从数据库中查出stu表的所有数据,当前页、总页数、总条数……
    Page<Stu> stuPage = new Page<>(pn, 1);
    Page<Stu> page = stuService.page(stuPage);
    model.addAttribute("page", page);
    return "/table/dynamic_table";
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
26天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的冬奥会科普平台设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
45 0
|
26天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生体质测试管理系统设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
38 2
|
26天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生就业服务平台设计与实现(系统源码+文档+数据库+部署等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
67 6
|
26天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue的班级综合测评管理系统设计与实现(系统源码+文档+数据库+部署等)
✌免费选题、功能需求设计、任务书、开题报告、中期检查、程序功能实现、论文辅导、论文降重、答辩PPT辅导、会议视频一对一讲解代码等✌
40 4
|
30天前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
55 2
|
3月前
|
Java 关系型数据库 数据库连接
使用 Spring Boot 执行数据库操作:全面指南
使用 Spring Boot 执行数据库操作:全面指南
312 1
|
3月前
|
Java 数据库连接 测试技术
SpringBoot入门 - 添加内存数据库H2
SpringBoot入门 - 添加内存数据库H2
148 3
SpringBoot入门 - 添加内存数据库H2
|
SQL 缓存 监控
SpringBoot 整合 数据库连接池(Druid、HicariCP、C3P0等等)
SpringBoot 整合 数据库连接池(Druid、HicariCP、C3P0等等)保姆级教程超详细,Druid配置信息等等。
3137 0
SpringBoot 整合 数据库连接池(Druid、HicariCP、C3P0等等)
|
26天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的留守儿童爱心网站设计与实现(计算机毕设项目实战+源码+文档)
博主是一位全网粉丝超过100万的CSDN特邀作者、博客专家,专注于Java、Python、PHP等技术领域。提供SpringBoot、Vue、HTML、Uniapp、PHP、Python、NodeJS、爬虫、数据可视化等技术服务,涵盖免费选题、功能设计、开题报告、论文辅导、答辩PPT等。系统采用SpringBoot后端框架和Vue前端框架,确保高效开发与良好用户体验。所有代码由博主亲自开发,并提供全程录音录屏讲解服务,保障学习效果。欢迎点赞、收藏、关注、评论,获取更多精品案例源码。
61 10
|
26天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的家政服务管理平台设计与实现(计算机毕设项目实战+源码+文档)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
46 8