MyBatis

MyBatis

1.Mybatis框架基础

1.1.Mybatis框架技术

  Mybatis是一个数据持久层(ORM)框架。在实体类和SQL语句之间建立映射关系,是一种半自动化的ORM实现。
  Mybatis支持定制化SQL、存储过程以及高级映射,避免了几乎所有的JDBC和手动设置参数以及获取结果集。

  ORM(Object Relational Mapping)对象关系映射,就是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换为另一个形式。

1.2.Mybatis的优点

  Mybatis的优点:
  1)、基于SQL语法,简单易学。
  2)、能了解底层组装过程。
  3)、SQL语句封装在配置文件中,便于统一管理与维护,降低了程序的耦合度。
  4)、程序调试方便。

1.3.Mybatis框架功能架构

  Mybatis框架功能架构分为三层。
  API接口层:提供给外部使用的接口API,开发人员通过接口API来操纵数据库。接口层接收到调用请求就会调用数据处理层来完成具体的数据处理。
  数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。主要目的是根据调用的请求完成一次数据库操作。
  基础支撑层:负责最基础的功能知识,包括连接管理、事务管理、配置加载和缓存处理,把这些共用的操作抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。
在这里插入图片描述

1.4.Mybatis工作流程
  Mybatis工作流程:
  1)、加载配置并初始化
  2)、接收调用请求
  3)、处理操作请求
   处理过程:
  a.根据SQL的ID查找对应的MappedStatement对象。
  b.解析MappedStatement,得到最终要执行的SQL和执行传入参数。
  c.获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。
  d.根据MappedStatement对象中的结果映射配置得到的执行结果进行转换处理,并得到最终的处理结果。
  4)、返回处理结果

1.5.Mybatis基本要素、事务管理和数据源类型
  Mybatis基本要素:SqlMapConfig.xml全局配置文件、Mapper.xml核心映射文件、SQLSessionFactory/SqlSession接口
  Mybatis的两种事务管理类型:JDBC和MANAGED。
JDBC:直接全部使用JDBC的提交和回滚功能,依靠使用连接的数据源来管理事务的作用域。
MANAGED:从不提交、回滚和关闭连接,而是让窗口来管理事务的全部生命周期。
  Mybatis的三种数据源类型:UNPOOLED、POOLED、JNDI。
  UNPOOLED:在每次请求的时候简单的打开和关闭一个连接。
  POOLED:缓存JDBC连接对象用于避免每次都要连接和生成连接实例而需要的验证时间。
  JNDI:为了准备和Spring或应用服务一起使用,可以在外部也可以在内部配置,然后在JDNI上下文中引用。

1.6.Mybatis开发步骤

1)、新建maven项目,使用分层思想,配置项目package包。
2)、修改pom.xml,配置mybatis框架及开发框架。
3)、面向数据库编程,设计一个类与数据库表形成一一对应关系。
4)、设计一个数据库操作接口,定义crud操作。
5)、编写一个接口映射文件,完成接口方法映射,或在接口中使用注解配置sql。
6)、编写Mybatis全局配置文件,进行Mybatis运行环境参数设置。
7)、编写一个测试类,使用Mybatis实现数据操作。

2.Mybatis核心配置与DAO开发

2.1.Mybatis核心配置

  Mybatis核心配置文件:SqlMapConfig.xml(全局配置文件)和mapper.xml(映射文件)。
  SqlMapConfig.xml:SqlMapConfig的XML配置文件包含了影响Mybatis行为的设置和属性信息,文档结构如下:
  configuration 配置
     properties 属性–加载属性文件
     settings 设置–调整运行参数
     typeAliases 类型命名
     typehandlers 类型处理器–完成JDBC类型和Java类型的转换
     objectFactory 对象工厂
     plugins 插件
     Environments 环境–主要用于配置数据库相关,可以在里面配置多个environment
     mappers 映射器

2.2.Mybatis核心接口和类

  (1)每个MyBatis的应用程序都以一个 SqlSessionFactory对象的实例为核心;
  (2)首先获取SqlSessionFactoryBuilder对象,可以根据XML配置文件或Configuration 类的实例构建该对象;
  (3)然后获取SqlSessionFactory对象,该对象实例可以通过 SqlSessionFactoryBuilder对象来获得。
  (4)有了SqlSessionFactory对象之后,就可以进而获取SqlSession实例,SqlSession 对象中完全包含以数据库为背景的所有执行SQL操作的方法。可以用该实例直接执行已映射的SQL语句。

