一【 mybatis的工作流程】

news2024/11/24 3:48:47

目录

    • 一.mybatis执行流程
    • 二.使用工具类简化项目(反射的体现)
    • 2.1 Sqlsession工厂对像
    • 2.2 工具类(可直接放在工具类使用)

在这里插入图片描述

一.mybatis执行流程

1.1 读取主配置文件mybatis-config.xml,获得运行环境和数据库连接。
1.2 加载映射文件,如StudentMapper.xml。
1.3 根据主配置文件mybatis-config.xml构建会话工厂SqlSessionFactory对象。
1.4 根据会话工厂SqlSessionFactory对象创建SqlSession对象,再调用SqlSession对象的各种增删改查方法。比如上一节中的selectList()方法用来查找记录集合。
1.5 底层定义的Executor接口操作数据库。
1.6 底层对输入参数进行映射,在执行sql前将输入的java对象映射到sql中。
1.7 底层将输出结果映射为Java对象。

其中最后三步骤无须程序员参与,MyBatis底层自动执行。

二.使用工具类简化项目(反射的体现)

2.1 Sqlsession工厂对像

  每次在执行sql之前  都要去加载配置文件,过程比较繁琐,即可以封装定义一个工具类getBean 单独放在一个类中,后续调用即可。
public class AppTest {
    SqlSessionFactory factory = null;
    @Before
    public void init(){

        try {
            InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
            factory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    @Test
    public void add() {

        SqlSession sqlSession = factory.openSession(true);
        // 获取接口实现类 多态    动态代理方式  ->代理对象 实现类
        UserMapper userDao = sqlSession.getMapper(UserMapper.class);   // UserDaoImpl@1353456
        System.out.println("userDao = " + userDao);
        User user = new User();
        user.setPassword("99999");
        //user.setUsername("root");
        Integer line = userDao.insertUser(user);
        System.out.println(line>0);
        sqlSession.close();

    }

2.2 工具类(可直接放在工具类使用)

package cn.kgc.utils;

import cn.kgc.reflect.Person;
import cn.kgc.reflect.Student;

import java.lang.reflect.Constructor;

/**
 * @Description: 对象工厂
 */
public class BeanFactory {


    public  static  Object getBean(String path){

        try {
            Class clazz = Class.forName(path);

            Constructor declaredConstructor = clazz.getDeclaredConstructor();
            declaredConstructor.setAccessible(true);
            Object o = declaredConstructor.newInstance();
            return o;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return  null;
    }

    public  static  <T>  T  getBean(String path,Class<T> claz){

        try {
            Class clazz = Class.forName(path);

            Constructor declaredConstructor = clazz.getDeclaredConstructor();
            declaredConstructor.setAccessible(true);
            Object o = declaredConstructor.newInstance();

            return  claz.cast(o);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return  null;
    }


    public static void main(String[] args) {

        //Student student = (Student) getBean("cn.kgc.reflect.Student");
        Student student = getBean("cn.kgc.reflect.Person", Student.class);

        System.out.println("student = " + student);
    }

}

在这里插入图片描述
又是划水的一天 记得三连哈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/346704.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

35.网络结构与模型压缩、加速-2

35.1 Depthwise separable convolution Depthwise separable convolution是由depthwise conv和pointwise conv构成depthwise conv(DW)有效减少参数数量并提升运算速度 但是由于每个feature map只被一个卷积核卷积,因此经过DW输出的feature map不能只包含输入特征图的全部信息,…

【C/C++基础练习题】复习题三

C复习题知识点记录&#xff1a; 在定义结构体类型时&#xff0c;不可以为成员设置默认值。 在公用一个共用体变量时。系统为其分配存储空间的原则是按成员中占内存空间最大者分配 a ,La, "a", L"a" 字符 长字符 字符串 长字符串 布尔类型只有两个值 fal…

蓝桥杯C/C++VIP试题每日一练之2n皇后问题

💛作者主页:静Yu 🧡简介:CSDN全栈优质创作者、华为云享专家、阿里云社区博客专家,前端知识交流社区创建者 💛社区地址:前端知识交流社区 🧡博主的个人博客:静Yu的个人博客 🧡博主的个人笔记本:前端面试题 个人笔记本只记录前端领域的面试题目,项目总结,面试技…

C语言(文件,流,键盘输入和输出以及文件结尾)

目录 一.文件 二.流 三.输入和输出 二.文件结尾 一.检测方法 二.不同的操作系统&#xff0c;文件结束方式 3.使用scanf检测EOF 一.文件 文件&#xff08;file&#xff09;是存储器中存储信息的区域。通常&#xff0c;文件都保存在某种永久存储器中。文件对于计算机系统相当重要…

【C++之容器适配器】栈和队列模拟实现

目录前言一、栈(stack)1. 基本代码结构2. 简介3. 成员类型4. 成员函数1. 构造函数2. empty()3. size()4. top()5. push()6.pop()7. 综合测试实现的stack的所有函数接口二、队列(queue)1. 基本代码结构2. 队列的简介3. 成员类型4. 成员函数1. 构造函数2. empty()3. size()4. fro…

leaflet 上传KML文件,导出geojson文件(065)

第065个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中本地上传kml文件,利用解析此kml文件,在地图上显示图形。点击导出geojson,将下载为geojson文件。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代…

ChatGPT 怎么用最新详细教程-新手小白一看就会

ChatGPT 以其强大的信息整合和对话能力惊艳了全球&#xff0c;在自然语言处理上面表现出了惊人的能力。这么强大的工具我们都想体验一下&#xff0c;那么 ChatGPT 怎么用呢&#xff1f;本文将给你逐步详细介绍。使用 ChatGPT 主要有4步&#xff1a;注册 ChatGPT 账号通过短信接…

vue 开发环境 卸载node 版本 切换新的 node 版本 mac电脑

注意&#xff1a;操作的机器当前是mac&#xff0c;先卸载&#xff0c;再安装 1.查看现有 node 版本 node -v2.卸载现有 node 版本&#xff0c; 1.卸载从node官网下载pkg安装的node sudo rm -rf /usr/local/{bin/{node,npm},lib/node_modules/npm,lib/node,share/man/*/node…

地址空间 (Address Space)

文章目录&#xff1a;程序地址空间进程地址空间程序地址空间 什么是地址空间&#xff1a;地址空间是内存中可供程序或进程使用的有效地址的范围。也就是说&#xff0c;它是程序或进程可以访问的内存。内存可以是物理的、也可以是虚拟的&#xff0c;用于执行指令和存储数据。 …

nginx开启Gzip压缩,Vue性能优化之使用gzip压缩打包

一、前言不管是vue项目还是react项目在使用webpack打包之后都会生成一个动辄一两兆甚至更大的js文件&#xff0c;在某些情况下严重影响项目性能&#xff0c;打开页面的时候白屏时间会很长&#xff0c;本文将介绍如何使用gzip压缩打包&#xff0c;主要是nginx部署的配置&#xf…

hadoop环境新手安装教程

1、资源准备&#xff1a; &#xff08;1&#xff09;jdk安装包&#xff1a;我的是1.8.0_202 &#xff08;2&#xff09;hadoop安装包&#xff1a;我的是hadoop-3.3.1 注意这里不要下载成下面这个安装包了&#xff0c;我就一开始下载错了 错误示例&#xff1a; 2、主机网络相…

天荒地老修仙功-第六部:Spring Cloud中7中负载均衡策略

文章目录前言Ribbon介绍负载均衡设置七种负载均衡策略1、轮询策略2、权重策略3、随机策略4、最小链接数策略5、重试策略6、可用性敏感策略7、区域敏感策略总结前言 负载均衡器通常有两种实现手段&#xff0c;一种是服务端负载均衡器&#xff0c;另一种是客户端负载均衡器&…

线程池的常见知识点总结

文章目录1. 什么是线程池2. 为什么使用线程池3. 线程的作用4. 如何创建线程池5. 线程持底层是如何实现复用的6. 手写一个简易的线程池7. ThreadPoolExecutor构造函数原理8. 线程池创建的线程会一直运行下去吗&#xff1f;9. 线程池队列满了任务会丢失吗&#xff1f;分析情况有界…

xilinx srio ip学习笔记之axistream接口

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 xilinx srio ip学习笔记之axistream接口前言接口转化前言 srio 的IQ接口都是基于axistream的&#xff0c;以前没怎么用过axistream的接口&#xff0c;或者说没怎么用过复杂条…

C语言--数据的存储2

目录前言练习有符号类型与无符号类型char类型的取值范围有符号char无符号char有符号与无符号类型混合运算有符号无符号类型形成的bugchar类型取值范围应用浮点型在内存中的存储浮点数的存储浮点数存储规则浮点数取出规则前言 上篇文章我们讲解了数据类型&#xff0c;类型的基本…

招标采购流程的电子招标采购,是管理复杂供应链和多层供应商的高效方式。

负载均衡&#xff08;Load Balance&#xff09; 由于目前现有网络的各个核心部分随着业务量的提高&#xff0c;访问量和数据流量的快速增长&#xff0c;其处理能力和计算强度也相应地增大&#xff0c;使得单一的服务器设备根本无法承担。在此情况下&#xff0c;如果扔掉现有设…

(二)、安装uview及配置项中的易错项【uniapp+uinicloud多用户社区博客实战项目(完整开发文档-从零到完整项目)】

1.打开hbuilder软件&#xff0c;新建uniapp项目 2.关联unicloud服务空间 2.1 项目文件夹鼠标右键&#xff0c;打开uicloud web控制台 2.2 注册HBuilder 账号 dcloud账号注册链接 2.3 新建服务空间 大约等待2分钟&#xff0c;服务空间初始化完毕&#xff01;就可以使用了。 …

每天10个前端小知识 【Day 15】

前端面试基础知识题 1.两个同级的相邻元素之间&#xff0c;有看不见的空白间隔&#xff0c;是什么原因引起的&#xff1f;有什么解决办法&#xff1f; 行框的排列会受到中间空白&#xff08;回车空格&#xff09;等的影响&#xff0c;因为空格也属于字符,这些空白也会被应用样…

Mob研究院联合明源地产研究院发布《2022年商业地产发展白皮书》

Mob研究院近日联合明源地产研究院共同发布《2022年商业地产发展白皮书》&#xff0c;报告从行业现状、企业概况、新兴业态和未来展望四个方面对商业地产行业进行了全景扫描&#xff0c;深入分析了由于疫情的影响以及消费人群和习惯的改变&#xff0c;2022年商业地产行业中所发生…

Ubuntu 22.04安装搜狗输入法

Ubuntu 22.04安装搜狗输入法 ubtuntu 22.04安装搜狗输入法 1. 添加中文语言支持2. 安装fcitx输入法框架3. 设置fcitx为系统输入法4. 设置fcitx开机启动&#xff0c;并卸载ibus输入法框架5. 安装搜狗输入法6. 重启电脑&#xff0c;调出搜狗输入法 1. 添加中文语言支持 Setti…