当前位置:首页 > 技术分析 > 正文内容

ORM 框架mybatis-plus 初始化过程详细说明

ruisui883个月前 (01-21)技术分析24

为了您更好的阅读互动体验,为了您及时看到更多内容,点个“关注”,我们每天为您更新技术知识、分享SpringBoot,Vue,hadoop,架构等,后续还会推出视频课程,基于ruoyi-cloud实现项目讲解!

MyBatis 的初始化过程主要包括以下几个步骤:

  1. 创建 SqlSessionFactoryBuilder 对象 当有了 XML 配置文件之后(关于数据源等一些基本配置),我们就可以使用MyBatis 提供的 SqlSessionFactoryBuilder 类的 build() 方法基于 XML 配置文件构建出 SqlSessionFactory 实例。
  2. 生成 Configuration 对象 在创建 SqlSessionFactory 实例的过程中,一份全局的配置数据 Configuration 也就产生了,这份配置包括了数据库连接池、事务管理器、已映射语句(Mapped Statement )、映射器(Mapper)接口及其实现等等。
  3. 解析 mapper 文件 MyBatis 初始化期间会将 SQL 语句或存储过程映射文件以及接口注册到 Configuration 对象中,这样 MyBatis 就知道了 SQL 语句,知道了参数类型,以及返回值类型。
  4. 生成 SqlSessionFactory 对象 当 Configuration 对象初始化完成之后,就可以创建 SqlSessionFactory 对象,它是数据库的连接池。
  5. 创建 SqlSession 对象 当进行具体的 SQL 操作时,我们会从 SqlSessionFactory 中获取 SqlSession ,然后再通过 SqlSession 获取 Mapper 来进行具体操作。SqlSession 对象代表和数据库的一次对话。
  6. 解析 Mapper 接口方法 操作数据库需要调用 SqlSession 的 api,为了简化操作,MyBatis 提供了反射和动态代理的技术封装 API,它可以根据接口定义和 XML 文件生成需要的 api。

初始化过程完成后,MyBatis 就可以使用了,你可以通过 sqlSession.getMapper(Class) 来获取 Mapper 对象,然后进行数据库操作。

这里是一个MyBatis初始化实例代码,从创建SqlSessionFactory到获取SqlSession的过程:

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

public class MyBatisInitExample {

  public static void main(String[] args) throws Exception {
    String resource = "org/mybatis/example/mybatis-config.xml"; // 这里要写你自己的mybatis配置文件路径
    InputStream inputStream = Resources.getResourceAsStream(resource);
    
    // Step1: 创建SqlSessionFactory
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

    // Step2: 从SqlSessionFactory获取SqlSession
    try (SqlSession session = sqlSessionFactory.openSession()) {
      // Step3: 获取Mapper对象,并执行数据库操作
      UserMapper mapper = session.getMapper(UserMapper.class);
      User user = mapper.selectUser(1);
      System.out.println(user.getName());
    }
  }

}

interface UserMapper {
  User selectUser(int id);
}

class User {
  private int id;
  private String name;

  public int getId() {
    return id;
  }

  public String getName() {
    return name;
  }
  // 其他getter、setter方法省略
}


扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/441.html

标签: c# orm框架
分享给朋友:

“ORM 框架mybatis-plus 初始化过程详细说明” 的相关文章

面试官:聊聊你知道的Vue与React的区别

最近面到很多大公司的时候,小编都会碰到一个很尴尬的问题,很多大公司的技术栈都是React,但是小编学的是Vue,其实从本质上来说两者都是比较优秀的前端框架,所以有些面试官会问到Vue和React的区别。小编认真整理了一些自己所知道的Vue和React的区别,给大家分享分享。1. 模板语法 vs JS...

身体越柔软越好?刻苦拉伸可能反而不健康 | 果断练

坐下伸直膝盖,双手用力向前伸,再用力……比昨天前进了一厘米,又进步了! 这么努力地拉伸,每个人都有自己的目标,也许是身体健康、线条柔美、放松肌肉、体测满分,也可能为了随时劈个叉,享受一片惊呼。 不过,身体柔软,可以享受到灵活的福利,也可能付出不稳定的代价,并不是越刻苦拉伸越好。太硬或者太软,都不安全...

全新斯柯达柯珞克Karoq深度评测:大众替代品

“斯柯达柯珞克是一款出色的全能家庭 SUV,具有许多有用的功能”价格36,605 英镑- 49,190 英镑优点方便的 VarioFlex 后排座椅非常适合家庭入住驾驶乐趣缺点保修期短保守的内饰性格比Yeti少结论——斯柯达柯珞克是一辆好车吗?斯柯达柯珞克是在辉煌的七座 斯柯达柯迪亚克之后推出的,因...

最快清除数组空值?分享 1 段优质 JS 代码片段!

本内容首发于工粽号:程序员大澈,每日分享一段优质代码片段,欢迎关注和投稿!大家好,我是大澈!本文约 600+ 字,整篇阅读约需 1 分钟。今天分享一段优质 JS 代码片段,用最简洁的代码清除了数组中的空值。老规矩,先阅读代码片段并思考,再看代码解析再思考,最后评论区留下你的见解!const arr...

Vue进阶(幺叁捌):vue路由传参的几种基本方式

1、动态路由(页面刷新数据不丢失)methods:{ insurance(id) { //直接调用$router.push 实现携带参数的跳转 this.$router.push({ path: `/particulars/${id}`,...

深入理解vue-router原理

说到vue-router就表明他只适合于vue和vue是强绑定的关系;不适合其他框架;现在我们模仿实现一个VueRouter;1.要使页面刷新;借助vue本身的响应式原理;import Home from "./views/Home"; import About from "...