在上一节STEP4中,我们已经初步学会了使用SpringBoot来搭建服务,以及做一些简单的会话管理(HttpSession)。
但是有一个非常重要的问题没有解决:Dao层。也就是在上一节中被我们先用Java代码模拟了的那一部分。
我们知道Dao应当是去帮助我们沟通数据库的,但相关的代码应该如何来写,我们又要使用一些什么样的工具呢?
这里就引入了我们要介绍的一个ORM框架——MyBatis。
等等…什么叫ORM框架?
ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。
听起来有些复杂?
简单举个例子,比如我们要做一个“从数据库查询id为3的学生信息”:
SELECT * FROM student WHERE id=3;
这是一个符合我们MySQL的语法,我们如果要在MySQL里执行这个查询,就必须使用这个语法。
那换句话说,作为一个需要执行这个查询的应用开发人员,我们是不是又要懂java又要懂mysql呢?毕竟我们还要用java来搭建我们的服务。
其实可以不用!
(先光速打个脸:其实优秀的开发者都是两个都会的)
那如何才能让我们只关注java代码的开发而不需要在意MySQL的语法呢?
那我们就需要一个工具,这个工具能够帮助我们做这样一个处理:把Java代码翻译成MySQL的语法。
就比如我们调用一个java方法叫做selectStudentById(int id),这个工具就可以自动帮我们“翻译”成MySQL语句SELECT * FROM student WHERE id=#{id};
(这里的#{id}表示我们方法传入的参数)
这里再补一个小tip:什么叫“翻译”?其实就是根据我们调用的Java方法去做SQL语句拼接,然后替我们开发者向MySQL请求数据。
简单总结一下,就是我们需要一个工具,使我们不需要手写SQL语句,而是写一些Java方法,就可以实现我们要做的数据库操作。
那么什么工具可以帮助我们实现这个目的呢?那就是ORM框架。
到这里,其实ORM就算是解释得差不多了,不过还里还是简单提一下ORM最重要的一个优点和一个缺点,很好理解,所以也列在这里:
ORM最大的优点是,对我们应用层屏蔽了具体的数据库语言实现,所以对于数据库的迁移等会比较方便。(比如有一天我们要把MySQL换成Oracle来存储我们的数据,那我们的数据库语法会有一些变化,但是我们对应的Java方法可以不变)、
ORM最大的缺点是,无法由我们开发者自己来维护数据库查询语句,所以很难在语句层面对数据访问做优化(加快我们的访问等)。
那么到这里,对于ORM的概念我们就算是彻底解释完了。
接下来解释一下MyBatis:
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
相比市面上其他持久层框架,MyBatis具有小巧、方便、高效、简单易上手、半自动化的特点。
不知道在讲什么,反正听起来MyBatis很牛*的样子?
MyBatis具体的一些强大之处,还需要你慢慢体会。在这里仅强调两点:
一,MyBatis也是一款ORM框架,所以它具备上文提到的ORM的功能;
二,MyBatis是“半自动化的”,这个含义在于,我们作为应用开发者利用MyBatis是可以由自己来维护SQL语句的。(问自己一个问题,这样的好处是什么?)
那么我们到底应该如何来使用MyBatis来完成数据的访问呢?
在正式开始我们的MyBatis实践之前,建议你先来体会一下我们传统的数据访问解决方式:JDBC。
也就是,在我们的ORM出现以前,我们传统的访问数据的方式。
看这个有什么用?
- MyBatis底层也是基于JDBC实现的,这有助于你理解基本的数据访问的原理
- 了解JDBC有些什么弊端和复杂之处,有助于你体会ORM的强大,学会更好地使用ORM
传送门:
孑辞:JDBC认识与实践zhuanlan.zhihu.com接下来就正式到我们MyBatis实践了,请移步下一小节:
孑辞:STEP5.2 MyBatis实践——基于XMLzhuanlan.zhihu.com