MyBatis核心组件

SqlSessionFactoryBuilder

它会根据配置或者代码来生成SqlSessionFactory,采用分布构建的Builder模式,他提供了一个Configuation类作为引导,具体的分步在该类中完成。mybatis会读取配置文件,通过Configuation类对象构建整个Mybatis的上下文。

SqlSessionFactory

依靠它来生成sqlsession,SqlSessionFactory有两个实现类,其中一个比较重要的是DefaultSqlSessionFactory,具体是由它去实现的。每一个Mybatis应用都是以一个SqlSessionFactory的实例为中心的,而它唯一的作用就是生产sqlSession对象。

SqlSession

他是一个核心接口,他也有两个实现类,一个叫DefaultSqlSession,一个叫SqlSessionManager,前者是单线程使用,后者是多线程使用。一个SqlSession代表一个连接资源的启用。它的具体作用有三个:
1.获取mapper接口
2.发送sql给数据库拿到结果。
3.控制数据库事务。

SqlSession sqlsession = SqlSessionFactory.openSession();

SqlSession有很多方法都可以发送sql,但是里面真正发送sql的是Executor,可以在底层看到。
SqlSession控制事务的伪代码如下:

sqlsession.commit();
sqlsession.rollback();
sqlsession.close();

映射器

它由一个接口和对应的xml文件构成。它的主要作用就是将sql查询后的结果填充到POJO对应的属性中去。Mybatis会使用动态代理技术为该接口生产一个代理对象,代理对象会去处理相关对象。同时Mybatis会默认提供自动映射,只要sql返回的列名和pojo属性名对应就可以,如果不对应可以在sql语句中使用as重新命名列名。
在MyBatis中发送sql到数据库有两种方式:
一种使用sqlsession对象

Role role = (Role)sqlsession.selectOne("getRole",1);

一种是使用Mapper接口发送sql。

RoleMapper roleMapper=sqlsesson.getMapper(RoleMapper.class);
Role role=roleMapper.getRole(1);

对比两种发送sql的方式

更推荐使用mapper接口发送sql,使用mapper接口编程可以消除sqlsession带来的功能性代码,提高可读性。使用接口对象去调用对应的方法更符合面向对象语言,而且在编译器中可以直接看到错误提示,但是使用sqlsession的方式只有在代码运行中才能看到。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值