Mybatis-Mapper代理开发

Mapper代理开发

  • 目的
  • 使用Mapper代理方式入门
    • 1.定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下
      • 首先新建一个Mapper接口
      • 编译mybatis-demo
      • 更改sql映射文件路径
    • 2.设置SQL映射文件的namespace属性为Mapper接口全限定名
    • 3.在Mapper 接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致
    • 4.编码
    • 细节

以下代码建立在上篇博客Mybatis快速搭建的基础上,没有搭建或者忘记如何搭建的可以去跟着搭建一下子Mybatis快速搭建

目的

  • 解决原生方式中的硬编码
    原先编码执行sql语句要在main方法中写死查询语句的id,且每个语句的id都是不一样的,这样再去main方法中写的时候就会写很多个id,麻烦且复杂,用Mapper代理开发就可以解决这个问题
  • 简化后期执行sql
    区别就是之后不用再修改代码,修改配置文件即可

使用Mapper代理方式入门

1.定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下

首先新建一个Mapper接口

新建一个UserMapper接口,再在resources文件夹下新建一个com.svt.mapper,但是不能直接写com.svt.mapper,资源文件夹会认为com.svt.mapper就是你这个文件夹的名字,要在新建Directory的时候写com/svt/mapper,这样就能分成三级了
在这里插入图片描述

编译mybatis-demo

这里直接执行会出错,可以使用一个maven helper插件,使用里面的run maven进行编译
插件可以在idea内下载
File->Settings->Plugins->进行搜索maven helper
在这里插入图片描述
下载之后重启idea即可使用,我们编译一下子
在这里插入图片描述
出来的结果有编译成功的文件夹名,这时候我们就可以去对应目录下看是否已经成功放在同一目录下
在这里插入图片描述
像这样就已经成功完成第一步啦
在这里插入图片描述

更改sql映射文件路径

还有个小细节,此时资源路径已经更改,所有在mybatis-config.xml文件里我们需要修改一下加载sql映射文件的路径,右击UserMapper.xml文件选择Copy Relative Path,直接粘贴到路径内

<!--加载sql映射文件-->
        <mapper resource="com/svt/mapper/UserMapper.xml"/>

2.设置SQL映射文件的namespace属性为Mapper接口全限定名

前一个博客内写的命名空间是test,比较随意,这里就需要将test改为自己定义的mapper接口路径

<mapper namespace="com.svt.mapper.UserMapper">

在这里插入图片描述

3.在Mapper 接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致

在UserMapper接口中写一个和id名一样的方法

User selectAll();

但此时有个小细节,之前写的查询语句查询的是整张表的数据,查询的是一个集合,这时候我们就需要用一个集合来接收数据,所有方法的类型是List集合,里面放的是一个一个user对象

public interface UserMapper {
    List<User> selectAll();
}

4.编码

通过 SqlSession的 getMapper方法获取 Mapper接口的代理对象
调用对应方法完成sql的执行

  • 代码实现
/**
 * Mybatis 代理开发
 */
public class MybatisDemo2 {
    public static void main(String[] args) throws IOException {
        //1.加载mybatis核心配置文件,获取 SqlSessionFactory 对象
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取 SqlSession 对象,用它执行 SQL 语句
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行sql
        //3.1获取UserMapper接口的代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = userMapper.selectAll();

        System.out.println(users);

        //4.释放资源
        sqlSession.close();
    }
}
  • 执行结果
    在这里插入图片描述

细节

如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载
在这里插入图片描述

<!--Mapper代理方式-->
        <package name="com.svt.mapper"/>

以后像这样的xml文件还会有很多,我们就可以使用扫描的方式进行加载,扫描一下对应的包就可以直接夹在里面所有的xml文件,不用再一个一个加载了

至此Mapper代理开发就阐述完毕,一起实现一下子吧!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据在内存中的存储之大小端

今天也是努力学编程&#xff0c;敲代码的一天&#xff01; 1.什么是大小端 其实超过一个字节的数据在内存中存储的时候&#xff0c;就有存储顺序的问题&#xff0c;按照不同的存储顺序&#xff0c;我们分为大端字节序 存储和小端字节序存储&#xff0c;下面是具体的概念: &…

吉时利2601A数字源表Keithley 2601A

吉时利2601A源测量单元&#xff08;SMU&#xff09;&#xff0c;也被称为源表&#xff0c;是一种高性能的仪器&#xff0c;能够提供100毫伏至40伏的电压范围&#xff0c;以及100纳至10安的电流范围。这种仪器能够提供的功率高达40.4瓦&#xff0c;使其在台式I-V表征工具或多通道…

如何充值GPT会员账号?

详情点击链接&#xff1a;如何充值GPT会员账号&#xff1f; 一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析&#xff0c;AI画图&#xff0c;图像识别&#xff0c;文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型Gemini以及大模型Claude2二定制自己的…

TYPE-C接口取电芯片介绍和应用场景

随着科技的发展&#xff0c;USB PDTYPE-C已经成为越来越多设备的充电接口。而在这一领域中&#xff0c;LDR6328Q PD取电芯片作为设备端协议IC芯片&#xff0c;扮演着至关重要的角色。本文将详细介绍LDR6328Q PD取电芯片的工作原理、应用场景以及选型要点。 一、工作原理 LDR63…

2024年【危险化学品生产单位主要负责人】复审模拟考试及危险化学品生产单位主要负责人作业模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年危险化学品生产单位主要负责人复审模拟考试为正在备考危险化学品生产单位主要负责人操作证的学员准备的理论考试专题&#xff0c;每个月更新的危险化学品生产单位主要负责人作业模拟考试祝您顺利通过危险化学品…

