这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战。
任何东西的诞生都具备一定的诉求或者合理性,所以在讲mybatis之前,我们先回顾一下web应用是如何与数据库交互的。这里的语言环境是java,所用的数据库是mysql,其他的其实从原理上没什么区别。
-
加载驱动程序 一般mysql的驱动程序是
com.mysql.jdbc.Driver
,这是mysql提供给java客户端的驱动程序,连接mqsql之前得完成驱动的实例化。 -
获取数据库连接 这里需要的是数据库的url、username、password。这里需要实例化一个
Connection
对象。 -
创建SQL并执行 这里就可以写我们想要的SQL,然后执行并获取执行结果了。这里需要实例化一个
Statement
对象。 -
解析结果 上一步执行完之后会返回一个
ResultSet
对象,需要从这里根据数据库字段遍历获取对应的结果。 -
关闭连接 用完之后要及时释放资源,C语言开发者不会陌生。
以上5步在每一次与数据库交互时都需要按顺序执行一遍,性能差是肯定的,这里的重复代码是何其的啰嗦,如果是一个比较庞大的系统时,会出现堆积如山的SQL语句和结果遍历。虽然1,2,5这三步可以进行封装,但面对不同的查询和写入场景,这都是难以复用的复杂工作。
这个时候ORM框架便应运而生了。ORM的全称是Object Relational Mapping,即对象关系映射。对象指的就是java对象,关系指的是mysql这样的关系型数据库的表关系,ORM框架做的事情就是将上面的事情集中起来,不仅封装了1,2,5这样的资源获取与释放,更大的意义是将3,4这样的繁琐的操作友好到一个很小的程度,变成一个个xml文件的表达,并且直接把结果集绑定到指定的java数据对象。同时,像即将要探讨的mybatis还支持了连接池,缓存,主键自增,懒加载等更好用的功能。