第2章 集成MySQL数据库

开心一笑

【老师批评小明说:昨天你画的饺子,今天又画饺子,你就不能换个样吗?
小明委屈的说:老师,我换了啊,馅是不一样的。
老师:。。。滚!】

新书购买

戳图购买 >>>

2.1 MySQL介绍与安装

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

2.1.1 MySQL概述

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

2.1.2 MySQL安装

MySQL的安装很简单,安装方式也有多种。大家可以到MySQL的官网https://dev.mysql.com/downloads/mysql/ 去下载MySQL安装软件,并安装提示一步一步安装即可。如果电脑已经安装MySQL,可略过此节。本书使用的MySQL版本为5.7.17。
安装完成之后,我们需要检验MySQL安装是否成功。具体步骤如下:
打开命令行窗口,进入MySQL安装目录,我的MqSQL安装目录是C:\Program Files\MySQL\MySQL Server 5.7\bin。
在命令行窗口中输入命令mysql -uroot -p 和密码登陆MySQL,然后再输入命令status出现如图2-1所示信息,表示安装成功。

第2章 集成MySQL数据库_第1张图片
图2-1 MySQL安装状态

2.2 集成MySQL数据库

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

2.2.1 引入依赖

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


     mysql
     mysql-connector-java


		org.springframework.boot
		spring-boot-starter-jdbc
	

mysql-connector-java:mysql连接java的驱动程序。
spring-boot-starter-jdbc:支持通过JDBC连接数据库。

2.2.2 添加数据库配置

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

### mysql连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC
###用户名
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语句如下:

-- ----------------------------
-- 用户表
-- Table structure for ay_user
-- ----------------------------
DROP TABLE IF EXISTS `ay_user`;
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');

除了使用SQL语句插入之外,还可以使用Navicat for MySql客户端插入数据,下一节会详细介绍。数据插入成功之后,可在MySQL客户端查询到两条数据,具体如图2-2、2-3所示。

在这里插入图片描述
图2-2 创建表ay_user 图2-3 插入2条数据

表和数据准备好之后,我们在项目的目录下(/src/main/java/com.example.demo.model)新建实体类,具体代码如下:

/**
 * 描述:用户表
 * @Author 阿毅
 * @date   2017/10/8.
 */
public class AyUser {
    
    //主键
    private String id;
    //用户名
    private String name;
    //密码
    private String password;

    //此处省略set 、get方法
}

至此,数据库表、数据、实体我们已经全部准备好了。接下来就是开发测试用例进行测试了。

2.3 集成测试

2.3.1 测试用例开发

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

@Resource
	private JdbcTemplate jdbcTemplate;
	/**
	 * Mysql集成Spring Boot简单测试
 */
	@Test
	public void mySqlTest(){
		String sql = "select id,name,password from ay_user";
		List userList =
		(List) jdbcTemplate.query(sql, new RowMapper(){
			@Override
			public AyUser mapRow(ResultSet rs, int rowNum) throws SQLException {
				AyUser user = new AyUser();
				user.setId(rs.getString("id"));
				user.setName(rs.getString("name"));
				user.setPassword(rs.getString("password"));
				return user;
			}
		});
		System.out.println("查询成功:");
		for(AyUser user:userList){
		   System.out.println("【id】: " + user.getId() + ";【name】: " + user.getName());
		}
	}

JdbcTemplate:是一个通过JDBC连接数据库的工具类。上一节我们引入依赖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】: 阿兰

至此,Spring Boot集成MySQL数据库大功告成,这一节的内容简单但是非常重要,之后的章节都是在本节的基础上进行开发的。

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

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

第2章 集成MySQL数据库_第2张图片
图2-4 创建表ay_user

我们可以通过【查询】→【新建查询】,在弹出的窗口中编写相关的查询语句,来查询数据。当然还有很多的操作,大家可以自己去使用和掌握它,这里就不一一描述了。

2.3.4 Intellij IDEA连接MySql

除了通过Navicat for MySQL客户端连接数据库之外,如果我们不喜欢在自己的电脑安装一堆软件的话,我们还可以通过Intellij IDEA来连接MySQL数据库。具体步骤如下:
在Intellij IDEA中,点击右侧的【Database】→【New(加号)】→【Data Source】→【MySQL】,在弹出的窗口中输入主机、用户名、密码、端口等信息,如图2-5所示。

