MyBatis 简介
MyBatis 是一个半自动的ORM框架,支持原生的SQL语句,内部封装了JDBC,无需处理加载驱动、创建连接等过程。支持XML文件或者注解配置关系映射。MyBatis执行sql并将结果映射为Java对象并返回MyBatis 适用场景
- 专注于SQL本身,提供灵活的DAO层解决方案
- 对性能要求高、或者需求变化频繁的项目
- MyBatis 优缺点
- 支持SQL原生语句编程、灵活,减少50%代码量,支持多种数据库,能够与Spring集成
- 编写的SQL工作量大,对SQL编程能力有要求,数据库迁移成本高
- MyBatis 涉及核心接口类
- SqlSessionFactoryBuilder
- SqlSessionFactory
- SqlSession
- MyBatis 支持一级缓存、二级缓存
- 一级缓存 HashMap本地缓存,作用域为Session 当Session flush或close后 清空缓存
- 二级缓存 默认不开启,作用域为Mapper(namespace),可自定义缓存源,如:Ehcache
MyBatis Mapper接口调用原理
Mapper接口的工作原理是JDK动态代理,运行时为Mapper接口生成代理对象Proxy,代理对象拦截mapper接口方法,执行MapperStatement代表的sql语句,并返回执行结果,xml文件每个Id会生成MapperStatementMyBatis 支持动态sql
通过标签实现动态拼接sql语句,标签如:<trim> <where> <set> <foreach> <if>MyBatis 与 Hibernate 区别
- MyBatis 是半自动的ORM框架,需要自己编写SQL语句,灵活性高,但工作量大
- Hibernate 关系对象映射能力强,与数据库无关,更多的减少代码量,提高效率