MyBatis-获取sql会话的两种风格

本文介绍了MyBatis中获取SqlSession的两种方式:使用XML配置文件和纯Java方式。XML配置方式下,详细阐述了配置规范、生命周期以及SqlSession的获取与使用。而纯Java方式则因较低的可维护性和扩展性,通常不推荐在实际项目中使用。文章提供了相关的配置类和测试步骤示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用xml配置文件的方式获取sql会话

步骤规范说明

  • config
    根据ibatis全局配置规范,设定满足当前环境的配置.
  • Resources
    若是单独测试环境,可使用ibatis内置的便捷资源加载类对象
    org.apache.ibatis.io.Resources
    若是整合的环境,根据特定需求,选择的使用资源加载的方式.
  • SqlSessionFactoryBuilder
    创建sql会话创建工厂实例,以此来创建sql会话工厂,
    org.apache.ibatis.session.SqlSessionFactoryBuilder
    • SqlSessionFactoryBuilder的生命周期应当在局域作用域内;
      method-scope.
    • 其主要作用就是生成SqlSessionFactory对象.
      当其完成任务后,就没有存在的意义了.
  • SqlSessionFactory
    使用sql会话工厂实例,打开sql会话的实例.可参考的类对象为:
    org.apache.ibatis.session.SqlSessionFactory
    • SqlSessionFactory应当存在于ibatis应用的整个生命周期;
      application-scope
    • 建议且应当使用单例模式创建其类对象的实例;
  • SqlSession
    sql会话工厂实例获取后,可通过其来获取sql会话实例,
    以此来与数据库建立连接关系,从而进行所需的数据操作.
    可参考的类对象为:
    org.apache.ibatis.session.SqlSession
    • SqlSession类对象实例应当存在于局部作用域中;
      method-scope.
    • 它是非线程安全的,涉及多线程的时候,要考虑线程安全性的问题.
    • 若不使用当前的SqlSession实例时,要及时的关闭资源连接.
  • Mapper
    • 映射器是个接口,没有任何实现类;
    • 作用主要是执行sql语句,返回执行结果;
    • 作用域应当包含在sqlSession的范围之内;
    • 当使用新式的mapper接口方式的时候,就需要使用到
      Mapper接口的动态代理实现类,来便捷的操作数据库中的数据.

测试步骤主要截取

  • 全局配置文件
      <configuration>
      	<properties resource="siye/ibatis/config/db.properties" />
      	<settings>
      		<setting name="mapUnderscoreToCamelCase" value="true" />
      	</settings>
      	<environments default="test">
      		<environment id="test">
      			<transactionManager type="JDBC" />
      			<dataSource type="POOLED">
      				<property name="driver" value="${jdbc.driver}" />
      				<property name="url" value="${jdbc.url}" />
      				<property name="username" value="${jdbc.username}" />
      				<property name="password" value="${jdbc.password}" />
      			</dataSource>
      		</environment>
      	</environments>
      
      	<mappers>
      		<mapper resource="siye/ibatis/dao/WayOldUse.xml" />
      		<package name="siye.ibatis.dao" />
      	</mappers>
      </configuration>
    
  • 主要测试类片段截取
    // 加载配置,获取sqlSessionFactory实例.
    String path = "siye/ibatis/config/config.xml";
    InputStream is = Resources.getResourceAsStream(path);
    factory = new SqlSessionFactoryBuilder().build(is);
    
    SqlSession session = factory.openSession(true);
    Connection connection = session.getConnection();
    log.info(connection);
    session.close();
    

使用纯java的方式获取sql会话

参考说明

仅作了解,一般不建议使用此种方式,来使用ibatis操作数据库.

  • 可维护性较低,因为java本身的硬编码特性;
  • 后期扩展任务繁重,导致增加任务量;
  • 仅作了解,不建议使用;

使用规范参考

  • Properties
    java类库中,内置的处理属性配置文件的类对象.
    使用此类对象来加载数据库连接文件,或设置其文件;
    可参考:java.util.Properties
  • PooledDataSource
    • 数据源配置类对象,建议使用的模式.
      使用此类对象,创建带有连接池特性的数据源,
      便于连接资源的有效利用.
      可参考:
      org.apache.ibatis.datasource.pooled.PooledDataSource
    • 也有其他模式选择,可参考DataSource的具体实现类;
      javax.sql.DataSource
  • JdbcTransactionFactory
    设置数据库连接的事务管理的模式;
    一般都选择JDBC.具体路径为:
    org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory
  • Environment
    用来包装ORM框架配置环境的信息
    可参考的类对象具体路径为:
    org.apache.ibatis.mapping.Environment
    • 环境的唯一标识符
    • 事务管理的方式
    • 数据源方式的设定
  • Configuration
    用来包装配置环境,其具体路径为:
    org.apache.ibatis.session.Configuration
  • SqlSessionFactoryBuilder
    省略
  • SqlSessionFactory
    省略
  • SqlSession
    省略
  • Mapper
    省略

测试步骤主要片段截取

  • 无需配置文件,纯java的方式;
    若是配置了数据库连接信息的属性配置文件,
    指明其具体的存储路径即可;
  • 纯java代码连接测试的片段截取
      String path = "siye/ibatis/config/db.properties";
      InputStream is = Resources.getResourceAsStream(path);
      Properties props = new Properties();
      props.load(is);
      
      PooledDataSource pooledDataSource = new PooledDataSource(
      		props.getProperty("jdbc.driver"), props.getProperty("jdbc.url"),
      		props.getProperty("jdbc.username"),
      		props.getProperty("jdbc.password"));
      
      JdbcTransactionFactory jdbcTransactionFactory =
      		new JdbcTransactionFactory();
      
      Environment environment = new Environment("test",
      		jdbcTransactionFactory, pooledDataSource);
      
      Configuration configuration = new Configuration(environment);
      configuration.setMapUnderscoreToCamelCase(true);
      // ... 中间还可设置其他配置项.譬如, addMappers() .
      
      factory = new SqlSessionFactoryBuilder().build(configuration);
      SqlSession session = factory.openSession(true);
      Connection connection = session.getConnection();
      
      log.info(connection);
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值