2.3.Mybatis开发dao的方法

  原始dao开发方法:程序员需要写dao接口和dao实现类。
  mapper代理开发:程序员只需要mapper接口和mapper.xml映射文件,Mybatis可以自动生成mapper接口实现类代理对象。程  序员编写mapper接口需要遵循一些开发规范。

  mapper代码开发规范
  1、在mapper.xml中namespace等于mapper接口地址。
  2、mapper.java接口中的方法名和mapper.xml中的statement的id一致。
  3、mapper.java接口中的方法输入参数类型和mapper.xml中的statement的parameterType指定的类型一致。
  4、mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致。

  mapper代理开发方法流程
  1)、创建接口,方法名、参数、返回值与mapper.xml中映射配置保持一致。
  2)、修改mapper.xml配置文件,namespace和接口地址一致。
  3)、在SqlMapConfig.xml中加载mapper.xml。
  4)、测试运行。

3.Mybatis逆行工程和动态SQL

3.1.Mybatis逆向工程
  Mybatis逆向工程可以针对表单自动生成Mybatis执行所需要的代码(包括mapper.xml、mapper.java、po…)。一般在开发中,常用的逆向工程方式是通过数据库的表生成代码。
  使用逆向工程步骤:
  1)、新建一个java工程
  2)、引入使用的jar包
  3)、添加配置文件generatorConfig.xml
    设置数据库驱动、配置、包名、文件保存位置、表名等。
    a.设置数据库驱动、url、用户名和密码。
    b.生成的pojo类的位置。
    c.mapper映射文件生成位置。
    d.mapper接口生成位置。
    e.根据DB表生成pojo类。
    f.调用Mybatis自动创建接口。
  4)、定义GeneratorSqlMap类,调用Mybatis自动创建接口,在main方法执行自动创建。

3.2.动态SQL

  动态SQL主要用于解决查询条件不确定的情况:在程序运行期间,根据提交的查询条件进行查询。可以通过Mybatis提供的各种标签对条件判断作出判断以实现动态拼接SQL语句。其中,Mybatis的动态SQL是基于OGNL表达式的。
  使用动态SQL的原因:提供的查询条件不同,执行的SQL语句不同。若将每种可能的情况均逐一列出,就将出现大量的SQL语句。

  Mybatis中用于实现动态SQL的元素主要有
  1)if语句
  2)where
  3)trim
  4)set
  5)foreach
  6)choose(when,otherwise)

4.Mybatis关联查询与缓存配置

4.1.Mybatis查询

  Mybatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap。
  其中,resultType是直接表示返回类型的(对应着我们的model对象中的实体),resultMap则是对外部resultMap的引用。resultType和resultMap不能同时存在。
  在Mybatis进行查询映射时,起始查询出来的每一个属性都是放在一个对应的map中,其中键是属性名,值则是其对应的值。
  Mybatis查询类型有:一对一查询,一对一关联查询,一对多关联查询,多对多关联查询,分页查询。

4.2.延迟加载
  在数据与对象进行mapping操作时,只有在真正使用到延迟加载对象时,才能进行mapping操作,以减少数据库查询开销,从而提升系统性能。但延迟加载也有缺点,即在按需加载时会多次连接数据库,会增加数据库的眼里。

4.3.延迟加载配置
  Mybatis默认没有开启延迟加载,需要在SqlMapConfig.xml中setting配置。
  lazyLoadingEnabled:true使用延迟加载,false禁用延迟加载,默认为false。
  aggressiveLazyLoading:true启用时,当延迟加载开启访问对象中一个懒对象属性时,将完全加载这个对象的所有懒对象属性。false,当延迟加载时,按需加载对象属性(即访问对象中一个懒对象属性,不会加载对象中其他的懒对象属性),默认为true。

4.4.Mybatis查询缓存

  Mybatis提供一级缓存和二级缓存。
  其中,Mybatis默认支持一级缓存,不需要在配置文件中去配置。
  Mybatis的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓存。
  二级缓存:在statement中设置useCache=false可以禁用当前select语句的二级缓存,即每次查询都会发出sql去查询,默认情况是true,即该sql使用二级缓存。
  刷新缓存:在mapper的同一个namespace,如果有其他insert、update、delete操作数据后需要刷新缓存,如果不执行刷新缓存会出现脏读。设置statement配置中flushCache=”true”属性,默认情况下为true即刷新缓存,为false则不会刷新缓存。

4.5.Mybatis整合第三方缓存框架
  分布式缓存框架:不使用分布缓存,缓存的数据在各个服务单独存储,不方便系统开发。所以要使用分布式缓存对缓存数据进行集中管理。有ehcache、memcache、redis缓存框架。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值