• mybatis


    作用域 生命周期

     

      依赖注入框架可以创建线程安全的、基于事务的 SqlSession 和映射器,并将它们直接注入到你的 bean 中,因此可以直接忽略它们的生命周期。

    SqlSessionFactoryBuilder

      局部变量,用于创建SqlSessionFactory
    SqlSessionFactory

       应用运行期间
    SqlSession

      每个线程应该有自己的SqlSession,非线程安全,不能共享,所以它的最佳的作用域是请求或方法作用域
      如果你现在正在使用一种 Web 框架,要考虑 SqlSession 放在一个和 HTTP 请求对象相似的作用域中
      换句话说,每次收到的 HTTP 请求,就可以打开一个 SqlSession,返回一个响应,就关闭它。

      try (SqlSession session = sqlSessionFactory.openSession()) {
      // 你的应用逻辑代码 确保资源可以关闭
      }

     

    映射器实例(mapper)

    映射器接口的实例是从 SqlSession 中获得的,因此从技术层面讲,映射器实例的最大作用域是和请求它们的 SqlSession 相同的。
    最佳作用域是方法作用域
    用过之后,无需显式关闭,在整个请求作用域内也没有问题

     

    日志 

      默认检测顺序

    SLF4J
    Apache Commons Logging
    Log4j 2
    Log4j
    JDK logging

    你也可以调用如下任一方法来使用日志工具,需要保证该日志包已经加装,否则无效

    org.apache.ibatis.logging.LogFactory.useSlf4jLogging();
    org.apache.ibatis.logging.LogFactory.useLog4JLogging();
    org.apache.ibatis.logging.LogFactory.useJdkLogging();
    org.apache.ibatis.logging.LogFactory.useCommonsLogging();
    org.apache.ibatis.logging.LogFactory.useStdOutLogging();

    MyBatis-Spring

    1. 它将允许 MyBatis 参与到 Spring 的事务管理之中
    2. 创建映射器 mapper 和 SqlSession 并注入到 bean 中
    3. 以及将 Mybatis 的异常转换为 Spring 的 DataAccessException
    4. 最终,可以做到应用代码不依赖于 MyBatis,Spring 或 MyBatis-Spring。

    SqlSessionTemplate

    <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
      <property name="mapperInterface" value="org.mybatis.spring.sample.mapper.UserMapper" />
      <property name="sqlSessionFactory" ref="sqlSessionFactory" />
    </bean>

    MapperFactoryBean 将会负责 SqlSession 的创建和关闭。如果使用了 Spring 的事务功能,那么当事务完成时,session 将会被提交或回滚。最终任何异常都会被转换成 Spring 的 DataAccessException 异常。

    spring-mybatis中会忽略mybatis配置文件中的environments、DataSource、transactionManager ,SqlSessionFactoryBean 会创建它自有的 MyBatis 环境配置(Environment),并按要求设置自定义环境的值

    如果 MyBatis 在映射器类对应的路径下找不到与之相对应的映射器 XML 文件,那么也需要配置文件
      第一种是手动在 MyBatis 的 XML 配置文件中的 <mappers> 部分中指定 XML 文件的类路径;
      第二种是设置工厂 bean 的 mapperLocations 属性。


    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
      <property name="dataSource" ref="dataSource" />
      <property name="mapperLocations" value="classpath*:sample/config/mappers/**/*.xml" /> //支持递归查找
    </bean>

    注入一个sqlSession的bean 

    @Bean
    public SqlSessionTemplate sqlSession() throws Exception {
      return new SqlSessionTemplate(sqlSessionFactory());
    }

      

    在事务处理期间,一个单独的 SqlSession 对象将会被创建和使用。当事务完成时,这个 session 会以合适的方式提交或回滚

    SqlSessionTemplate 是线程安全的,可以被多个 DAO 或映射器所共享使用。

    SqlSessionDaoSupport

    SqlSessionDaoSupport 是一个抽象的支持类,用来为你提供 SqlSession。调用 getSqlSession() 方法你会得到一个 SqlSessionTemplate,之后可以用于执行 SQL 方法,就像下面这样:

    public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
      public User getUser(String userId) {
        return getSqlSession().selectOne("org.mybatis.spring.sample.mapper.UserMapper.getUser", userId);
      }
    }
  • 相关阅读:
    利用Bootstrap快速搭建个人响应式主页(附演示+源码)
    Socket实现仿QQ聊天(可部署于广域网)附源码(2)-服务器搭建
    Socket实现仿QQ聊天(可部署于广域网)附源码(1)-简介
    开拓思维,如何用编程思想进行三维建模(2)
    开拓思维,如何用编程思想进行三维建模(1)
    浅谈Winform事件的实现以及模拟其事件的实现(附实现源码)
    Winform实现Shp-栅格图形文件的读取与显示(外加shp转WKB格式存入oracle)附源码
    本地MVC项目发布到IIS服务器
    Asp.net mvc4 安装报错处理方法(x80070005 拒绝访)
    MySql 主从复制及主主复制
  • 原文地址:https://www.cnblogs.com/siqi/p/11336508.html
Copyright © 2020-2023  润新知