玩转MyBatis框架教程01之MyBatis简介
欢迎进群交流(QQ群:655019021)
1、mybatis简介
Mybatis本是Apache的一个开源项目iBatis,2010年这个项目有Apache Software foundation迁移到了GoogleCode,并改名为Mybatis。2013年11月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于java的持久层框架。iBATIS提供的持久层框架包括SQLMaps和DataAccess Object(DAOs)
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
2、为什么要使用MyBatis?
2.1、回顾JDBC
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
编写JDBC程序如下:
1、 注册驱动
2、 DriverMaager设置username、password、url获得Connection
3、 编写SQL语句
4、 根据Connection对象获取Statement对象
5、 操作Statement对象执行SQL语句得到返回结果
6、 如果是查询会返回ResultSet对象,需要将ResultSet映射为POJO
7、 释放资源
JDBC的不足如下:
1、 开发人员需编写大量重复代码
2、必须严格控制资源的获取和释放,否则将造成资源浪费以及性能影响,重则导致内存溢出
3、SQL语句编写以及SQL语句参数设置都在Java程序中硬编码
4、执行SQL语句返回结果集需要自己硬编码映射
5、硬编码会导致可阅读性、扩展性、维护性、灵活性等极差
在实际开发中JDBC缺陷被框架所替代。
2.2、常用框架Hibernate和MyBatis
2.1.1、Hibernate介绍:
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库, Hibernate可以应用在任何使用JDBC的场合。
2.2.2、Hibernate优缺点:
优点:
1、hibernate进行大量的封装,让开发员用面向对象的思想操作数据
2、hibernate有较好的移植性,对于不用的数据库只需要指定数据库方言即可
3、开发者不需写大量的sql语句,可以提高开发效率
4、hibernate提供了丰富缓一级缓存、二级缓存机制有利于程序性能的提高
缺点:
1、面向对象的思维进行大量的封装,开发人员无法对灵活编写SQL语句以及SQL语句的优化
2、框架中使用ORM原则,如果表数量达几百张表关联关系较复杂的情况下会导致庞大的配置文件
3、Hibernate在批量数据处理时有弱势,对于批量的修改、删除,不适合用Hibernate,这也是ORM框架的弱点
2.2.3、MyBatis框架的优缺点:
优点:
1、与JDBC相比,减少很多重复代码编写
2、与Hibernate相比灵活性有极大的空间、易上手、学习成本更低
3、MyBatis不会对应用程序或者数据库的现有设计强加任何影响,SQL语句与java程序代码彻底分离,把SQL写在XML配置文件中,便于统一管理、维护、优化、可重用等诸多有点
4、提供映射标签,支持对象与数据库的ORM字段关系映射
缺点:
1、编写大量的SQL语句,对开发人员SQL编写能力较高
2、SQL语句严重依赖数据库,可一致性较差
2.3、Hibernate和MyBatis应用场景
Hibernate适用于需求明确、业务固定的项目,例如OA项目、ERP项目等
MyBatis 适用于需求多变的互联网项目,例如电商项目、金融项目等
综合学习成本等多方面因素,较多的公司更愿意选择MyBatis
3、MyBatis架构
Mybatis工作流程图
MyBatis各个组成部分介绍:
1、 MyBatis全局配置核心配置文件SqlMapConfig.xml包括数据源配置信息、事务信息、开启二级缓存、加载Mapper映射配置等。
UserMapper.xml、DeptMapper.xml、LoginMapper.xml等文件统称为mapper映射文件,其作用是编写SQL语句、指定接收参数类型、指定返回结果类型等操作。所有mapper映射文件必须在SqlMapConfig.xml文件中指定加载;
2、SqlSessionFactoryBuilder().build(MyBatis核心配置SqlMapConfig.xml文件输入流)构建会话工厂SqlSessionFactory,用于生产SqlSession会话对象;
3、根据会话工厂SqlSessionFactory获取SqlSession会话对象,开发者可以根据SqlSesion会话对象的API操作数据库;
4、Executor执行器,操作SqlSession会话执行CRUD操作最终交由Executor执行器完成;
5、Mapped Statement封装了SQL已经参数映射以及封装执行SQL返回结果集等;