Beauty algorithm(六)大眼

前几篇主要介绍了唇妆、腮红、眼影、眉形渲染,它们都有一个共同点,关键点只需要检测一次,并且在获得目标区域融合渲染时,只是对像素点加权操作,处理速度快。而对于美颜,如大眼、缩鼻、缩下巴等操作,会产生局部形变,造成关键点移位。因此每次缩放后都要重新检测关键点,…

C++之STL库简介

目录 一、STL&#xff08;Standard Template Library&#xff0c;标准模板库&#xff09; 二、容器&#xff08;Containers&#xff09; 1.vector&#xff08;动态数组&#xff09; 2.list&#xff08;双向链表&#xff09; 3.deque&#xff08;双端队列&#xff09; 4.st…

【十】【C语言\动态规划】376. 摆动序列、673. 最长递增子序列的个数、646. 最长数对链,三道题目深度解析

动态规划 动态规划就像是解决问题的一种策略&#xff0c;它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题&#xff0c;并将每个小问题的解保存起来。这样&#xff0c;当我们需要解决原始问题的时候&#xff0c;我们就可以直接利…

JS的防抖和节流

目录 防抖 搜索框带来的问题 实现的思路 案例 封装防抖函数 节流 滚动条加载带来的问题 实现的思路 案例 封装节流函数 防抖 搜索框带来的问题 需求&#xff1a;根据输入框内容来请求数据 <!DOCTYPE html> <html lang"en"> <head><…

基于ElementUI封装的下拉树选择可搜索单选多选清空功能

效果&#xff1a; 组件代码 /*** 树形下拉选择组件&#xff0c;下拉框展示树形结构&#xff0c;提供选择某节点功能&#xff0c;方便其他模块调用* author wy* date 2024-01-03 * 调用示例&#xff1a;* <tree-select * :height"400" // 下拉框中树形高度* …

mysql原理--事务

1.事务的起源 对于大部分程序员来说&#xff0c;他们的任务就是把现实世界的业务场景映射到数据库世界。比如银行为了存储人们的账户信息会建立一个 account 表&#xff1a; CREATE TABLE account (id INT NOT NULL AUTO_INCREMENT COMMENT 自增id,name VARCHAR(100) COMMENT …

JVM之内存模型、运行时的数据区域的划分、java的程序计数器作用等

JVM JVM内存模型运行时数据区域划分程序计数器&#xff08;Program Counter Register&#xff09; JVM内存模型 ​ 对于Java程序来说&#xff0c;在虚拟机自动内存管理机制下&#xff0c;不再需要像C/C程序开发程序员这样每一个new操作去写对应的delete/free操作&#xff0c;不…

大语言模型LLM微调技术:Prompt Tuning

1 预训练语言模型概述 1.1 预训练语言模型的发展历程 截止23年3月底&#xff0c;语言模型发展走过了三个阶段&#xff1a; 第一阶段 &#xff1a;设计一系列的自监督训练目标&#xff08;MLM、NSP等&#xff09;&#xff0c;设计新颖的模型架构&#xff08;Transformer&#…

在 docker 容器中配置双网卡,解决通讯的问题

目录 1. 查看当前网络信息 2. 创建自定义网络桥 3. 创建双网卡模式 4. 删除默认网卡 已经创建好了的 Docker 容器&#xff0c;要修改它的IP比较麻烦&#xff0c;网上找了几种不同的方法&#xff0c;经过试验都没有成功&#xff0c;下面通过配置双网上来解决 IP 的问题。…

vue3.x 的生命周期和钩子函数

什么是生命周期 Vue 是组件化编程&#xff0c;从一个组件诞生到消亡&#xff0c;会经历很多过程&#xff0c;这些过程就叫做生命周期。 你理解了什么是生命周期&#xff0c;你还了解一个概念“钩子函数”。 钩子函数&#xff1a; 伴随着生命周期&#xff0c;给用户使用的函数&…

TypeScript接口、对象

目录 1、TypeScript 接口 1.1、实例 1.2、联合类型和接口 1.3、接口和数组 1.4、接口和继承 1.5、单继承实例 1.6、多继承实例 2、TypeScript 对象 2.2、对象实例 2.3、TypeScript类型模板 2.4、鸭子类型&#xff08;Duck typing&#xff09; 1、TypeScript 接口 接口…

21.串的处理

题目 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);String str sc.nextLine();char[] c str.toCharArray();int n c.length;StringBuilder st new StringBuilder();int i 0;while(i<n)…

element-ui组件DatePicker日期选择器移动端兼容

element-ui组件DatePicker日期选择器移动端兼容 css /** 移动端展示 **/ media screen and (max-width: 500px) {.el-picker-panel__sidebar {width: 100%;}.el-picker-panel {width: 400px!important;}.el-picker-panel__content {width: 100%;}.el-picker-panel__body{marg…

git打tag以及拉取tag

场景&#xff1a;某次git代码发布后定版记录&#xff0c;将发版所在的commit时候代码打上tag记录&#xff0c;方便后期切换到对应tag代码位置。 查看所有tag名 git tag// 1.1.0 // 1.0.0查看tag和描述 git tag -l -n//1.0.0 云监管一期项目完结 //1.1.0 …

[Flutter]WebPlatform上运行遇到的问题总结

[Flutter]WebPlatform上运行遇到的问题总结 目录 [Flutter]WebPlatform上运行遇到的问题总结 写在开头 正文 Q1、file_version_info.dart Q2、不兼容判断 Q3、跨域问题 Q4、flutter clean &#xff0c;无法删除build文件夹 其他 写在结尾 写在开头 Flutter项目已能在…