【MyBatis】代理开发核心配置文件介绍(二)

news2024/11/27 14:38:00

🚗MyBatis学习·第二站站~
🚩起始站:MyBatis概述&环境搭建(一)
🚩本文已收录至专栏:数据库学习之旅
👍希望您能有所收获

一.Mapper代理开发

(1) 引入

在上一篇中我们有提到一点,MyBatis可以在一定程度上解决JDBC中所遇到的硬编码问题,但是经过上一篇的案例,我们发现又涉及到了新的硬编码问题,而且操起起来比较麻烦:

  • 每次使用都得去UserMapper.xml中查看对应SQL语句的id名称。
  • 编写过程idea不会有代码提示,必须仔细书写防止错误产生。
    在这里插入图片描述
    由此在新版本的MyBatis官方文档中也更推荐我们以Mapper代理的方式使用它。
    在这里插入图片描述

比之旧版本,使用起来更为简洁且可以避免因粗心导致的一些错误。此外,我们还可以使用注解的方式来映射一些简单的SQL语句使代码显得更加简洁。

(2) 入门使用

为了使用Mapper代理开发,接下来让我们一起对上一篇编写的入门案例进行一些改造。
在这里插入图片描述

(2.1) 编写同名接口

我们需要定义一个与SQL映射文件(xml)同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下
在这里插入图片描述

如此当然可以,但是配置文件与Java代码混在了一起却不利于我们进行管理。我们可以选择将xml文件依旧放在resource目录下,这是因为项目在编译之后resource中的文件也和代码在一个区域中。但是我们要在resource下创建一个与UserMapper一样的包结构,然后将其置于其中。
在这里插入图片描述

要注意的是,当我们在resource下创建多级Directory时不能像创建包一样guanzhi.mapper而应该选择guanzhi/mapper的方式.。经过Maven的compile之后我们查看target\classes文件可以发现他们确实在一个目录下。
在这里插入图片描述

此外,由于我们改了UserMapper.xml文件的位置,在mybatis-config.xml中也要进行一定的更改。
在这里插入图片描述

(2.2) 设置namespace属性

设置SQL映射文件的namespace属性为Mapper接口全限定名。
在这里插入图片描述

(2.3) 在接口中定义方法

在Mapper 接口中定义方法,方法名就是SQL映射文件中sql语句所对应的id,并保持参数类型和返回值类型一致。
在这里插入图片描述

(2.4) 测试

至此我们已经完成了对入门案例的修改配置,接下来我们可以在代码中进行测试。

