是什么?
-
Mybatis是一个优秀的持久层框架,他对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
-
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
原理
MyBatis应用程序根据XML配置文件创建SqlSessionFactory,SqlSessionFactory在根据配置,配置来源于两个地方,一处是配置文件,一处是Java代码的注解,获取一个SqlSession。SqlSession包含了执行sql所需要的所有方法,可以通过SqlSession实例直接运行映射的sql语句,完成对数据的增删改查和事务提交等,用完之后关闭SqlSession。
整体架构
框架介绍
1、Mybatis配置
SqlMapConfig.xml文件为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
mapper.xml文件为SQL映射文件,文件中配置了操作数据库的SQL语句。此文件需要在SQLmapConfig.xml中加载。
2、通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂。
3、 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
4、 mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
5、 Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
6、 Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
7、 Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
优缺点
优点:
-
与jdbc相比,减少了50%以上的代码量
-
mybatis是最简单的持久化框架,小巧简单易学
-
SQL代码从程序代码中彻底分离开来,可重用
-
提供XML标签,支持编写动态SQL
-
提供映射标签,支持对象与数据库的ORM字段关系映射
缺点:
-
SQL语句编写工作量大,需要对SQL语句的熟练度高
-
数据库移植性差,比如从MySQL一直到oracle,SQL语句会有差异而引起错误
-
由于XML里标签ID必须唯一,导致DAO中方法不支持方法重载
-
不支持级联更新、级联删除
-
编写动态SQL是,不方便调试,尤其逻辑复杂时
-
缓存使用不当,容易产生脏数据
ORM简介
什么是“持久化”
持久(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等
什么是“持久层”
持久层(Persistence Layer),即专注于实现数据持久化应用领域的某个特定系统的一个逻辑层面,将数据使用者和数据实体相关联。
什么是ORM
即Object-Relationl Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了 。 本质上就是将数据从一种形式转换到另外一种形式。
ORM技术特点:
1.提高了开发效率。由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。
2.ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。
常见持久化框架
1、Hibernate
Hibernate是一个开放源代码的对象关系映射框架,它
对JDBC进行了非常轻量级的对象封装
,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
Hibernate可以应用在任何使用JDBC的场合
,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
2、IBATIS
使用ibatis 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象, 这一层与通过Hibernate 实现ORM 而言基本一致,
而对于具体的数据操作,Hibernate 会自动生成SQL 语句,而ibatis 则要求开发者编写具体的SQL 语句
。
相对Hibernate等 “全自动”ORM机制而言,ibatis 以SQL开发的工作量和数据库移植性上的让步,为系统 设计提供了更大的自由空间
。作为“全自动”ORM 实现的一种有益补充,ibatis 的出现显 得别具意义。
3、JPOX
JPOX 是一个 Java Data Objects (JDO)实现,提供了Java对象透明的一致性。JPOX 支持多维数据库(OLAP) 和RDBMS 数据库。也支持现存的模式
4、Apache Torque
Apache Torque是一个使用关系数据库作为存储手段的Java应用程序持久化工具,是 Apache 的公开源代码项目,Torque是一个开源项目,由Web应用程序框架Jakarta Apache Turbine发展而来,但现在已完全独立于Turbine。 Torque 主要包含两部分:一部分是 Generator,它可以产生应用程序需要的所有数据库资源,包括 sql 和 java 文件;另外一部分是 Runtime,提供使用这些代码访问数据库的运行时环境。目前 Torque 支持的数据库包括 DB2、SQL Server、Oracle、PostgreSQL等。
5、Castor
Castor 一个Java开放源码数据绑定框架,它主要目标是提供Java对象与XML 的绑定, Java到SQL的持久化等.
6、Jaxor
Jaxor是一个简单但功能强大的创建到关系映像层对象的工具。它允许开发者轻松地在表中插入、更新、删除行,但也可被扩展为创建一个可扩展的映像层,这个层可创建一个完全的域模型,透明地映射到数据库表。
7、jdbm
jdbm是为Java提供的一个事务持久层,它旨在为用Perl, Python, C等作为GDBM 的Java应用程序使用,这是简单的持久层引擎是轻型而快速的。