Mybatis执行流程(下)------Dao层详解

2023-10-27

Mybatis执行流程(下)------Dao层详解

Mapper简介:

  • 上文结尾在项目中发现会用到Dao层的mapper接口和映射文件等。这是因为在之前开发中有很多冗余的工作,比如要实现100个增删查改的方法,除了本身的业务逻辑代码,还要存在开启,提交事务这种重复性的动作,于是就有了使用Mapper来写好接口后,不需实现接口,直接完成相关功能的高效开发。
  • 废话不多说,首先通过代码示例来简单了解Mybatis中如何用代理模式帮助我们的!之后在通过项目了解mapper在项目中发挥了怎样的作用。

一、代理模式简介

代理模式(Proxy),说白了,就是你想增强某业务类(比如增加一条数据)的功能,例如想让它拥有可以自己开启、提交事务的功能。但是秉承着编程中的一个思想:***不要随意去修改别人已经写好的代码或者方法,***所以多写一个类用来整合你的业务类和新增功能类。

代理模式分为静态和动态两种:
1、静态代理代码
//接口(通过接口访问目标业务类)
public interface Itf_person{
    void adddata();
}
---------------------------------------------
//想要访问的目标业务类(增加一个数据的类)
public class Person implements Itf_person{
    public void add(){
        System.out.println("增加一条数据")}
}
---------------------------------------------
//想要增加的功能类(提交事务)
public class Transaction{
    public void beginTransaction(){
        System.out.println("开启事务")}
    public void commit(){
        System.out.println("提交事务")}
}
---------------------------------------------
//代理对象
public class PersonProxy implements Itf_person {
    //业务类和功能类
    private Person person;
    private Transaction transaction;
    
    //利用构造方法注入业务类和功能类
    public PersonProxy(Person person,Transaction transaction){
        this.person = person;
        this.transaction = transaction;
    }
    
    @Override
    public void add(){
        transaction.beginTransaction();
        person.add();
        transaction.commit();
    }
}
2、动态代理
  • 动态代理的思路和静态基本相同,不同点在于弥补了静态代理中存在每一个都会产生一个代理类这种冗余,动态代理在接口中声明的所有方法都被转移到**调用处理器(InvocationHandler.invoke)**一个集中的方法中处理。这样,在接口方法数量比较多的时候,我们可以进行灵活处理,而不需要像静态代理那样每一个方法进行中转。所以不再更多介绍,这里只是为了简单理解这种理念方便了解Mapper。

三、Mapper代理方式开发Dao层

  • 写好Mapper中的接口后,由Mybatis框架根据接口定义创建接口的动态代理对象。
  • 代码示例:

Mapper中的接口在这里插入图片描述

Mapper中的映射文件在这里插入图片描述

注:映射文件是一个java类到数据库表的特定映射

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mybatis执行流程(下)------Dao层详解 的相关文章

