Mybatis简介
MyBatis 是一款优秀的半自动化的持久层框架,需要手动匹配提供POJO、SQL和映射关系,它支持定制化 SQL、存储过程以及高级映射。MyBatis 对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java对象映射成数据库中的记录。
SQL语句与java业务代码分离,一个专注于业务,一个专注于数据
与使用原生jdbc对比
- 原生jdbc数据库连接频繁的创建和关闭,浪费数据库的资源,影响操作效率;mybatis使用数据库连接池
- mybatis与jdbc相比减少了代码量,消除了jdbc大量的冗余代码
- 原生jdbc中sql语句是硬编码,如果需求变更需要修改sql,就需要修改java代码,系统不易维护;mybatis将sql语句统一配置在文件中,修改sql不需要修改java代码
- 原生jdbc通过preparedStatement向占位符设置参数,存在硬编码( 参数位置,参数)问题。系统不易维护;mybatis将sql中的占位符及对应的参数类型配置在配置文件中,能够自动输入映射
- 原生jdbc遍历查询结果集与列名进行对应存在硬编码;mybatis自动进行sql查询结果向java对象的映射
与Hibernate对比优点
- 对于复杂的SQL,Hibernate处理起来比较困难
- Hibernate自动生成SQL,不便于进行SQL优化
- Hibernate的过度封装,造成了使用不灵活,很多时候还是需要在hibernate中执行sql语句,导致sql和代码耦合,而mybatis则将代码和sql语句分离开
- Hibernate是全映射的全自动框架,大量字段的POJO进行部分映射时比较困难,导致数据库性能下降
- Hibernate是全表映射,更新时需要发送所有的字段
- Hibernate的功能并不比Mybatis少,但是学习成本太大,需要深入研究Hibernate才可以很好的使用Hibernate中所提供的各种自定义配置
- Mybatis需要大量的编写SQL语句,对sql语句需要有一定的功底,且由于sql语句依赖于数据库,所以数据库移植性差,不能随意更换数据库;而hibernate编写hql可以直接转换为对应数据库的sql语句,可移植性强