按关键词阅读:
- SqlSessionFactoryBuilder(构造器):它会根据配置或者代码来生成 SqlSessionFactory , 采用的是分步构建的 Builder 模式 。 【SqlSessionFactoryBuilder 的作用在于创建 SqlSessionFactory , 创建成功后 , SqlSessionFactoryBuilder 就失去了作用 , 所以它只能存在于创建 SqlSessionFactory 的方法中 , 而不要让其长期存在】
- SqlSessionFactory(工厂接口):依靠它来生成 SqlSession , 使用的是工厂模式 。 【SqlSessionFactory 可以被认为是一个数据库连接池 , 它的作用是创建 SqlSession 接口对象 。 因为 MyBatis 的本质就是 Java 对数据库的操作 , 所以 SqlSessionFactory 的生命周期存在于整个 MyBatis 的应用之中 , 所以一旦创建了 SqlSessionFactory , 就要长期保存它 , 直至不再使用 MyBatis 应用 , 所以可以认为 SqlSessionFactory 的生命周期就等同于 MyBatis 的应用周期。 我们往往希望 SqlSessionFactory 作为一个单例 , 让它在应用中被共享 。所以说 SqlSessionFactory 的最佳作用域是应用作用域。 】
- SqlSession(会话):一个既可以发送 SQL 执行返回结果 , 也可以获取 Mapper 的接口 。 在现有的技术中 , 一般我们会让其在业务逻辑代码中“消失” , 而使用的是 MyBatis 提供的 SQL Mapper 接口编程技术 , 它能提高代码的可读性和可维护性 。 【SqlSessionFactory 相当于数据库连接池 , 那么 SqlSession 就相当于一个数据库连接(Connection 对象) , 你可以在一个事务里面执行多条 SQL , 然后通过它的 commit、rollback 等方法 , 提交或者回滚事务 。它应该存活在一个业务请求中 , 处理完整个请求后 , 应该关闭这条连接 , 让它归还给 SqlSessionFactory , 否则数据库资源就很快被耗费精光 , 系统就会瘫痪 , 所以用 try...catch...finally... 语句来保证其正确关闭 。】
- SQL Mapper(映射器):MyBatis 新设计存在的组件 , 它由一个 Java 接口和 XML 文件(或注解)构成 , 需要给出对应的 SQL 和映射规则 。 它负责发送 SQL 去执行 , 并返回结果 。 【Mapper 是一个接口 , 它由 SqlSession 所创建 , 所以它的最大生命周期至多和 SqlSession 保持一致 , 尽管它很好用 , 但是由于 SqlSession 的关闭 , 它的数据库连接资源也会消失 , 所以它的生命周期应该小于等于 SqlSession 的生命周期 。Mapper 代表的是一个请求中的业务处理 , 所以它应该在一个请求中 , 一旦处理完了相关的业务 , 就应该废弃它。 】
【SSM工作流程与原理详解】
由上面可以得知 , 我们都知道Spring在整合Mybatis的时候都会配置一个 SqlSessionFactoryBean 对象来生成一个 SqlSessionFactory, 而这个 SqlSessionFactory 就是作为SqlSession(数据库会话)的关键部分 ,那么Spring又怎么把这个对象与DAO接口类关联放在 mapperRegistry 里。@Mapperpublic interface AdminDao {public List login(Auser auser);}
AdminMapper.xml文件select * from ausertable where aname=#{aname} ANDapwd=#{apwd}
使用 Spring 管理 MyBatis 数据操作接口的方式有多种 , 其中最常用、最简洁的一种是基于 MapperScannerConfigurer 的整合 。 该方式需要在 Spring 的配置文件中加入以下内容:
如果理解不了上面橙色标记的话的含义 , 根据上面的代码其实可以理解成:采用 MapperScannerConfigurer 扫描类让dao包的接口和SQL联系起来 , 从而实现调用者通过接口自由使用相关数据库访问操作的功能 。2、为什么要利用Spring来整合MyBatis通过对Spring的讲解可以得知Spring的控制反转机制降低了调用者和被调用者之间的耦合性 , 因此将MyBatis放入Spring容器后开发者只需要进行业务处理 , 不需要再写 SqlSession 对象的创建、数据库事务的处理等烦琐代码 , 提高了开发效率 。
稿源:(未知)
【傻大方】网址:http://www.shadafang.com/c/111T314C2020.html
标题:SSM工作流程与原理详解( 三 )