MyBatis是一个Java的持久层框架,和Hibernate一样,都是ORM框架。
MyBaits的前身是iBatis,可以将数据库中记录映射为pojo,是开发人员以面向对象编程的思想来操作数据库。
MyBatis消除了几乎所有的JDBC代码,比如注册驱动,获取、关闭数据库连接,创建Statement对象,手动设置参数,结果集检索,这些都不需要,开发人员只需要使用xml进行简单的配置、映射,就可以操作数据库。
常见的封装了jdbc的框架:DbUtils、Hibernate、MyBatis、Spring的JdbcTemplate。
ORM框架
ORM,Object Relational Mapping 对象关系映射,对象指的是pojo,关系指的是关系型数据库中的表、记录。
常用的ORM框架包括MyBatis、Hibernate。
MyBatis、Hibernate的区别
Hibernate是一个标准的ORM框架,是全表映射框架。
- 开发效率要高于MyBatis。开发者只需定义映射关系、pojo,Hibernate会自动生成对应的sql语句、操作数据库的方法,开发者使用Hibernate提供的方法操作持久层就ok,不需要熟练掌握sql、不需要编写大量代码。
- 学习门槛高。开发者要有良好的数据关系模型基础,需要学习复杂的hql。
- 偏死板、维护有难度。Hibernate自动生成了大量的sql语句、方法,很多都用不到,冗杂。
- 具有良好的数据库无关性,移植性较好。更换数据库时,比如从mysql换为oracle,只需更改方言,无需大量修改代码。
- 适合场景不复杂、对性能要求不高的项目。Hibernate对多表关联查询支持较差,更新操作需要发送整个pojo对象(所有字段),不支持储存过程,不能进行sql优化来提高性能。
MyBatis是一个半自动映射框架。
- 编码工作量要比HIbernate大。除了要定义映射关系、pojo,还需要自己写sql语句、操作数据库的方法。
- 简单易上手。稍微有点sql基础就行。
- 灵活、好维护。可根据需求编写sql,支持动态sql,可以自定义映射规则、支持存储过程。
- 不支持数据库无关性。因为要自己编写sql,比如查询,mysql用limit,oracle用rownum,更换数据库时需要修改sql语句。
- 对于复杂、对性能有要求的项目,MyBatis更合适。对关联映射、多表查询支持较好,因为是自己写sql,可以通过优化sql来提高性能。