5_MyBatis代理模式开发-1_使用Mapper代理方式实现查询

news2024/9/27 9:29:51

前面已经使用MyBatis完成了对Emp表的CRUD操作,都是由SqlSession调用自身方法发送SQL命令并得到结果的,实现了MyBatis的入门。

但是却存在如下缺点:

1.    不管是selectList()、selectOne()、selectMap(),都是通过SQLSession对象的API完成增删改查,都只能提供一个查询参数。如果要多个参数,需要封装到JavaBean或者Map中,并不一定永远是一个好办法。

2.    返回值类型较固定。

3.    只提供了映射文件,没有提供数据库操作的接口,不利于后期的维护扩展。

在MyBatis中提供了另外一种成为Mapper代理(或称为接口绑定)的操作方式。在实际开发中也使用该方式。下面我们就是要Mapper代理的方式来实现对Emp表的CRUD操作吧,还有完成多个参数传递、模糊查询、自增主键回填等更多的技能实现。搭建好的项目框架如图所示,相比而言,增加了接口EmployeeMapper。但是却会引起映射文件和测试类的变化。

优点:

1有接口 模块之间有规范了

2参数的处理多样了,接口中的方法参数列表由我们自己决定

3通过代理模式由mybatis提供接口的实现类对象 我们不用写实现类了

项目结构:注意文件路径和文件位置!!!

准备接口和mapper映射文件

EmpMapper接口


package com.msb.mapper;
import com.msb.pojo.Emp;
import java.util.List;
/**
 * @Author: Ma HaiYang
 * @Description: MircoMessage:Mark_7001
 */
public interface EmpMapper {
    /**
     * 该方法用于查询全部的员工信息
     * @return 全部员工信息封装的Emp对象的List集合
     */
    List<Emp> findAll();
}
 

EmpMapper.xml映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.msb.mapper.EmpMapper">
    <!--
    1 接口的名字和Mapper映射为文件名字必须保持一致(不包含拓展名)
    2 Mapper映射文件的namespace必须是接口的全路径名
    3 sql语句的id必须是对应方法的名
    4 DeptMapper映射文件应该和接口编译之后放在同一个目录下
    -->
    <!--List<Emp> findAll();-->
    <select id="findAll" resultType="emp" >
        select * from emp
    </select>
</mapper>

在sqlMapConfig.xml核心配置文件中使用包扫描形式加载所有的映射文件

<!--加载mapper映射文件-->
<mappers>
    <!--通过类的全路径去找mapper映射文件-->
    <mapper class="com.msb.mapper.EmpMapper"/>
</mappers>
 


测试代码

package com.msb.test;
import com.msb.mapper.EmpMapper;
import com.msb.pojo.Dept;
import com.msb.pojo.Emp;
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.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
 * @Author: Ma HaiYang
 * @Description: MircoMessage:Mark_7001
 */
public class Test1 {
    private SqlSession sqlSession;
    @Before
    public void init(){
        SqlSessionFactoryBuilder ssfb =new SqlSessionFactoryBuilder();
        InputStream resourceAsStream = null;
        try {
            resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        } catch (IOException e) {
            e.printStackTrace();
        }
        SqlSessionFactory factory=ssfb.build(resourceAsStream) ;
        sqlSession=factory.openSession();
    }
    @Test
    public void testFindAll(){
        EmpMapper empMapper=sqlSession.getMapper(EmpMapper.class);
        List<Emp> emps = empMapper.findAll();
        emps.forEach(System.out::println);
    }
    @After
    public void release(){
        // 关闭SQLSession
        sqlSession.close();
    }
}

代理模式浅析

mybatis是如何通过代理模式实现查询的

这条语句的底层使用了动态代理模式,动态创建一个EmployeeMapper的一个代理对象并赋给接口引用。所以在MyBatis中不需要显式提供Mapper接口的实现类,这也是简单的地方。

 

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

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

相关文章

SAP Gateway 上的 Metadata Cache

