Mapper代理开发

news/2024/5/17 13:16:52/文章来源:https://blog.csdn.net/o676448/article/details/127014456

Mapper代理开发

  • 一. Mapper代理开发概述
  • 二. 使用Mapper代理要求(重点中的重点)
  • 三. 实操的代码
    • main目录下的java目录中
      • 1. UserMapper接口
      • 2. User类
      • 3. MybatisDemo类
    • main目录下的resources目录中
      • 1. UserMapper.xml
      • 2. logback.xml
      • 3. mybatis.xml

一. Mapper代理开发概述

之前我们写的代码是基本使用方式,它也存在硬编码的问题,如下

在这里插入图片描述
这里调用 selectList() 方法传递的参数是映射配置文件中的 namespace.id值。这样写也不便于后期的维护

如果使用Mapper 代理方式(如下图)则不存在硬编码问题

在这里插入图片描述

  • 通过上面的描述可以看出 Mapper 代理方式的目的:
    • 解决原生方式中的硬编码
    • 简化后期执行SQL
  1. Mybatis 官网也是推荐使用Mapper代理的方式下图是截止官网的图片:
    在这里插入图片描述

二. 使用Mapper代理要求(重点中的重点)

使用Mapper代理方式,必须满足以下要求:

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

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

  1. 设置SQL映射文件的namespace属性为Mapper接口全限定名
    在这里插入图片描述
  2. 在 Mapper 接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致(查询语句多个则是List集合查询,单个那么就是user对象咯)
    在这里插入图片描述
  3. 注意注意!!!mybatis配置文件下的映射器路径需要改

在这里插入图片描述

  • 注意
    如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。也就是将核心配置文件的加载映射配置文件的配置修改为
    在这里插入图片描述
  1. 最终获取代理"Mapper"
    执行结果:
    在这里插入图片描述

代码:

