什么是Mybatis
Mybatis是一款持久层框架,是一个半自动ORM(对象关系映射)框架,支持定制化SQL,存储过程以及高级映射。
ORM是什么
ORM(object relational mapping),对象关系映射。ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系型数据库中。
半自动化和全自动化
Hibernate是全自动化ORM框架,查询时可以根据对象关系模型直接获取。
Mybatis 是半自动化ORM框架,查询时必须手动编写sql语句。
为什么要使用Mybatis而不是传统的JDBC
1.数据库的连接,释放频繁会造成系统资源的浪费从而影响系统性能,mybatis可以配置数据连接池管理数据库连接。
2.sql语句写在代码中会造成代码不易于维护,mybatis可以将sql语句配置在xml文件中,从而实现与java代码的分离。
3.传参麻烦,where条件不一定,占位符需要和参数一一对应,mybatis可以自动将对象映射到sql语句中。
4.Mybatis可以自动对结果集经行处理,经sql执行结果映射至java对象。
缺点
1.sql语句编写工作量大。
2.sql语句依赖与数据库,不能随意更换数据库。
工作原理
1.读取配置文件(mybatis-config.xml)。
2.加载映射文件(Mapping),该文件中配置了操作数据库的sql语句。mybatis-config.xml可以加载多个配置文件,每个配置文件对应数据库中的一张表。
3.构造会话工厂SqlSessionFactory。
4.创建会话对象SqlSession。
5.Executor执行器:mybatis底层定义了一个Executor接口,他将根据SqlSession传递的参数动态的生成需要执行的SQL语句,同时负责对查询缓存的维护。
6.MappedStatement对象:在Executor接口的执行方法中有一个MappedStatement类型的参数,其实对映射信息的封装,用于储存要映射的SQL语句的id等参数。
7.输出结果映射。
功能架构
mybatis的功能架构分三层
API接口层:负责接收调用请求。
数据处理层:接口层接收到调用请求就会调用数据处理层来处理,负责具体的SQL查找,解析,执行和执行结果映射处理等。主要目的是根据调用请求完成一次数据库操作。
基础支撑层:负责为上层数据处理层提供最基础的功能支撑。
#{}和${}的区别
1.#{}是占位符,会进行预编译处理;${}是拼接符,字符串替换,没有预编译处理。
2.#{}出入参数是以字符串传入,会将SQL语句中的#{}替换为?,调用PreparedStatement的set方法来进行赋值。可以有效防止SQL注入。