SAP Gateway Foundation 缓存服务的元数据信息以显着提高性能。 SAP 提供了三种类型的缓存&#xff1a; 在 hub 上缓存。 在 Hub 系统上缓存了元数据模型、注释模型以及服务的注释文本。 在后端缓存。 在后端仅缓存元数据模型和注释模型。 后端不需要注释文本来进行服务实例…

ubuntu开启TFPT

一、开启tfpt&#xff1a; sudo apt-get install vsftpd 对 vsftpd 进行配置&#xff0c;输入命令&#xff1a; sudo gedit /etc/vsftpd.conf 主要做以下修改&#xff0c;使以下设置生效&#xff1a; anonymous_enableNO local_enableYES write_enableYES 重新启动 vsftpd 服务…

【C语言】实用调试技巧

目录 1.什么是bug&#xff1f; 2. 调试是什么&#xff1f;有多重要&#xff1f; 2.1 调试是什么&#xff1f; 2.2 调试的基本步骤 2.3 Debug和Release的介绍 3. Windows环境调试介绍 3.1 调试环境的准备 3.2 学会快捷键 3.3 调试的时候查看程序当前信息 3.3.1 查…

使用ssd1306驱动,来驱动0.96寸中景园oled屏幕

硬件 nucleo-f411RE, 中景园oled屏幕(0.96寸&#xff0c;七线) 驱动文件地址 stm32-ssd1306 驱动文件说明 使用的库&#xff1a;HALHALHAL 支持的通信协议&#xff1a;SPI/IICSPI/IICSPI/IIC 文件结构&#xff1a; 其中&#xff0c;驱动文件在ssd1306ssd1306ssd1306文件中…

LeetCode题解 二叉树(四):我要打十个?层序遍历变式九道

前言&#xff1a; 本篇涉及的题目都与10 二叉树的层序遍历有关&#xff0c;共九道题 107.二叉树的层次遍历II medium199.二叉树的右视图 medium637.二叉树的层平均值 easy429.N叉树的前序遍历 medium515.在每个树行中找最大值 medium116.填充每个节点的下一个右侧节点指针 me…

机器学习——详解判别模型求解分类问题

目录 逻辑回归 判别模型(discriminative model) 设计模型Function set设计函数选择最好的w和b更新参数w和b 逻辑回归与线性回归对比 逻辑回归为什么用交叉熵来找最优的参数而不用MAE或MSE GM与DM区别 多维分类——以三类别为例 GM 生成模型DM 判别模型 输入特征处理→深度学习…

财务人员学Python有用吗?

财务人员学Python有用吗&#xff1f;作为财务人员每天面对大量的数据&#xff0c;财务人员用Python做小工具&#xff0c;录单审凭证不到1分钟就搞定了。把更多的时间花在财务分析上&#xff0c;更好更快地完成工作。 Python作为一门编程语言&#xff0c;属于IT技术自动化技术、…

Python:遗传算法最优路径

Hello&#xff0c;大家好&#xff01;读研前写过一篇遗传算法的代码&#xff0c;比较简单&#xff0c;算是个入门&#xff0c;当时就有想用它来解决最优路径的问题&#xff0c;上算法导论课时碰巧有听到同学有分享过&#xff0c;但由于自己研究的方向不是这块&#xff0c;就没有…

【LeetCode每日一题】——968.监控二叉树

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 树 二【题目难度】 困难 三【题目编号】 968.监控二叉树 四【题目描述】 给定一个二叉树&…

入门:从虚拟机到容器

从虚拟机到容器 前面我们成功安装了Docker学习环境&#xff0c;以及浅尝了一下Docker为我们带来的应用快速部署。在正式进入学习之前&#xff0c;我们就先从Docker的发展开始说起。 在Docker出现之前&#xff0c;虚拟化技术可以说是占据了主导地位。首先我们来谈谈为什么会出现…

Adobe Pro DC 2022 软件详细安装教程

一、软件下载 网盘链接&#xff1a;Adobe Pro DC 2022 提取码:ib19 二、详细安装教程 1、解压安装包&#xff0c;右键安装程序Set-up&#xff0c;点击以管理员身份运行 2、更改软件安装位置&#xff0c;建议安装至除C盘外的其他盘&#xff08;如不需更改直接点击【继续】即可…

自学编程的朋友,我想给你们这 5 个建议

0基础学编程&#xff0c;我想给你这 5 个建议 很多人都想转行互联网&#xff0c;不管是出于兴趣、行业前景还是薪资的考虑&#xff0c;想要转行互联网的人们必须要面对一个问题&#xff0c;那就是如何自学编程&#xff0c;更确切的说&#xff0c;是如何0基础学编程。 其实我基…

小师弟:2022广东省工科赛分享(越障排爆省一,完整项目)

目录日常唠嗑前言一、实验效果二、赛题分析及方案1、赛题内容&#xff1a;初赛&#xff1a;决赛&#xff1a;2、实施方案&#xff1a;三、材料选择四、程序设计程序思路PID&#xff1a;越障部分&#xff1a;颜色识别部分&#xff1a;五、竞赛心得六、工程获取日常唠嗑 小师弟说…

J-002 Jetson电路设计之电源设计--NANO XAVIER NX

Jetson电源设计1 电源说明1.1 电源和系统引脚描述1.2 电源控制框图详情2 上电的时许2.1 框图分析2.2 上电时序3 GND引脚1 电源说明 Jetson NANO和XAVIER NX核心板的电源为DC-5V。 1.1 电源和系统引脚描述 PIN名称描述方向类型251-260VDD_IN主电源输入5.0V235PMIC_BBATRTC时钟…

深入剖析Linux RCU原理(二)-渐入佳境

说明&#xff1a; Kernel版本&#xff1a;4.14ARM64处理器&#xff0c;Contex-A53&#xff0c;双核使用工具&#xff1a;Source Insight 3.5&#xff0c; Visio 1. 概述 我会假设你已经看过了深入剖析Linux RCU原理&#xff08;一&#xff09;初窥门径 本文将进一步去探索下…

设计模式4 - 行为型模式

23种设计模式分析与见解开篇、UML、软件设计原则https://blog.csdn.net/lili40342/article/details/128358435创建型模式https://blog.csdn.net/lili40342/article/details/128358392结构型模式https://blog.csdn.net/lili40342/article/details/128358313行为型模式https://bl…

【GRU时序预测】基于matlab卷积神经网络结合门控循环单元CNN-GRU时间序列预测【含Matlab源码 2287期】

⛄一、CNN-GRU数据预测 1 理论基础 1.1 CNN算法 负荷序列数据为一维数据&#xff0c;用一维卷积核对数据进行卷积处理&#xff0c;以获取数据的特征。 现设定卷积核的维度为3&#xff0c;移动步长为1&#xff0c;对输入数据进行卷积&#xff0c;以获得特征图图谱&#xff0c;即…

转行AI产品经理的学习过程

学习内容及思考 引言 当别人问你为什么转行AI产品经理&#xff1f; 你回答因为自己喜欢。 这是一句多么空洞的话呀&#xff0c;苍白又无力&#xff0c;那你为什么喜欢呢&#xff1f;你了解他么&#xff1f;仅凭自己这一腔热情&#xff0c;一句轻描淡写的我喜欢&#xff0c;是…

行为树 --- [7] BehaviorTree.CPP 4.x版本的编译及使用

根据BehaviorTree.CPP的官方介绍&#xff0c;3.x版本已经不再维护了&#xff0c;建议使用4.x版本&#xff0c; 4.x版本和3.x版本的区别可以看这里 — https://www.behaviortree.dev/migration 本文介绍4.x版本的编译及使用&#xff0c;环境是Debian 10.5&#xff0c;编译器是…

笔试强训(四十七)

目录一、选择题二、编程题2.1 合唱团2.1.1 题目2.1.2 题解2.2 马戏团2.2.1 题目2.2.2 题解一、选择题 &#xff08;1&#xff09;对于IP地址130.63.160.2&#xff0c;MASK为255.255.255.0&#xff0c;子网号为&#xff08;B&#xff09; A.160.2 B.160 C.63.160 D.130.63.160 …