Hibernate与MyBatis有什么区别
什么是MyBatis?
MyBatis(前身是iBatis)是一个支持普通SQL查询、存储过程以及高级映射的持久层框架。
MyBatis框架也被称之为ORM(Object/Relation Mapping,即对象关系映射)框架。所谓的ORM就是一种为了解决面向对象与关系型数据库中数据类型不匹配的技术,它通过描述Java对象与数据库表之间的映射关系,自动将Java应用程序中的对象持久化到关系型数据库的表中。
Hibernate与MyBatis有什么区别?
- Hibernate是一个全表映射的框架。
- 通常开发者只需定义好持久化对象到数据库表的映射关系,就可以通过Hibernate提供的方法完成持久层操作。
- 开发者并不需要熟练的掌握SQL语句的编写,Hibernate会根据制定的存储逻辑,自动的生成对应的SQL,并调用JDBC接口来执行,所以其开发效率会高于MyBatis。
- Hibernate也存在一些缺点,例如它在多表关联时,对SQL查询的支持较差;更新数据时,需要发送所有字段;不支持存储过程;不能通过优化SQL来优化性能等。
-
MyBatis是一个半自动映射的框架。
-
“半自动”是相对于Hibernate全表映射而言的,MyBatis需要手动匹配提供POJO、SQL和映射关系,而Hibernate只需提供POJO和映射关系即可。
-
与Hibernate相比,虽然使用MyBatis手动编写SQL要比使用Hibernate的工作量大,但MyBatis可以配置动态SQL并优化SQL,可以通过配置决定SQL的映射规则,它还支持存储过程等。对于一些复杂的和需要优化性能的项目(电商)来说,显然使用MyBatis更加合适。
-
由于mybatis的sql都是写在xml里,因此优化sql比hibernate方便很多。而hibernate的sql很多都是自动生成的,无法直接维护sql;虽有hql,但功能还是不及sql强大。
MyBatis的工作原理
MyBatis的操作步骤
1.读取配置文件
2.根据配置文件构建SqlSessionFactory
3.通过SqlSessionFactory创建SqlSession
4.使用SqlSession对象操作数据库
5.关闭SqlSession
注意
在使用"${}"进行 SQL 字符串拼接时,无法防止 SQL 注入问题 所以想要眈能实现棋糊查询,又要防止 SQL 注入,可以对上述映射文件 CustomerMapper.xml 中模糊查询的 select 语句进行修改,使用 MySQL 中的 concatO 函数进行字符串拼接