认识mybatis核心组件

1.mybatis特点

  • 不屏蔽sql,意味着可以更为精确的定位sql语句,可以对其进行优化和改造,这有利于互联网性能的提高,符合互联网需要性能优化的特点。
  • 提供更强大、灵活的映射机制,方便java开发者的使用。提供动态sql的功能,允许我们根据不同的条件组装sql,这个功能远比其他工具或者java编码的可读性和可维护性高得多,满足各种应用系统的同时也满足了需求经常变化的互联网应用的要求。
  • 在mybatis中,提供了使用mapper的接口编程,只要一个接口和一个xml就能创建映射器,进一步简化我们的工作,使得很多框架api在mybatis中消失,开发者能更集中于业务逻辑。

2.mybatis的核心组件

  • SqlsessionFactoryBuilder(构造器):它会根据配置或者代码来生成SqlsessionFactory,采用的是分步构建的builder模式。
  • SqlsessionFactory(工厂接口):依靠它来生成sqlsession,使用的是工厂模式。
  • Sqlsession(会话):一个既可以发送sql执行返回结果,也可以获取mapper的接口。在现有的技术中,一般我们会让其在业务逻辑代码中“消失”,而使用的是Mybatis提供的SQL Mapper接口编程技术,它能提高代码的可读性和可维护性。
  • SQL mapper(映射器):mybatis新设计存在的组件,它由一个java接口和xml文件构成,需要给出对应的sql和映射规则。它负责发送sql去执行,并返回结果。

3.mybatis组件的生命周期

  1. SqlSessionFactoryBuilder:SqlSessionFactoryBuilder的作用在于创建SqlsessionFactory,创建成功后,SqlSessionFactoryBuilder就失去了作用,所以它只能存在于创建SqlsessionFactory的方法中,而不要让其长期存在。
  2. SqlSessionFactory:SqlSessionFactory可以被认为是一个数据库连接池,它的作用是创建SqlSession接口对象;因为Mybatisd的本质就是java对数据库的操作,所以SqlSessionFactory的生命周期在于整个Mybatis的应用之中,所以一旦创建了SqlSessionFactory,就要长期保存它,直至不再使用Mybatis应用,所以可以认为SqlSessionFactory的生命周期就等同于mybatis的应用周期;由于SqlSessionFactory是一个对数据库的连接池,所以它占据着数据库的链接资源,若果创建多个SqlSessionFactory,那么就存在多个数据库连接池,这样不利于数据库资源的控制,也会导致数据库连接资源被消耗光,出现系统宕机等情况,所以尽量避免发生这样的情况,因此自一般的应用中我们希望SqlSessionFactory作为一个单例,让它在应用中被共享。
  3. SqlSession:如果说SqlSessionFactory相当于数据库连接池,那么sqlsession就相当于一个数据库连接对象,你可以在一个事务里面执行多条sql,然后通过它的commit、rollback等方法,提交或者回滚事务,所以它存在一个业务请求中,处理完成整个请求后,应该关闭这条连接,让它归还给SqlSessionFactory,否则数据库资源就很快被消耗精光,系统就会瘫痪
  4. Mapper:Mapper是一个接口,它由SqlSession所创建,所以它的最大生命周期至多和SqlSession保持一致,尽管它很好用,但是由于SqlSession的关闭,它的数据库连接资源也会消失,所以它的生命周期应该小于等于SqlSession的生命周期。Mapper代表的是一个请求中的业务处理,所以它应该在一个请求中,一旦处理完成了相关的业务,就应该废弃它。

猜你喜欢

转载自blog.csdn.net/java_MrZHANG/article/details/84325635
今日推荐