二:MyBatis的构成

一:MyBatis的基本构成

  MyBatis的核心组件:

     SqlSessionFactoryBuilder(构造器):它会根据配置信息或者代码来生成SqlSessionFactory(工厂接口)

     SqlSessionFactory: 依靠工厂来生成SqlSession(会话)

     SqlSession:是一个既可以发送SQL去执行并返回结果,也可以获取Mapper的接口

     SQL Mapper:它是MyBatis新设计的组件,它是由一个Java接口和XML文件构成的,需要给出对应的SQL和映射规则。它负责发送SQL去执行,并返回结果。

1.1构建SqlSessionFacory

  每个MyBatis的应用都是以SqlSessionFactory的实例为中心的,SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactory是个接口。MyBatis提供了两种模式创建SqlSessionFactory,一种是XML配置方式,另外一种是代码方式。推荐使用 XML配置方式。

XML的配置解析后会保存在Configuration(org.apache.ibatis.session.Configuration)中.而这个对象将存在于整个MyBatis应用的生命周期中,可以反复使用,Configuration类对象保存了MyBatis的其他配置信息。

在MyBatis中提供了两个SqlSessionFactory的实现类:DefaultSqlSessionFactorySqlSessionManager.MyBatis目前使用的是DefaultSqlSessionFactory.

1.2创建SqlSession

   SqlSession是一个接口类,它类似于前台的客服,扮演着门面,真正干活的是Executor接口,SqlSession接口 类似JDBC的Connetion。SqlSession的实现类有两个,分别是 DefaultSqlSession和SqlSessionManager

SqlSession的用途主要有两个:1.获取映射器,让映射器通过命名空间和方法名找到对应的SQL,发给数据库执行后返回结果

                                                2.直接通过命名信息执行SQL. iBatis 就是采用的这种方式

1.3映射器

映射器是由Java接口和XML文件共同组成的,其作用:

  定义参数类型

  描述缓存

  描述SQL语句

  定义查询结果和POJO的映射关系

映射器的实现方式有两种,一种是通过XML文件方式实现,一般是对应的Mapper.xml文件,另外一种是通过代码方式实现,在Configuration里面注册Mapper接口,Mapper是MyBatis的核心内容,同样也是最为复杂的。

使用XML文件配置是MyBatis实现Mapper的首选方式,它由一个Java接口和一个XML文件构成。

在MyBatis中保留着IBatis,通过"命名空间 + SQL id"的方式发送SQL并返回数据的形式,而不需要获取映射器。

eg: Role role=sqlSession.selectOne("com.learn.mapper.RoleMapper.getRole","role_no").

现在疑惑来了,我们还需要Mapper吗? 肯定是需要的。Mapper是一个接口,相对而言他可以进一步屏蔽SqlSession这个对象,使得它具有更强的业务可读性。其好处有两点:

 1.sqlSession.selectOne 是功能性代码,长长的字符串比较晦涩难懂,不包括业务逻辑的含义,不符合面向对象的规范

 2.使用Mapper方式,IDE可以坚持Java语法,避免不必要的错误。

关于Mapper接口操作方法的疑惑:

                   其实它需要用到Java语言的动态代理去实现其对应的实现类。我们在MyBatis上下文中描述这个接口,而MyBatis会为这个接口生成代理类对象,代理对象会根据“接口全路径+方法名”去匹配,找到对应的XMl去完成所需的任务,返回结果。

1.4 生命周期

1.4.1SqlSessionFactoryBuilder:

利用XML或者Java编码获得资源来构建SqlSessionFactory的,它就是一个构建器,一旦构建了SqlSessionFactory,它的作用就已经完结,我们就会把它回收。所以它的生命周期只存在于方法的局部。

1.4.2 SqlSessionFactory

    SqlSessionFactory的作用是创建 SqlSession,而SqlSession就像是一个会话,相当于JDBC中的Connection对象。每次应用需要访问数据库时,就需要通过SqlSessionFactory来创建SqlSession,所以SqlSessionFactory会存在MyBatis的整个生命周期中。为了便于管理,将SqlSessionFactory设置为单例模式,方便管理数据库资源的分配

1.4.3 SqlSession

    SqlSession是一个会话,相当于JDBC的connection对象,它的生命周期应该是在请求数据库处理事务的过程中。它是一个线程不安全对象,在涉及多线程的时候需要特别担心,另外每次创建SqlSession,用完后需要关闭连接。它存活于一个应用的请求和操作,可以执行多条SQL,保证事务的一致性。

1.4.4 Mapper

  Mapper是一个接口,而没有任何实现类,它的作用是发送SQL,然后返回我们需要的结果,因此它应该是在一个SqlSession事务方法之内,是一个方法级别的东西。用完后应该尽量废弃它。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值