到目前为止,关于Mysql数据库的内容就讲完了,前面我们讲了数据库的设计、数据库的操作、数据库的优化。 我们学的时候,一直用的是图形化界面工具,但这个工具能代替掉sql语句吗? 答案是不能的,因为我们总不能一直使用工具来对数据库进行操作。 特别是后面用Java程序来完成数据库的操作时。
用Java程序进行操作数据库,现在主流的技术就是MyBatis了。
什么是MyBatis
是一款优秀的持久层框架,用于简化jdbc的操作。 这里说的持久层框架就是之前所说的dao层,用来和数据库进行数据交互。
jdbc是用来连接数据库,与数据库做交互用的。但是jdbc的实现上,有许多的硬编码,重复编码也比较多,配置起来也十分的繁琐。
JDBC
什么是JDBC?
Java DataBase Connectivity 用Java语言操作数据库的一套API,这一套API是sun公司提供的。我们知道的关系型数据库的产品有很多,比如mysql,oracle等,这些厂商需要提供gdbc的实现,最终我们在编写java程序 的时候,可以直接面向接口编程,而具体的实现类不用我们去写。
可以看到,其对数据库的操作还是很繁琐的。mybatis简化了这些操作,而底层仍然是jdbc的实现。
下面我们来看看mybatis是怎么使用的:
使用Mybatis
我们先新建一个Module添加如图所示的两个依赖。
创建完毕的目录:
pom.xml中记录着我们添加了哪些依赖,以及父依赖的各项信息.
去到配置文件处进行配置数据库信息。
第一行是写死的,剩下三行大家自行填写。
运行第一个mybatis项目
先到数据库中添加Mybatis数据库,再添加user表格,最后往表格中填写测试数据。
再像图中那样,添加代码
用于输出全部的user表格数据
因为我们是进行测试,所以到测试模块中进行操作。在测试模块中填写如下代码,点击执行。
成功输出数据。
数据库连接池
数据库连接池就类似于大家之前所学习的线程池,它也是一个容器。
而这个容器当中存储的是一个的数据库,连接对象,connection,这个连接池就负责这些连接对象的分配和管理。
那么,如果没有数据库连接池,客户端要想执行一条SQL语句,是什么样子的?如果没有数据库连接池,客户端执行SQL语句,首先需要去创建一个新的连接对象,然后再来执行这条SQL语句。 Sql语句执行完毕之后,又需要把连接对象关闭了,来释放资源。
每一次都需要开启一个新的连接,用完之后马上又把连接关闭了,这是比较浪费资源的。
那如果有了数据库连接池又是什么样的情况?如果有了数据库连接池,程序在启动的时候,就会在这个容器当中初始化一定数量的连接对象。接下来客户端在执行SQL语句的时候,它就会从连接池当中来获取一个连接,获取到连接之后再来执行这条 SQL语句,执行完毕之后会把连接再归还给连接池。
这样就可以做到连接的复用,而不是每一次都来创建一个新的链接。对于数据库连接池它还有一个功能,当各个客户端在执行SQL语句的时候,它会从连接池当中来获取相关的连接,查询语句执行完毕之后,再将这个连接归还给连接池。如果说有个别的客户端获取到了这个链接,但是这个链接一直处于空闲状态,也就是说这个连接并没有去访问数据库去操作数据库当中的数据,一直空闲着,此时数据库连接时就会去监测连接的空闲时间。
如果发现这个连接的空闲时间超过了数据库连接池当中预设的最大事件,这个连接将会释放归还给连接池,这样就可以避免某一些连接没有及时的得到释放,而造成数据库连接池当中的连接越用越少,连接越来越少之后可能就会出现一个问题。再过来一个客户端要去获取连接,发现连接池当中已经没有可用的连接了,此时就相当于把客户端遗漏了,没有给他分配到连接。
所以我们也能看到,数据库连接池有两个大优势,一是资源的重用,事先创建好一定数量的连接对象,等客户端需要时就给它,等客户端使用完毕,也不释放,而是放到池子里面等下一个客户端再次进行使用。 二是可以提升系统的响应速度,因为减少了创建资源的等待时间,故能提升用户的体验。
目前来说,市面上有较多的数据库连接池技术,国产的driod,和如图所示的hikari。
hikari是idea默认使用的数据库连接池技术。
如果我们需要换一个数据库连接池技术,比如换到阿里的druid,其实操作比较简单,只需要到依赖处添加对应依赖即可。
到官网拿一下最新依赖。
首页 · alibaba/druid Wiki · GitHub
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
打完依赖就能直接测试了。
上面是错的,要用这个。
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.8</version> </dependency>
可以看到alibaba的字样和druid字样。
说明测试成功。