public class MyBatisDemo {
    public static void main(String[] args) {
        try {
            // 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.通过SqlSession的getMapper方法获取 Mapper接口的代理对象
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            //4.直接使用接口中编写的方法即可
            List<User> userList = userMapper.selectAll();
            System.out.println(userList);

            // 4.释放资源
            sqlSession.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

对比可以看到整体使用上并无太大差异,但是解决了硬编码问题,且使用起来更加舒服。
在这里插入图片描述

运行可以发现结果与之前一致
在这里插入图片描述

(2.5) 技巧补充

当我们使用mapper代理方式进行开发时,如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。
在这里插入图片描述

当我们项目简单时,可能用不用无所谓,当我们项目庞大时,使用包扫描的方式,可以避免我们写一排xxxMapper.xml

二.核心配置文件

除了上述我们已经在mybatis-config.xml使用到的配置信息外,还有许多配置信息可以在里面写。官方文档中详细介绍了许多配置信息的作用,其首句便是“MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。”本篇只介绍几个常用的配置。

注意:在配置各个标签时必须遵循官网给出的如下顺序
在这里插入图片描述

(1) 环境配置(environments)

MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中。例如,开发、测试和生产环境需要有不同的配置信息;

不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
在这里插入图片描述

(2) 类型别名(typeAliases)

类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,可以降低冗余的全限定类名书写。可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean.
在这里插入图片描述

三.MyBatisX插件

MybatisX 是一款基于 IDEA 的快速开发插件,为效率而生。主要功能:

  • 可以在XML和接口方法 之间相互跳转

  • 根据编写的接口方法生成快速在xml中生成statement
    在这里插入图片描述

使用:

  1. 可以先在Mapper接口中编写方法,点击出现红色波浪线,按下alt+回车键可弹出如下选项,点击Generate statement
    在这里插入图片描述

  2. 可以看到在xml文件中直接生成了对应语句,我们只需要在此编写SQL代码即可
    在这里插入图片描述

除此之外还有一些更为便捷的方法,我们后续慢慢介绍。

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

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

相关文章

Linux原来是这么管理内存的(最透彻的一篇)

Linux 内存管理模型非常直接明了&#xff0c;因为 Linux 的这种机制使其具有可移植性并且能够在内存管理单元相差不大的机器下实现 Linux&#xff0c;下面我们就来认识一下 Linux 内存管理是如何实现的。 基本概念 每个 Linux 进程都会有地址空间&#xff0c;这些地址空间由三…

堆的概念和结构以及堆排序

前言 普通的二叉树是不适合用数组来存储的&#xff0c;因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结 构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储&#xff0c;需要注意的是这里的堆和操作系统 虚拟进程地址空间中的堆是两回事&#xff0c…

Sofa-jraft的Rpc调用服务端分析

在sofa-jraft中&#xff0c;关于RPC的服务端是RpcServer在RpcServer中的init方法中&#xff1a;初始化了连接事件监听器&#xff0c;这个里面就是一个map&#xff0c;然后可以添加事件监听的处理器&#xff0c;初始化userProcessors, codec 是一个编码和解码器的工厂&#xff0…

VPS使用ProxySU搭建节点服务器

本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰&#xff0c;更不会影响计算机信息系统的正常运行。不得将代码用于非法用途&#xff0c;如侵立删&#xff01; VPS使用ProxySU搭建节点服务器 环境 contos8win10 64位ProxySU 4.1.7 服…

02-mysql高级-

文章目录mysql高级1&#xff0c;约束1.1 概念1.2 分类1.3 非空约束1.4 唯一约束1.5 主键约束1.6 默认约束1.7 约束练习1.8 外键约束1.8.1 概述1.8.2 语法1.8.3 练习2&#xff0c;数据库设计2.1 数据库设计简介2.2 表关系(一对多)mysql高级 今日目标 掌握约束的使用 掌握表关系…

自动化测试——css元素定位

文章目录一、css定位场景二、css相对定位的优点三、css的调试方法1、表达式中含有字符串&#xff1a;表达式中的引号一定和外面字符串的引号相反四、css基础语法1、标签定位2、class定位特别注意&#xff1a;当class类型的属性值包含多个分割值&#xff0c;$(.s_tab s_tab_1z9n…

快捷式~node.js环境搭建

1、安装包官网下载&#xff1a;Node.js (nodejs.org) 2、安装完成后修改环境变量 在上面已经完成了 node.js 的安装&#xff0c;即使不进行此步骤的环境变量配置也不影响node.js的使用 但是&#xff0c;若不进行环境变量配置&#xff0c;那么在使用命令安装 node.js全局模块 …

Linux服务:Nginx服务配置及相关模块

目录 一、Nginx配置文件 1、主配置文件解析 2、子配置文件启用 二、子配置文件使用 1、创建虚拟主机实验 2、基于端口虚拟主机实验 三、Nginx模块 1、access模块 2、自定义错误页面 3、状态页开启 一、Nginx配置文件 1、主配置文件解析 ①yum安装主配置文件位置&…

docker上发布 sunnyNgrok 实现内外网穿透,容器内执行命令

最近在使用内外网穿透的工具时发现国内版的Ngrok还挺好用的&#xff0c;但是在dockerHub上搜镜像时发现不知道使用哪一个&#xff0c;索性便自己创建一个docker容器。 1、创建自己想要创建docker镜像的文件夹&#xff0c;我创建的名为“sunny-Ngrok” 2、在文件内创建Dockerfi…

【C语言】预处理器

目录 1. 预处理器的工作原理 2. 预处理指令 3. 宏定义 3.1 简单的宏&#xff08;对象式宏&#xff09; 3.2 带参数的宏&#xff08;函数式宏&#xff09; 3.3 #define替换规则 3.4 #和## 3.5 带副作用的宏参数 3.6 宏和函数对比 3.7 命名约定 3.8 #undef 3.9 预定义…

支持向量机SVM详细原理,Libsvm工具箱详解,svm参数说明,svm应用实例,神经网络1000案例之15

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 SVM应用实例&#xff0c;基于SVM的股票价格预测 支持向量机SVM的详细原理 SVM的定义 支持向量机&#xff08;support vector machines, SVM&#xff09;是一种二分类模型&a…

Scala面向对象详解(第六章:Scala包、类和对象、封装、继承和多态、抽象、单例、特质)(尚硅谷笔记)

面向对象第 6 章 面向对象6.1 Scala 包6.1.1 包的命名6.1.2 包说明&#xff08;包语句&#xff09;6.1.3 包对象6.1.4 导包说明6.2 类和对象6.2.1 定义类6.2.2 属性6.3 封装6.1.5 访问权限6.2.3 方法6.2.4 创建对象6.2.5 构造器6.2.6 构造器参数6.4 继承和多态6.5 抽象类6.5.1 …

基于机器学习的二手车价格预测及应用实现(预测系统实现)

1.摘要 随着中国汽车工业的迅速发展&#xff0c;国内的汽车数量也在迅速增长。新车销售市场已经逐渐饱和&#xff0c;而二手车交易市场正在兴起。但是&#xff0c;由于中国的二手车市场尚未成熟&#xff0c;与发达国家相比仍存在较大差距。其中一个重要原因是二手车的市场价格难…

信息系统项目管理师试题精选(四)

【1】关于区块链的描述&#xff0c;不正确的是&#xff08; &#xff09;。A. 区块链的共识机制可有效防止记账节点信息被篡改B. 区块链可在不可信的网络进行可信的信息交换C. 存储在区块链的交易信息是高度加密D. 区块链是一个分布式共享账本和数据库【2】&#xff08; &#…

记录一次Android视频播放音画不同步问题的定位及分析

1.何为音画不同步 音画不同步很简单就是视频播放过程中声音和画面出现的时间点不一致&#xff0c;滞后或者提前。 2.音画不同步问题分析思路 2.1.音画不同步问题的证明 对于滞后或者提前很多的音画不同步可以直接认为发生了该问题&#xff0c;但是滞后或者提前不是很多的就…

Linux系统安装MySQL8.0版本详细教程【亲测有效】

首先官网下载安装包&#xff1a;https://downloads.mysql.com/archives/community/ 一、上传到安装服务器 二、解压 tar -xvf mysql-8.0.31-linux-glibc2.12-x86_64.tar.xz三、移动位置并重新命名 mv mysql-8.0.31-linux-glibc2.12-x86_64 /usr/local/mysql四、创建mysql用户…

信息安全基础概要(二)——安全保护等级,安全服务与安全机制

目录 一、OSI/RM七层模型 二、各个网络层次的安全保障 三、计算机信息系统安全保护等级划分准则(GB17859-1999) 四、信息安全体系结构——安全服务与安全机制 前篇&#xff1a; https://blog.csdn.net/superSmart_Dong/article/details/125690697 一、OSI/RM七层模型 广播…

每日一题——L1-070 吃火锅(15)

L1-070 吃火锅 分数 15 以上图片来自微信朋友圈&#xff1a;这种天气你有什么破事打电话给我基本没用。但是如果你说“吃火锅”&#xff0c;那就厉害了&#xff0c;我们的故事就开始了。 本题要求你实现一个程序&#xff0c;自动检查你朋友给你发来的信息里有没有 chi1 huo…

字节是真的难进,测开4面终上岸,压抑5个月,终于可以放声呐喊

这次字节的面试&#xff0c;给我的感触很深&#xff0c;意识到基础的重要性。一共经历了五轮面试&#xff1a;技术4面&#xff0b;HR面。 下面看正文 本人自动专业毕业&#xff0c;压抑了五个多月&#xff0c;终于鼓起勇气&#xff0c;去字节面试&#xff0c;下面是我的面试过…

Mysql 索引(二)—— InnoDB 与 MyISAM 索引方式的比较(聚簇索引 VS 非聚簇索引)

在上一部分了解到&#xff0c;主键索引的本质其实就是一棵B树&#xff0c;通过每一层的目录页来找到记录所在的page页。根据 page页是否保存了数据&#xff0c;我们可以将主键索引分为 聚簇索引 和 非聚簇索引。 1、MyISAM (1) 非聚簇索引 非聚簇索引的目录和数据记录是分开存…