首页 > 其他分享 >mybatis执行时原理的简单分析

mybatis执行时原理的简单分析

时间:2023-12-10 21:44:37浏览次数:22  
标签:sqlSessionFactory 映射 dao 代理 sqlSession 简单 mybatis 原理 我们

  • 前置知识:mybatis中配置文件的解析
  • 自定义实现类的方式
  • 动态代理生成代理类的方式

mybatis中配置文件的解析

解析xml文件的技术有很多,我们不需要全部去掌握,但是我们要知道我们的xml文件通过解析可以得到什么

可以发现通过我们解析得到的这2个信息就可以实现我们jdbc的操作了。我们可以通过映射信息,通过方法名寻找他要执行的sql语句,然后将找到的sql语句放到预处理对象的方法中去执行就可以了

构建者模式创建sqlSessionFactory

构建者模式可以将我们对象的构建和表示隔离开来,一般用于复杂对象的创建

自定义dao实现类

在这种方式下由我们自己去完成dao的实现类
SqlSesson接口是我们mybatis框架中数据库操作的核心接口,它里面定义了关于操作数据库的一些列方法,包含获取/关闭连接,增删改查方法等等,

  • 执行过程分析

  • 实现类举例

public class UserDaoImpl implements UserDao {
    //定义工厂用于创建sqlSession对象
    private SqlSessionFactory sqlSessionFactory;



    public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }
    @Override
    public List<User> findAll() {
        //工厂创建sqlSession对象
        final SqlSession sqlSession = sqlSessionFactory.openSession();
        final List<User> users = sqlSession.selectList("com.atheima.dao.UserDao.findAll");//参数是映射的key
        sqlSession.close();
        return users;
    }

我们的sqlSession中定义了增删改查的方法,所以我们需要在实现类中调用sqlSession中的方法完成我的操作。在这之前需要解析配置文件,然后完成相关数据的封装(主要为连接信息的封装和映射信息的封装),从上面执行流程的分析可以看到sqlSession.selectList("com.atheima.dao.UserDao.findAll");//参数是映射的key通过映射找到相应的sql,然后将需求一层层向下传递,最终还是交给了jdbc的preparedStatement对象执行,并封装相应的结果集

动态代理生成代理类的方式

和自定义dao实现类最大的区别是由动态代理生成实现类,此时我们的代理类就是实现类。这样我们就可以不写实现类,也是用到最多的

这张图主要是分析动态代理的过程,因为后面就和前面一样的了。我们通过getMapper()生成代理对象。我们不需要使用sqlSession对象调用相应的方法,这一切都通过动态代理在其内部帮我们实现了

是否可以认为我们的映射文件所表示的映射关系就是我们的代理对象

  • 也不知道我理解的是不是增强的?
    代理对象中的方法的内容是,1.调用被代理类中被代理的方法2。执行增强部分的逻辑。而我们的映射文件所表示的信息是.
    Map((具体方法),(方法中执行的sql语句和返回类型)),而这个关系简直就和我们的代理类中的结构一摸一样。所以我们也将dao接口和映射文件都称为mapper。因为他们从本质上来说就是一个映射关系

标签:sqlSessionFactory,映射,dao,代理,sqlSession,简单,mybatis,原理,我们
From: https://www.cnblogs.com/swtaa/p/17893177.html

相关文章

  • autofs - 工作原理 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/filesystems/autofs.htmlautofs-工作原理目的autofs的目标是提供按需挂载和无竞争的自动卸载各种其他文件系统。这提供了两个关键优势:无需延迟引导,直到所有可能需要的文件系统都被挂载。尝试访问这些慢文件系统的进程可能会延迟,但......
  • Spring Boot 3 集成 MyBatis详解
    MyBatis是一款开源的持久层框架,它极大地简化了与数据库的交互流程。与类似Hibernate的ORM框架不同,MyBatis更具灵活性,允许开发者直接使用SQL语句与数据库进行交互。SpringBoot和MyBatis分别是两个功能强大的框架,它们的协同使用可以极大地简化数据访问层的开发,提高整体的开发效率。......
  • 通过宿主机查看K8S或者是容器内的Java程序的简单方法
    通过宿主机查看K8S或者是容器内的Java程序的简单方法背景最近一个项目的环境出现了cannotcreatenativeprocess的错误提示出现这个错误提示时,dockerexec或者是kubeexec进入容器/POD内部后,无法使用jstack等的命令.然后想简单查看一下问题原因都无从下手.这次......
  • VUE框架CLI组件化全局事件总线实现原理------VUE框架
    <template> <div> <!--内置函数的实现步骤--> <!--提供事件源,给事件源绑定事件,编写回调函数,将回调函数和事件进行绑定--> <!--等待事件的触发,事件触发执行回调函数--> <!--组件的自定义事件实现步骤--> <button@click="Hello()">你好</button> <!--给Us......
  • mybatis-plus
    查询:LambdaQueryWrapper<HarmBehavorInfo>wrapper=newLambdaQueryWrapper<>();wrapper.eq(HarmBehavorInfo::getOnlyId,dictId);wrapper.eq(HarmBehavorInfo::getDeleteFlag,0);HarmBehavorInfoharmBehavorInfo=har......
  • mysql的锁机制运行原理是什么
    MySQL的锁机制是数据库管理系统用来协调多个并发事务对共享资源(例如数据库表)进行访问的一种方式。MySQL支持多种锁类型,包括共享锁和排它锁。以下是MySQL锁机制的一些基本原理:锁的类型:共享锁(SharedLock):多个事务可以同时持有共享锁,用于读取共享资源,不阻塞其他事务的共享锁。排它锁(E......
  • C# 使用AES实现简单的加解密
    加密://使用SHA-256哈希函数处理秘钥varhashedKey=GetSHA256Hash(publicKey);//加密varencryptString=EncryptStringToBytes_Aes(strs,hashedKey);staticstringGetSHA256Hash(stringinput){using(SHA256sha256=SHA256.Create()){byte......
  • 使用Vue和Element UI进行文件上传的简单教程
    当使用Vue和ElementUI进行文件上传时,你可以按照以下步骤进行操作:步骤1:安装Vue和ElementUI在你的Vue项目中使用npm或者yarn安装Vue和ElementUI:npminstallvueelement-ui步骤2:创建上传组件创建一个Vue组件来处理文件上传的逻辑。在组件的<template>中添加一个文件上传的按钮和......
  • MFC CListVtrl 控件简单测试
    ▲样式Demo关联控件变量m_CList,在属性中将视图(View)设置成Report(报表)模式。在BOOLCMFCApplication4LlisBoxDlg::OnInitDialog()初始化函数中添加测试代码://TODO:在此添加额外的初始化代码//m_CList.SetView(1);//视图View要改成Report报表模式//设置风格样......
  • 电磁炉的工作原理?
    电磁炉的工作原理?把一根钢丝通电后会有一个很小的磁场,小到连钉子都吸不住。把它卷成一圈就有环绕的一圈小磁场,在多卷成几圈,磁场的大小是电压的大小决定的。切换电池的正负改变,就是改变磁场的南北极。把一个铁棒放入当中,铁棒里的小电子会跟磁场的的南北极来转换。如果......