【老师批评小明说:昨天你画的饺子,今天又画饺子,你就不能换个样吗?
小明委屈的说:老师,我换了啊,馅是不一样的。
老师:。。。滚!】
数据库类型有很多,比如像MySQL、Oracel这样的关系型数据库,又比如像MongoDB、NoSQL这样的非关系型数据库。本节主要讲解目前项目中运用广泛的关系型数据库MySQL。
MySQL是目前项目中运用广泛的关系型数据库。无论在什么样的公司,普通公司也好,互联网公司也好,都运用甚广。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL软件由于其体积小、速度快、总体拥有成本低,尤其是开发源码这一特点,一般中小型网站的开发都选择 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所示信息,表示安装成功。
Spring Boot集成MySQL非常简单,因为Spring Boot包含一个功能强大的资源库。借助于Spring Boot框架,我们可以不用编写原始的访问数据库的代码,也不用调用JDBC(Java Data Base Connectivity)或者连接池等诸如此类的被称为底层的代码,我们将在更高级的层次上访问数据库。
集成MySQL数据库之前,我们需要在项目中的pom文件添加MySQL所需的依赖,具体代码如下:
mysql
mysql-connector-java
org.springframework.boot
spring-boot-starter-jdbc
mysql-connector-java:mysql连接java的驱动程序。
spring-boot-starter-jdbc:支持通过JDBC连接数据库。
在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
配置信息添加完成之后,我们在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所示。
表和数据准备好之后,我们在项目的目录下(/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方法
}
至此,数据库表、数据、实体我们已经全部准备好了。接下来就是开发测试用例进行测试了。
我们在项目的单元测试类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语句要么全部大写,要么全部小写,不要大小写混用哦。
单元测试方法开发完成之后,我们双击方法mySqlTest,右键执行下单元测试,这时我们可以在控制台看到打印信息,具体如下:
查询成功:
【id】: 1;【name】: 阿毅
【id】: 2;【name】: 阿兰
至此,Spring Boot集成MySQL数据库大功告成,这一节的内容简单但是非常重要,之后的章节都是在本节的基础上进行开发的。
Navicat for MySQL是连接MySQL数据库的客户端工具,通过使用该客户端工具,方便我们对数据库进行操作,比如建数据库表、添加数据等。如果大家已经安装其它的MySQL客户端,可以略过本节。
Navicat for MySQL的安装也非常简单,大家可以到网上下载安装即可。安装完成之后,我们打开软件,如图2-4所示。
我们可以通过【查询】→【新建查询】,在弹出的窗口中编写相关的查询语句,来查询数据。当然还有很多的操作,大家可以自己去使用和掌握它,这里就不一一描述了。
除了通过Navicat for MySQL客户端连接数据库之外,如果我们不喜欢在自己的电脑安装一堆软件的话,我们还可以通过Intellij IDEA来连接MySQL数据库。具体步骤如下:
在Intellij IDEA中,点击右侧的【Database】→【New(加号)】→【Data Source】→【MySQL】,在弹出的窗口中输入主机、用户名、密码、端口等信息,如图2-5所示。
点击【Test Connection】测试是否可以连接成功,然后点击【Apply】→【OK】。
连接成功之后,我们可以看到如图2-6所示的界面,【双击】数据库表ay_user,可以看到如图2-7所示的界面。
图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成功界面
Druid是阿里巴巴开源项目中的一个 型数据库连接池。Druid是一个JDBC组件,它包括三部分:1)DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。2)DruidDataSource 高效可管理的数据库连接池。3)SQLParser。它支持所有JDBC兼容的数据库,包括Oracle、MySQL、SQL Server等。Durid在监控、可扩展、稳定性和性能方面具有明显的优势。通过其提供的监控功能,可以实现观察数据库连接池和SQL查询的工作情况。使用Druid连接池,可以提高数据库的访问性能。
我们在项目中的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配置文件中,# 字符是注释符号。
开启监控功能的方式有多种: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类中,我们设定了过滤的规则和需要忽略的格式。至此,我们的配置类开发完成。
在DruidConfiguration.java类开发完成之后,我们重新启动下项目,然后通过访问网址http://localhost:8080/druid/index.html打开监控的登陆界面,如图2-10所示。在登陆界面中输入用户名:admin,密码:123456,即可登陆成功,如图2-11所示。
图2-10 Druid监控登陆界面 图2-11 Druid登陆成功界面
在Druid的监控界面中,我们就可以对数据源、SQL、Web应用等进行监控。
来自《日用器具进化史》
一只狼出去找食物,偶然经过一户人家,听到小孩哭声,接着又听见老太婆的声音:“别哭了,再哭就把你扔出去喂狼。”狼一听心中大喜,便蹲在墙角等着,谁知等到天黑也不见把小孩扔出来。晚上狼等得不耐烦了,就想伺机而入。却又听到老太婆说:“快睡吧,别怕,狼来了,咱们就把它杀死煮了吃。”狼吓得一溜烟跑回了窝。同伴问它收获怎样,它沮丧地说:“别提了,老太婆说话不算数,害得我饿了一天,后来幸亏我跑得快。”
【生活中,听人说话得看人看事,听真实些。别把人家的信口开河当成真话,很多时候人家只不过是拿你说事而已。不要为一句廉价的赞语而如坠雾里,迷失自己;也不要为一句盲目的指责而畏首畏尾,改变航向。】
无
如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎鼓励,点赞、顶、欢迎留下宝贵的意见、多谢支持!