第2章 集成MySQL数据库_第3张图片
图2-5 Intellij IDEA连接MySQL

点击【Test Connection】测试是否可以连接成功,然后点击【Apply】→【OK】。

连接成功之后,我们可以看到如图2-6所示的界面,【双击】数据库表ay_user,可以看到如图2-7所示的界面。

第2章 集成MySQL数据库_第4张图片
图2-6 连接MySQL成功界面 图2-7 双击表ay_user界面

成功连接MySQL数据库之后,我们可以在图2-6中看到停止数据库、刷新数据库、命令行窗口等按钮,通过这些按钮我们可以停止和刷新数据库,或者打开命令行窗口编写SQL语句。在图2-7中,我们可以查询某张表的数据,点击 + 号、- 号按钮进行数据的添加和删除,还可以在Filter criteria输入框中编写过滤条件,搜索出我们所需要的数据。比如在Filter criteria输入框中输入 id = ‘1’ and name = ‘阿毅’ 或者 name like ‘%兰%’ and id = ‘2’,查询结果如图2-8和2-9所示。

在这里插入图片描述
图2-8 连接MySQL成功界面 图2-9 连接MySQL成功界面

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文件继续添加durid的依赖,具体代码如下:


		com.alibaba
		druid
		1.1.4	

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

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

### mysql连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1: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=60000
### 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
### 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 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,Filter方式,然后通过@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。在类上添加@Configuration注解,大家可以理解为该类变成一个XML配置文件。
@Bean:等同于XML配置文件中的配置。Spring Boot会把加上该注解的方法的返回值装载进Spring IoC容器,方法的名称对应标签的id属性值。具体代码如下:

@Bean
public FilterRegistrationBean druidStatFilter(){
      FilterRegistrationBean filterRegistrationBean
                            = new FilterRegistrationBean(new WebStatFilter());
      return filterRegistrationBean;
}

等同于:



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

2.4.4 测试

在DruidConfiguration.java类开发完成之后,我们重新启动下项目,然后通过访问网址http://localhost:8080/druid/index.html打开监控的登陆界面,如图2-10所示。在登陆界面中输入用户名:admin,密码:123456,即可登陆成功,如图2-11所示。

第2章 集成MySQL数据库_第5张图片
图2-10 Druid监控登陆界面 图2-11 Druid登陆成功界面
在Druid的监控界面中,我们就可以对数据源、SQL、Web应用等进行监控。


读书感悟

来自《日用器具进化史》

  • 要接受凡事皆有缺点,无论是大头针、桥梁还是电脑,每项工具多多少少都有改善空间,这也正是革新的力量。
  • 继续存在形式 (survival form) 的重要性:在全新且可能是重大改变的形式中,需要存在有熟悉的式样。因此设计往往需要在「创新增加购买兴趣」和「保留令人安心熟悉的要素」之间找到微妙的平衡点
  • 罐头开罐器、拉环、啤酒瓶盖都是经历漫长迭代的结果,大多数时候,解决方案总比问题来得晚,因此不要急,不要试图苛求完美。
  • 环保绝对不是个道德问题,甚至不是个制度问题,而是个复杂的经济问题。

经典故事

一只狼出去找食物,偶然经过一户人家,听到小孩哭声,接着又听见老太婆的声音:“别哭了,再哭就把你扔出去喂狼。”狼一听心中大喜,便蹲在墙角等着,谁知等到天黑也不见把小孩扔出来。晚上狼等得不耐烦了,就想伺机而入。却又听到老太婆说:“快睡吧,别怕,狼来了,咱们就把它杀死煮了吃。”狼吓得一溜烟跑回了窝。同伴问它收获怎样,它沮丧地说:“别提了,老太婆说话不算数,害得我饿了一天,后来幸亏我跑得快。”
【生活中,听人说话得看人看事,听真实些。别把人家的信口开河当成真话,很多时候人家只不过是拿你说事而已。不要为一句廉价的赞语而如坠雾里,迷失自己;也不要为一句盲目的指责而畏首畏尾,改变航向。】


大神文章


其他

如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎鼓励,点赞、顶、欢迎留下宝贵的意见、多谢支持!

你可能感兴趣的:(一步一步学SpringBoot)