package com.sgs;import com.sgs.mapper.UserMapper;
import com.sgs.pojo.User;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;public class MybatisDemo {public static void main(String[] args) throws IOException {
//        1. 加载mybatis的核心配置文件,获取SqlSessionFactoryString resource = "mybatis.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//        2. 获取SqlSession对象,用它来执行sqlSqlSession sqlSession = sqlSessionFactory.openSession();//        3. 执行sql,查询所有是"selectList()方法"  一个是...one//List<User> users = sqlSession.selectList("test.selectAll");//3.1 获取UserMapper接口的代理对象UserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> users = mapper.selectAll();System.out.println(users);//        4. 释放资源sqlSession.close();}
}

三. 实操的代码

在这里插入图片描述

main目录下的java目录中

1. UserMapper接口

路径:com\sgs\mapper\UserMapper.java

package com.sgs.mapper;import com.sgs.pojo.User;import java.util.List;public interface UserMapper {List<User> selectAll();
}

2. User类

路径:com\sgs\pojo\User.java

package com.sgs.pojo;// alt + 鼠标左键 整列编辑
public class User {private Integer id;private String username;private String password;private String gender;private String addr;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getAddr() {return addr;}public void setAddr(String addr) {this.addr = addr;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +", gender='" + gender + '\'' +", addr='" + addr + '\'' +'}';}
}

3. MybatisDemo类

路径:com\sgs\MybatisDemo.java

package com.sgs;import com.sgs.mapper.UserMapper;
import com.sgs.pojo.User;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;public class MybatisDemo {public static void main(String[] args) throws IOException {
//        1. 加载mybatis的核心配置文件,获取SqlSessionFactoryString resource = "mybatis.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//        2. 获取SqlSession对象,用它来执行sqlSqlSession sqlSession = sqlSessionFactory.openSession();//        3. 执行sql,查询所有是"selectList()方法"  一个是...one//List<User> users = sqlSession.selectList("test.selectAll");//3.1 获取UserMapper接口的代理对象UserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> users = mapper.selectAll();System.out.println(users);//        4. 释放资源sqlSession.close();}
}

main目录下的resources目录中

1. UserMapper.xml

路径:com\sgs\mapper\UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--名称空间-->
<mapper namespace="com.sgs.mapper.UserMapper"><select id="selectAll" resultType="com.sgs.pojo.User">select * from tb_user;</select>
</mapper>

2. logback.xml

路径:logback.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--名称空间-->
<?xml version="1.0" encoding="UTF-8"?>
<configuration><!--CONSOLE :表示当前的日志信息是可以输出到控制台的。--><appender name="Console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>[%level]  %cyan([%thread]) %boldGreen(%logger{15}) - %msg %n</pattern></encoder></appender><logger name="com.sgs" level="DEBUG" additivity="false"><appender-ref ref="Console"/></logger><!--level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 默认debug<root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。--><root level="DEBUG"><appender-ref ref="Console"/></root>
</configuration>

3. mybatis.xml

路径:mybatis.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED">
<!--                连接信息--><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false"/><property name="username" value="root"/><property name="password" value="o676448"/></dataSource></environment></environments><mappers>
<!--      映射器  -->
<!--        <mapper resource="com/sgs/mapper/UserMapper.xml"/>--><!--        包扫描的方式简化SQL映射文件的加载    此时是属于接口的包路径,并且注意分隔符的写法--><package name="com.sgs.mapper"/></mappers></configuration>

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

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

相关文章

【SpringBoot2】02-SpringBoot中如何修改依赖的版本

Spring Boot 中修改依赖版本 如果默认版本号不合适&#xff0c;我们可以修改版本号。 首先&#xff0c;打开当前项目的 pom.xml 文件&#xff0c;查看 spring-boot-dependencies-2.7.4.pom 中规定当前依赖的版本。 例如&#xff0c;我想修改 MySQL 驱动版本&#xff0c;我先看…

OPSS-PEG-Acrylate,OPSS-PEG-AC,巯基吡啶-聚乙二醇-丙烯酸酯试剂供应

英文&#xff1a;OPSS-PEG-Acrylate&#xff0c;OPSS-PEG-AC 中文&#xff1a;巯基吡啶-聚乙二醇-丙烯酸酯 2、 CAS number&#xff1b; N/A 3、The category&#xff1b;Acrylate/Acrylamide PEG Orthopyridyl disulfide (OPSS) PEG 4、Molecular weight&#xff1a;巯基吡…

队列(C语言)

文章目录前言概念基本操作循环队列少用一个元素空间栈队列前言 本篇进行队列的学习。使用C语言实现 概念 排队是体现了“先来先服务”的原则。 在多道程序运行的计算机系统中&#xff0c;可以同时有多个作业运行&#xff0c;他们的运算结果都需要通过通道输出&#xff0c;若通…

[架构之路-3]:软件架构师也是魔法师,架构师应具备的四大方面的技能

目录 前言&#xff1a; 一、业务能力&#xff08;业务领域&#xff09;-- 面向业务 1.1 业务场景 1.2 业务技能 二、沟通能力&#xff08;管理领域&#xff09; -- 面向“人” 三、技术能力&#xff08;计算机领域&#xff09; -- 面向计算机 3.1 硬件技能 3.2 软件技能…

一个有点意思的网站 - 语雀

在这个平台上面创建了一个文档&#xff1a;CWIKIUS 语雀 Confluence Confluence 的问题就是太臃肿&#xff0c;不兼容 MD 格式。 但是&#xff0c;Confluence 和 JIRA 重度集成&#xff0c;因此成为很多公司文档的标配。 语雀 试用了下这个文档工具&#xff0c;整体上来说…

我们如何一键将录音转换成文字?

最近有很多小伙伴向我求助说&#xff0c;他的职业是一名记者&#xff0c;因为每次采访都要进行对话录音&#xff0c;可是每次结束后都需要再去对录音进行整理&#xff0c;花费了大量的时间。因此他总是在加班&#xff0c;他想改变这一现状却不知道该怎么办。其实我们不必如此麻…

platform.pk8 和platform.x509.pem转jks

/** OpenSSL */ 下载地址&#xff1a;http://slproweb.com/products/Win32OpenSSL.html 环境配置&#xff1a; openssl 安装后查看是否安装成功&#xff0c;需要以管理员身份运行cmd查看 cmd输入openssl出现下面显示&#xff0c;表示配置成功&#xff0c;openssl可以使用 pla…

VUE v-bind 数据绑定

动态的绑定一个或多个 attribute,也可以是组件的 prop。缩写: : 或者 . (当使用 .prop 修饰符) 期望: any (带参数) | Object (不带参数) 参数: attrOrProp (可选的) 修饰符:.camel ——将短横线命名的 attribute 转变为驼峰式命名。 .prop ——强制绑定为 DOM property。…

kafka 安装

目录 Docker安装 1.安装Docker 2.搜索docker镜像 3.安装Zookeeper 4. 安装kafka 5.启动kafka ​​​​​​​ Linux安装 1.kafka下载 2.安装JDK 3.安装zookeeper 4.安装kafka 5.启动kafka zookeeper上查看kafka的节点 1.进入zookeeper容器 2.运行客户端 3.查看ka…

MongoDB --- 聚合查询

什么是聚合查询 聚合操作处理数据记录并返回计算结果。聚合操作组值来自多个文档,可以对分组数据执行各种操作以回单个结果。聚合操作包含三类:单一作用聚合、聚合管道、MapReduce(在5.x已经弃用)。 单一作用聚合 提供了对常见聚合过程的简单访问,操作都从单个集合聚合文…

网络笔记大全(超详细)

目录 OSI七层参考模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 封装和解封装 应用层 传输层 网络层 数据链路层 物理层 PDU --- 协议数据单元应用层 --- 报文 传输层 --- 段 网络层 --- 包 数据链路层 --- 帧 物理层 --- 比特流 Sof --- 帧首…

日本25年来首次干预以支撑日元汇率

日本周四自 1998 年以来首次干预外汇市场&#xff0c;以支撑暴跌的日元&#xff0c;此前日本央行决定维持超低利率&#xff0c;这一决定已对日元造成冲击。 KlipC 风险经理 Philip Nucci 周五表示&#xff1a;“他们&#xff08;在外汇市场&#xff09;采取了果断行动&#xff…

pytorch神经网络入门(三)

一、建立简单的卷积神经网络 import torch from torch import nnclass ConvNet(nn.Module):def __init__(self):super(ConvNet, self).__init__()self.conv1 nn.Sequential(nn.Conv2d(1, 16, 3, 1, 1),nn.ReLU(),nn.AvgPool2d(2, 2))self.conv2 nn.Sequential(nn.Conv2d(16,…

Vue学习第29天——路由的props配置项的详解与案例(对比组件props配置项)

目录一、组件的props配置项1、作用2、理解3、用法二、路由的props配置项1、作用2、理解3、用法① props值为对象② props值为布尔值③ props值为函数4、接收参数三、props配置项搭配params传参案例练习四、props配置项搭配query传参案例练习五、总结在学习路由的props配置项之前…

python机器人编程——差速机器人小车的控制,控制模型、轨迹跟踪,轨迹规划、自动泊车(中)未完待续...

目录一、前言二、轨迹的跟随控制策略&#xff08;1&#xff09;利用模型预测控制&#xff08;MPC&#xff09;的思想控制&#xff08;2&#xff09; 仿真验证一、前言 本篇我们依然试着用一些浅显的数学知识&#xff0c;来研究和实现一下常用机器人小车&#xff08;如AGV&…

异常值检测!最佳统计方法实践(代码实现)!

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; Python3◉技能提升系列&#xff1a;https://www.showmeai.tech/tutorials/56 &#x1f4d8; 数据分析实战系列&#xff1a;https://www.showmeai.tech/tutorials/40 &#x1f4d8; 本文地址&#xff1a;https://ww…

Mysql数据库高阶语句

目录 一&#xff0c;正则表达式 1&#xff0c;以“.”代替任意一个字符 2&#xff0c;匹配前面字符多次 3&#xff0c;匹配前面字符至少一次 4,匹配字符串 5&#xff0c;匹配包含或者关系的记录 6&#xff0c;匹配指定字符集中的任意一个 二&#xff0c;运算符 1、算数运算 2…

linux在线安装JDK1.8

​​​​​创建文件路径 [rootlocalhost ~]# cd /usr/local/ [rootlocalhost local]# mkdir java [rootlocalhost local]# cd java 在线下载连接地址 wget --no-check-certificate --no-cookies --header "Cookie: oraclelicenseaccept-securebackup-cookie" http:…

MyBatis——案例——查询-查询所有

查询-查询所有数据1、创建相应Mapper接口文件 以及Mapper配置信息文件 修改配置文件中 namespace :2、编写接口方法:Mapper 接口参数:无结果:List<Brand>3、编写SQL语句(接口文件中按Alt+回车快速编写)4、执行方法,测试(1)获取 SQLSessionFactory 对象//1、获取…

超越美国 中国IPv6地址重回世界第一

IPv6的背景 IPv4地址空间已经消耗殆尽&#xff0c;近乎无限的地址空间是IPv6的最大优势 IPv6基本报头 在IPv4的基础上增加了流标签&#xff0c;去掉了一些冗余字段&#xff0c;使报文头部的处理更 为简单、高效 IPv6扩展报头 是跟在IPv6基本报头后面的可选报头&#xff0c;可…