一步一步学 Spring Boot 2 (二)

第2章: 集成 MySQL 数据库

本章将介绍MySQL的安装和使用、Spring Boot 集成MySQL数据库、Spring Boot 集成Druid 以及通过实例讲解 Spring Boot 具体的运用。

2.1 MySQL 介绍与安装

数据库类型有很多,比如有MySQL、Oracle这样的关系关系型数据库,又有MongoDB、NoSQL这样的非关系型数据库。本节主要讲解目前项目中运用广泛的关系型数据库MySQL。

2.1.1 MySQL 概述

MySQL是目前项目中运用广泛的关系型数据库。无论在什么样的公司,普通公司也好,互联网公司也好,都运用甚广。MySQL所使用的SQL语言是用于访问数据库的最常用的标准化语言。MySQL软件由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。

2.1.2 MySQL 的安装

MySQL的安装很简单,安装方式也有多种。大家可以到MySQL的官方网站(http://dev.mysql.com/downloads/masql/ )下载MySQL安装软件,按照提示一步一步安装即可。如果电脑中已经有安装MySQL,可以忽略本小节,这里我使用的版本是5.7.17。
安装完成之后,我们需要检验MySQL是否安装成功。具体步骤如下:

  • 步骤01:打开命令行窗口,进入MySQL安装目录,MySQL安装目录是:C:\Program Files\MySQL\MySQL Server 5.7\bin。
  • 步骤02:在命令行窗口输入命令 mysql -uroot -p 和密码登录MySQL,然后输入命令status,出现如图所示的信息,表示安装成功。
    MySQL 安装状态

2.2 集成 MySQL 数据库

Spring Boot 集成MySQL非常简单,因为Spring Boot包含一个功能强大的资源库,借助于Spring Boot 框架,我们可以不用编写原始的访问的数据库的代码,也不用调用JDBC(Java Data Base Connectivity)或者连接池等被称为底层的代码,我们将在更高层次上访问数据库。

2.2.1 引入依赖

集成MySQL数据库之前,我们需要在项目的pom文件中添加MySQL所需的依赖,具体代码如下:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
  • mysql-connector-java:MySQL连接Java的驱动程序
  • spring-boot-starter-jdbc:支持通过JDBC连接数据库。
2.2.2 添加数据库配置

在pom文件中引入MySQL所需的Maven依赖之后,我们需要在application.properties文件中添加如下配置信息:

### mysql 连接信息
spring.datasource.url=jdbc.mysql://localhost:3306/tset
### 用户名
spring.datasource.username=root
### 密码 
spring.datasource.password=123456
### 驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
2.2.3 设计表和实体

配置信息添加完成之后,在MySQL数据库中创建一张表。MySQL安装完成之后,默认有一个test数据库,在test数据库里新建表ay_user.具有建表的SQL语句如下:

-- 如果存在,就删除表
drop table if exists ay_user;
-- 创建表 ay_user 字段 id,name,password
create table ay_user(
id varchar(32) not null comment '主键',
name varchar(10) default null comment '用户名',
password varchar(32) default null comment '密码'
);

数据库表ay_user字段很简单,包括主键id、用户名name和密码password。ay_user表创建好之后,我们往数据库表ay_user中插入两条数据,具体插入数据的SQL语句如下:

-- 方法一:一条一条插入
insert into ay_user (id,name,password) values (1,'阿威',123456);
insert into ay_user (id,name,password) values (2,'猫',123456);
-- 方法二:一次性插入多条
insert into ay_user (id,name,password) values (3,'阿狗',123456),(4,'阿猪',456789),(3,'阿牛',789101112);
-- 查询ay_user 表
select * from ay_user

除了使用SQL语句插入之外,还可以使用Navicat for MySQL客户端插入数据,后面会详细介绍。数据插入成功之后,可在MySQL客户端查询到两条数据,具体如图所示。
创建表ay_user
插入数据
表和数据准备好之后,在项目下的目录(/src/main/java/com.example.demo.model)创建实体类,具体代码如下:

package com.example.demo.model;

public class AyUser {
    //主键
    private String id;
    //用户名
    private String name;
    //密码
    private String password;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

快速生成set、get方法:在类的空白处按Alt + Insert,如图所示:
自动生成set、get方法
至此,数据库表、数据、实体已经全部准备好了。接下来就开始开发测试用例进行测试。

2.3 集成测试

2.3.1 测试用例开发

在项目的单元测试类MySpringBootApplicationTests.java中添加如下代码:

@Resource
public void JdbcTemplate;
//MySQL集成Spring Boot 简单测试

public void mySqlTest(){
    String sql = "select id,name,password from ay_user";
    List<AyUser> userList = (List<AyUser>) jdbcTemplate.query(sql,new RowMapper<AyUser>(){
        @Override
        public AyUser mapRow(ResultSet resultSet,int rowNum) throws
        SQLException {
            AyUser user = new AyUser();
            user.setId(resultSet.getString("id"));
            user.setName(resultSet.getString("name"));
            user.setPassword(resultSet.getString("password"));
            return user;
        }
});
   System.out.println("查询成功:");
   for(AyUser user:userList){
       System.out.println("【id】:"+user.getId()+";【name】:"+user.getName());
   } 
}
  • JdbcTemplate:是一个通过JDBC连接数据库的工具类。2.2节引入了依赖spring-boot-starter-jdbc 中包含了spring-jdbc包,我们可以通过这个工具类对数据库进行增、删、改、查等操作。
  • @Resource:自动注入,通过这个注解,在项目启动之后,Spring Boot会帮助我们实例化一个JdbcTemplate对象,省去初始化工作。
  • query()方法:JdbcTemplate对象中的查询方法,通过传入SQL语句和 RowMapper 对象可以查询出数据库中的数据。
  • RowMapper对象:RowMapper对象可以将查询出的每一行数据封装成用户定义的类,在上面的代码中,通过调用RowMapper中的mapRow方法,将数据库中的每一行数据封装成AyUser对象,并返回。

温馨提示:SQL语句要么全部大写,要么全部小写,不要大小写混用。

2.3.2 测试

单元测试方法开发完成之后,双击方法mySqlTest,右击执行一下单元测试,这时可以在控制台看到打印信息,具体如下:
查询成功:
【id】:1【name】:阿威
【id】:2【name】:猫
【id】:3【name】:阿狗
【id】:4【name】:阿猪
【id】:3【name】:阿牛
在这里插入图片描述
至此,Spring Boot集成MySQL数据库大功告成,这一节的内容简单但是非常重要,之后的章节都是在本节的基础上进行开发的。

2.3.3 Navicat for MySQL 客户端安装与使用

Navicat for MySQL 是连接MySQL 数据库的客户端工具,通过使用该客户端工具方便对数据库进行操作,比如创建数据库表、添加数据等。如果大家已经安装其他的MySQL客户端,可以略过本节。
Navicat for MySQL 的安装也非常简单,大家可以到网上下载安装即可,安装完成之后,打开软件,界面如图所示。
在这里插入图片描述

2.3.4 IntelliJ IDEA 连接 MySQL

除了通过 Navicat for MySQL 客户端连接数据库之外,如果不喜欢在自己电脑上安装一堆软件,我们还可以通过IntelliJ IDEA 来连接MySQL数据库,具体步骤如下:

  • 步骤01:在 IntelliJ IDEA界面中,单击右侧【Database】>【New(+)】>【Data Source】>【MySQL】,在弹出的窗口中输入主机,用户名,密码端口等信息,如图所示:
    在这里插入图片描述
  • 步骤02:单击【Test Connection】测试是否可以连接成功,然后单击【Apply】>【OK】按钮。
  • 步骤02:连接成功之后,我们可以看到如图所示的界面,双击数据库表ay_user,可以看到如图所示的界面。
    在这里插入图片描述
    在这里插入图片描述

成功连接MySQL数据库之后,我们图1可以看见停止数据库、刷新数据库、命令行窗口等按钮,通过这些按钮可以停止和刷新数据库,或者打开命令行编写SQL语句,在图2中,我们可以查询某张表的数据,单击“+”号、“-”号按钮行数据的添加和删除,我可以在Filter criteria输入框中输入 id=‘1’ and name =‘阿威’ 或者 name like '%狗%'and id=‘3’,查询结果如图所示。
在这里插入图片描述
在这里插入图片描述

2.4 集成Druid

2.4.1 Druid 概述

Druid是阿里巴巴开源项目中的一个数据库连接池。Druid是一个JDBC组件,包括三部分:1.DruidDriver 代理 Driver,能够提供基于Filter-Chain模式的插件体系;2.DruidDataSource 高效可管理的数据库连接池;3.SQLParser,支持所有JDBC兼容的数据库,包括Oracle、MySQL、SQL Server等。Durid在监控、可扩展、稳定性和性能方面具有明显的优势,通过其提供的监控功能可以观察数据库连接池和SQL查询的工作情况,使用Druid连接池可以提高数据库的访问性能。

2.4.2 引入依赖

我们在项目的pom文件中继续添加Druid的依赖,具体代码如下:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.4</version>
</dependency>

在这里,我使用的是1.1.4版本,添加完依赖之后,IntelliJ IDEA会自动帮助我们下载依赖包,只要刷新一下依赖即可。

2.4.3 Druid 配置

依赖添加完成之后,在application.properties配置文件中继续添加Druid配置,之前我们已经添加了MySQL的连接url、用户名、密码等配置,application.properties 完整代码如下:

### MySQL连接信息
spring.datasource.url=jdbc:mysql://localhoat:3306/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

### 数据源类别
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
### 初始化大小,最大,最小
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
### 配置获取连接等待超时的时间,单位是毫秒
spring.datasource.maxWait=1000*60
### 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMills=1000*60
### 配置一个连接在池中最小生存时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMills=1000*60*50
spring.datasource.validationQuery=1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
### 打开PSCache,并且指定每一个连接上PSCache的大小
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
### 配置监控统计拦截的filters,去掉后监控界面的SQL无法统计,‘wall’用于防火墙
spring.datasource.filters=stat,wall,log4j
### 通过connectProperties属性来打开mergeSql功能,慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
### 合并多个DruidDataSource的监控数据
spring.datasource.useGlobalDataSourceStat=true

上面每一个配置的含义都有相关的注释,这里要注意的是,在.properties配置文件中,#字符是注释符号。

2.4.4 开启监控功能

开启监控功能的方式有多种:1.使用原生的Servlet、Fileter方式,然后通过@ServletComponentScan启动扫描包进行处理;2.使用Servlet和Filter的方式处理。这里我们选择Spring Boot推荐的第二种方式实现,在项目的Java目录下(/src/main/java/com.example.demo.filter)新建一个配置类DruidConfiguration.java,具体代码如下:

@Configuration
public class DruidConfiguration {
    @Bean
   public ServletRegistrationBean druidStatViewServle(){
       //ServletRegistrationBean提供类的进行注册。
       ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
       //添加初始化参数:initParams
       //添加白名单
       servletRegistrationBean.addInitParameter("allow","127.0.0.1");
       //IP黑名单(存在共同时,deny优先于allow)
       //如果满足deny,就提示:Sorry,you are not permitted to view this page.
        servletRegistrationBean.addInitParameter("deny","192.168.1.73");
       //登录查看信息的账号和密码
       servletRegistrationBean.addInitParameter("loginUsername","admin");
       servletRegistrationBean.addInitParameter("loginPassword","123456");
       //是否能够重置数据
       servletRegistrationBean.addInitParameter("resetEnable","false");
       return servletRegistrationBean;
   }
   @Bean
    public FilterRegistrationBean druidStatFilter(){
       FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
       //添加过滤规则
       filterRegistrationBean.addUrlPatterns("/*");
       //添加需要忽略的格式信息
       filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
       return filterRegistrationBean;
   }
  • @Configuration:Spring中有很多XML配置文件,文件中会配置很多bean。在类上添加@Cenfiguration注释,大家可以理解为该类变成一个XML配置文件。
  • @Bean:等同于XML配置文件中的 配置。Spring Boot会把加上该注解方法的返回值装载进Spring IoC容器,方法的名称对应标签的id属性值。具体代码如下:
@Bean
public FilterRegistrationBean druidStatFilter(){
     FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
     return filterRegistrationBean;
}

等同于

<bean id="druidStatFilter" class=
    "org.springframework.boot.web.servlet.ServletRegistrationBean">
</bean>

类ServletRegistrationBean和FilterRegistrationBean:在DruidConfiguration.java配置文件中,我们配置了两个类,即druidStatViewServlet和druidStatFilter,并且用过注册类ServletRegistrationBean和FilterRegistrationBean实现Servlet和Filter类的注册。
在druidStatViewServlet类中,我们设定了访问数据库的白名单、黑名单、登录用户名和密码等信息。在druidStatFilter类中,我们设定了过滤器的规则和需要忽略的格式。至此,配置类开发完成。

2.4.5 测试

在DruidConfiguration.java类开发完成之后,重新启动一下项目,然后通过访问网址(http://localhost:8080/druid/login.html)打开监控的登录界面,如图所示。
在这里插入图片描述
在这里插入图片描述
在Druid的监控界面中,我们可以对数据源、SQLWeb应用等进行监控。

猜你喜欢

转载自blog.csdn.net/qq_43791614/article/details/108299787