当前位置: 首页 > article >正文

[JAVA]MyBatis框架—如何获取SqlSession对象实现数据交互(基础篇)

假设我们要查询数据库的用户信息,在MyBatis框架中,首先需要通过SqlSessionFactory创建SqlSession,然后才能使用SqlSession获取对应的Mapper接口,进而执行查询操作

在前一章我们学习了如何创建MyBatis的配置文件mybatis.config.xml,本章我们要学习创建SqlSessionFactory读取mybatis.config.xml配置信息(数据库驱动,连接URL,用户名和密码)来建立与数据库的连接基础。它是创建SqlSession对象的工厂,而SqlSession对象是与数据库进行实际交互的关键,是用于执行SQL语句,管理事务以及获取映射器(Mapper)的核心接口

如果没有SqlSessionFactory,就无法获取SqlSession,也就不能执行诸如查询,插入,更新和删除等数据库操作

 前一章MyBatis的配置文件mybatis-config.xml配置内容为:

0bc27116664742d2aca0aa70a57c57ab.png

我们在IDEA中用代码演示如何创建SqlSession对象,首先我们要打开pom.xml文件,为了测试的方便引入单元测试组件junit,junit是Java中单元测试框架通过单元测试可以了解我们程序的运行情况

 <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>4.12</version>
 </dependency>

在引用以后,我们打开test下java这个目录,新建包名为com.test.mybatis,test这个包保存的就是我们一个个的单元测试类

8d758f1e5e7741f889d47e4efd79759d.png

在这个包下,再创建一个名为MyBatisTestor单元测试类

04213a5c6ccf40d68d0aa2b6c49cdad2.png

该类的代码内容创建如下: 

package com.test.mybatis;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.sql.Connection;

//JUNIT单元测试类
public class MybatisTestor {
    @Test
    public void testSqlSessionFactory() throws IOException {
        //利用Reader加载classpath下的mybatis—config.xml核心配置文件
        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
        //初始化SqlSessionFactory对象,同时解析mybatis—config.xml文件
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        System.out.println("SessionFactory加载成功");
        SqlSession sqlSession = null;
  try{
        //创建SqlSession对象,SqlSession是JDBC的扩展类,用于与数据库交互
        sqlSession = sqlSessionFactory.openSession();
       //创建数据库连接(测试用)
       Connection connection = sqlSession.getConnection();
       System.out.println(connection);
       }catch(Exception e){
       e.printStackTrace();
       }finally{
       //如果sqlSession不等于null,则代表创建成功
       if(sqlSession !=null){
       //如果type="POOLED",代表使用连接池,close则是将连接回收到连接池中
       //如果type="UNPOOLED",代表直连,close则会调用Connection.close()方法关 
      闭连接
       sqlSession.close();
  }
}
}

 代码语句功能实现解析 

Reader reader = Resources.getResourceAsReader("mybatis-config.xml");

 这行语句主要实现以字符流的方式进行读取,读取mybatis-config.xml文件的代码 

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);

而这段语句则是利用构造者模式SqlSessionFactoryBuilder初始化SqlSessionFactory对象,通过构造者模式的.build方法将reader对象传入,它就会通过reader对象解析和读取MyBatis的核心配置文件(mybatis-config.xml),并且返回对应的sqlSessionFactory对象 

然后需要我们利用sqlSessionFactory.openSession根据mybatis-config.xml描述的配置信息得到SqlSession对象,用于与数据库交互,SqlSession对象我们把它形象的看作是一个底层的数据库连接,在Mybatis中,利用SqlSession对数据表进行增删改查操作

//openSession()方法是SqlSessionFactory提供的用于创建SqlSession方法
SqlSession sqlSession = sqlSessionFactory.openSession();

当我们进行数据库操作的时候,我们可以利用SqlSession提供的一系列方法来完成交互, 引用.getConnection来得到数据库连接对象,之后将connection对象打印出来,演示创建数据库连接的过程,在正常开发时是由Mybatis自动帮我们完成的,我们并不需要用到这行代码,这里为了方便大家理解只做演示使用

Connection connection = sqlSession.getConnection();
System.out.println(connection);

运行得到结果

f7e079c1c18b4f75b59cf4c31002c1e5.png

数据库连接已经能够正常创建,说明我们mybatis.config.xml所描述的信息是正确的

对于数据库来说,有创建连接数据库就要有关闭数据库的操作,目前我们实现了数据库连接,那么如何对数据库进行关闭呢?我们对下面这组代码进行try-catch异常检查并实现关闭数据库操作代码

SqlSession sqlSession = null;
try{
    //创建SqlSession对象,SqlSession是JDBC的扩展类,用于与数据库交互
    sqlSession = sqlSessionFactory.openSession();
    //创建数据库连接(测试用)
    Connection connection = sqlSession.getConnection();
    System.out.println(connection);
    }catch(Exception e){
    e.printStackTrace();
    }finally{
    //如果sqlSession不等于null,则代表创建成功
    if(sqlSession !=null){
    //如果type="POOLED",代表使用连接池,close则是将连接回收到连接池中
    //如果type="UNPOOLED",代表直连,close则会调用Connection.close()方法关闭连接
    sqlSession.close();
  }
}

以上我们就完成了初始化sqlSessionFactory以及得到sqlSession对象的一些操作

 


http://www.kler.cn/a/397206.html

相关文章:

  • CSS Modules中的 :global
  • C函数如何返回参数lua使用
  • Redis下载历史版本
  • 【计算机网络】TCP网络特点2
  • 基于Matlab的碎纸片的自动拼接复原技术
  • git常用命令+搭vscode使用
  • 使用 ts-node 运行 ts文件,启动 nodejs项目
  • 八、鸿蒙开发-网络请求、应用级状态管理
  • 去地面算法——depth_clustering算法调试(1)
  • 视频孪生技术在金融银行网点场景中的应用价值
  • 使用json配置动态区间及动态执行公式
  • IOPaint模型部署教程
  • 【图像压缩感知】论文阅读:Content-Aware Scalable Deep Compressed Sensing
  • Oracle EBS FORM界面获取某LOV的方法
  • CentOS 源码安装FFmpeg
  • 【Qt】报错error: undefined reference to `vtable for的最简单解决
  • 企业选择CPU服务器都有哪些用途?
  • 内部排序和外部排序以及常见算法和时间复杂度
  • C# VS的常用功能(一) 视图篇
  • 小地图(二)
  • yaml的学习记录
  • 我们是如何实现 TiDB Cloud Serverless 的 - 成本篇
  • Java爬虫(HttpURLConnection)详解
  • 分布式----Ceph部署
  • 动态规划不同维度分析leetcode198.打家劫舍问题
  • 如何选择国产化CMS来建设政务网站?