随机推荐

  • MIPS架构下linux软浮点研究

    转自 http blog sina com cn s blog 67b113a10100zxx3 html 在嵌入式领域 为了节省成本和减少功耗 很多芯片都是没有浮点运算模块的 一般该模块叫做FPU float process unit 这
  • 爬虫写得好,牢饭吃到饱?

    先说一条新闻 一家专注大数据的数据服务提供商公司巧达科技 因为大量使用爬虫访问其他公司接口获取数据 整个公司被抓 最后不光管理者 干活的程序员也被抓了 很多学python的同学都接触过爬虫 即便是没接触过应该也听过 看到这种新闻你会不会心里
  • MySQL管理常用工具介绍

    1 mysql 该mysql不是指mysql服务 而是指mysql的客户端工具 e选项可以在Mysql客户端执行SQL语句 而不用连接到MySQL数据库再执行 对于一些批处理脚本 这种方式尤其方便 示例 2 mysqladmin mysql
  • 第一启富金:两大利空压顶 黄金受压收跌

    第一启富金官网显示 全球最大黄金上市交易基金 ETF 截至01月19日持仓量为976 21吨 较上日持平 本月止净增持0 55吨 香港第一金 投资者的注意力仍集中在美联储1月25日至26日的会议上 此前美联储官员暗示 他们将在3月开始加息以
  • Spring-MVC的文件上传下载,及插件的使用(让项目开发更节省时间)

    目录 一 概述 1 介绍 2 讲述 二 上传 三 下载 四 jrebel的使用 五 多文件上传 给我们带来什么收获 一 概述 1 介绍 Spring MVC的文件上传下载是指在Spring MVC框架中实现文件的上传和下载功能 文件上传是指
  • 【Python基础】深拷贝,浅拷贝和赋值

    浅拷贝 在含有多层对象的字典 列表 集合中 浅拷贝只拷贝父对象 不会拷贝父对象内部的可变子对象 语法 copy copy 深拷贝 只要被拷贝对象含有可变子对象 程序就会重新申请一块内存空间把被拷贝对象的值复制一份存放到该内存空间中 语法 c
  • 前端面试话术集锦第 15 篇:高频考点(React常考进阶知识点)

    这是记录前端面试的话术集锦第十五篇博文 高频考点 React常考进阶知识点 我会不断更新该博文 1 HOC 是什么 相比 mixins 有什么优点 很多人看到高阶组件 HOC 这个概念就被吓到了 认为这东西很难 其实这东西概念真的很简单 我
  • JAVA基础day04

    package com atguigu exer 1 创建一个名为TestArray的类 在main 方法中声明array1和array2两个变量 他们是int 类型的数组 2 使用大括号 把array1初始化为8个素数 2 3 5 7 1
  • redis优化-5.redis主从复制问题处理

    1 读写分离 1 1复制数据延迟 Redis复制数据的延迟由于异步复制特性是无法避免的 延迟取决于网络带宽和命令阻塞情况 比如刚在主节点写人数据后立刻在从节点上读取可能获取不到 需要业务场景允许短时间内的数据延迟 对于无法容忍大量延迟场景
  • 动态规划系列之「最长递增子序列的个数」

    673 最长递增子序列的个数 给定一个未排序的整数数组 找到最长递增子序列的个数 示例 1 输入 1 3 5 4 7 输出 2 解释 有两个最长递增子序列 分别是 1 3 4 7 和 1 3 5 7 示例 2 输入 2 2 2 2 2 输出
  • 计算机编程入门先学什么最好?

    看完其他知友的回答 我认为他们的观点过于局限 并没有真正切中问题的要害 我们不妨换个角度 站在更高一层来看这个问题 计算机编程入门先学什么最好 计算机入门最应该学的是 Linux 而非任何的编程语言 这篇文章4600字 有点长 如果你能耐心
  • spark 读取avro文件

    1 引入依赖
  • FastCFS同步复制机制简介

    FastCFS同步复制机制简介 本篇文章转载于 FastCFS 作者 余庆 大佬的 FastDFS分享与交流 公众号 上一篇文章介绍了 FastCFS 采用数据分组的做法 一个数据分组的几个节点 如三个节点即三副本 之间是 Master S
  • ConvTranspose2d 的简单例子理解

    文章目录 参考 基础概念 output padding 简单例子 stride 2 step1 step2 step3 参考 逆卷积的详细解释ConvTranspose2d fractionally strided convolutions
  • 面试题总结------1

    参考自 https vue3js cn interview 1 css渐进增强和优雅降级 渐进增强 针对低版本浏览器进行构建页面 保证最基本的功能 然后再针对高级浏览器进行效果 交互等改进和追加功能达到更好的用户体验 渐进增强观点则认为应关
  • matlab求解最优化问题(数学建模)

    matlab求解最优化问题 数学建模 1 线性规划 matlab中线性规划优化计算方法和实例 在matlab中用于线性规划优化计算的是linprog 函数 公式 x fval exitflag output lambda linprog c
  • C++知识系列:#和##

    总结 是连接字符串的 是粘合成一个名字的 参考 C 中的 和 是干嘛用的
  • 程序员必知的21个命令

    在这篇文章里 我们将要一睹能快速分析文本数据 如日志 报告等 的最方便工具 很多时候 我们需要的数据并不存储在我们的本机上 所以首先 我们要知道如何链接到远程服务器上并使用它 为此 使用SSH最为合适 SSH 即Secure Shell 是
  • 图像隐写分析-Markov特征编程实现

    该特征集是由Shi 1 等人在当时提出的一种新的特征 其思想是DCT系数之间有一定的变化关系 该特征使用马尔可夫转移概率来描述DCT之间的关系 先计算DCT系数水平 垂直 对角方向的差值 使用块内和块间的转移概率作为图像的特征 假设使用F
  • Mybatis执行流程(下)------Dao层详解

    Mybatis执行流程 下 Dao层详解 Mapper简介 上文结尾在项目中发现会用到Dao层的mapper接口和映射文件等 这是因为在之前开发中有很多冗余的工作 比如要实现100个增删查改的方法 除了本身的业务逻辑代码 还要存在开启 提交