MyBatis——进阶操作

news2025/1/12 22:59:32

resultMap

xml中可以通过returnType来指定返回的对象,只需要一个对象名就可以返回所有的属性

但是,如果sql中的属性名和对象的名称不一致,那么就需要resultMap来指定返回的数据了

当数据库中是username,而对象是name时:
在这里插入图片描述
在xml中指定resultMap

<resultMap id="名称" type="实体类">
	<id column="sql主键名" property="程序主键名"></id>
	<result column="sql名称" property="程序名称">
</resultMap>
  • id:该resultMap的名称
  • type:程序中的实体类
  • :表格的主键
  • :表格的普通列
  • column:sql中的名称
  • property:程序中的名称
<resultMap id="baseMap" type="com.example.demo.entity.UserInfo">
    <id column="id" property="id"></id>
    <result column="username" property="name"></result>
    <result column="password" property="password"></result>
    <result column="photo" property="photo"></result>
    <result column="createtime" property="createTime"></result>
    <result column="updatetime" property="updateTime"></result>
    <result column="state" property="state"></result>
</resultMap>

然后在sql语句中执行即可

<select id="getAll" resultMap="baseMap">
    select * from userinfo
</select>

最后name会返回对应的信息
在这里插入图片描述
或者,可以使用sql中的取别名 as,将username变成name,程序就会返回对应的值了

<select id="getAll" resultType="com.example.demo.entity.UserInfo">
   select id, username as name, password, photo, createtime, updatetime, state from userinfo
</select>

在这里插入图片描述

like查询

如果想要使用模糊查询,那么就需要使用sql中的like,但是直接使用下面这个语句查询会报错

<select id="getListByName" resultType="com.example.demo.entity.UserInfo">
    select * from userinfo where username like '%#{username}%'
</select>

在这里插入图片描述
并且,也不能使用$来直接替换字符,这样会有sql注入的安全性问题

可以使用sql的concat方法,将这三个字符拼接起来

<select id="getListByName" resultType="com.example.demo.entity.UserInfo">
   select * from userinfo where username like concat('%', #{username}, '%')
</select>

就可以返回正确的结果了
在这里插入图片描述

多表联合查询

假设当前场景:有一个用户信息表和一个文章信息表,现在要通过用户的id来查找其发过的文章
用户信息:

@Data
public class UserInfo {
    private int id;
    private String username;
//    private String name;
    private String password;
    private String photo;
    private LocalDateTime createTime;
    private LocalDateTime updateTime;
    private int state;
}

文章信息:

@Data
public class ArticleInfo {
    private int id;
    private String title;
    private String createtime;
    private String updatetime;
    private String content;
    private int uid;
    private int rcount;
    private int state;
}

显然,我们需要使用多表查询,而多表查询的返回值不光有UserInfo的内容,还有ArticleInfo的内容,这时就需要一个新的对象来接收这些内容:
编写ArticleInfoVO类,使用继承,可以只写扩展的属性

public class ArticleInfoVO extends ArticleInfo {
    private String username;
}

ArticleMapper:

@Mapper
public interface ArticleMapper {
    ArticleInfoVO getById(@Param("id") Integer id);
}

ArticleMapper.xml:

<mapper namespace="com.example.demo.mapper.ArticleMapper">
    <select id="getById" resultType="com.example.demo.entity.viewobject.ArticleInfoVO">
        select a.*,u.username from articleinfo a
        left join userinfo u on u.id=a.id
        where a.id=#{id}
    </select>
</mapper>

ArticleMapperTest

@SpringBootTest
class ArticleMapperTest {
    @Autowired
    private ArticleMapper articleMapper;

    @Test
    void getById() {
        int id = 1;
        ArticleInfoVO articleInfoVO = articleMapper.getById(id);
        System.out.println(articleInfoVO);
    }
}

可以看到,最终不仅打印出来了id=1的文章属性,还打印出了username
在这里插入图片描述

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

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

相关文章

zabbix主机发现、zabbix下的API、服务的监控部署

文章目录前言一、zabbix主机发现1.手动添加2.自动发现3.自动注册二、zabbix api1.获取token2.使用api检索主机3.通过api删除主机4.使用api添加主机5.纯代码过程三、服务监控1.nginx监控2.mysql监控&#xff08;1&#xff09;zabbix自带mysql模板&#xff08;2&#xff09;perco…

大数据技术之Maxwell基础知识

大数据技术之Maxwell基础知识 文章目录大数据技术之Maxwell基础知识0、写在前面1、Maxwell 概述1.1 Maxwell 定义1.2 Maxwell 工作原理1.2.1 MySQL 主从复制过程1.2.2 Maxwell 的工作原理1.2.3 MySQL 的 binlog1.3 Maxwell与Cannal对比2. Maxwell 使用2.1 Maxwell 安装部署2.1.…

Semaphore类原理剖析

1.什么是Semaphore Semaphore也是Java中的同步器&#xff0c;与CountDownLatch和CyclicBarrier不同的是&#xff0c;他的内部计数器是递增的。在一开始我们不需要知道有多少个需要同步的线程&#xff0c;只需要在需要同步的地方调用acquire方法指定需要同步的线程个数。 2.Se…

【C语言】结构体进阶

一、结构体 1. 结构体的声明 &#xff08;1&#xff09; 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。&#xff08;2&#xff09;结构的声明 struct tag {member-list; }variable-list;例如描述一个学生&#x…

「需求分析」业务架构师需求分析技术权威指南

需求分析&#xff0c;也称为需求工程&#xff0c;是定义用户对正在构建或修改的新软件的期望的过程。在软件工程中&#xff0c;它有时被一些松散的名称所引用&#xff0c;例如需求收集或需求捕获。需求分析包括那些为一个新的或改变的产品或项目确定需要或满足的条件的任务&…

进程内存空间

我们直接用linux演示 我们将这个代码编译成目标文件&#xff0c;然后查看内容 #include <stdlib.h> #include <pthread.h> int sum(int x,int y) {return xy; }int main(){sum(2,3);return 0; }编译 我们反汇编这个目标文件 我们发现这些汇编代码不好阅读&#…

有趣的HTML实例(十五) 注册登录界面(css+js)

我并不是每次吃完饭就看电视&#xff0c;有时我边吃边看电视&#xff0c;生活中有些改变会增加乐趣。 ——《加菲猫》 目录 一、前言 二、往期作品回顾 三、作品介绍 四、本期代码介绍 五、效果显示 六、编码实现 index.html style.css script.js 七、获取源码 公众…

何为数据分析?数据分析流程是啥?

一、什么是数据分析 指用专业的统计分析方法对大量数据进行分析&#xff0c;并加以详细研究和概括总结&#xff0c;提取有价值的信息&#xff0c;形成有效的分析结论&#xff0c;从而影响业务决策 二、数据分析的重要性 一切事物&#xff0c;如果不能量化它&#xff0c;我们…

Allegro如何手动让静态铜皮避让过孔操作指导

Allegro如何手动让静态铜皮避让过孔操作指导 在用Allegro做PCB设计的时候,如果铺的是静态铜皮,铜皮铺在过孔上会造成短路,需要手动避让下,如下图 下面介绍如何手动避让,具体操作如下 点击Shape点击Manual Void/Cavity

itop-3568开发板驱动学习笔记(3) 字符设备(上)

《【北京迅为】itop-3568开发板驱动开发指南.pdf》 学习笔记 文章目录字符设备简介申请字符设备号注册字符设备创建设备节点字符设备驱动框架&#xff08;实验&#xff09;杂项设备字符设备简介 字符设备是指在I/O传输过程中以字符为单位进行传输的设备&#xff0c;例如键盘&am…

如何使用ApacheTomcatScanner扫描Apache Tomcat服务器漏洞

关于ApacheTomcatScanner ApacheTomcatScanner是一个功能强大的Python脚本&#xff0c;该脚本主要针对Apache Tomcat服务器安全而设计&#xff0c;可以帮助广大研究人员轻松扫描和检测Apache Tomcat服务器中的安全漏洞。 功能介绍 1、支持使用多线程Worker搜索Apache Tomcat服…

ARM简介及其发展历史

前言ARM名声很大&#xff0c;最近在学习STM32&#xff0c;也借机梳理一下关于ARM的各种概念和信息。 本文主要内容&#xff1a;ARM一词的含义&#xff0c;ARM的发展历史&#xff0c;ARM cortex系列处理器简介与ARM在不同市场的应用情况。 一. ARM一词的4种含义1.1 ARM公司 AR…

如何外网登录访问瑞友天翼应用虚拟化系统?——快解析内网端口映射方案

瑞友天翼应用虚拟化系统&#xff08;GWT System&#xff09;是国内具有自主知识产权的应用虚拟化平台&#xff0c;是基于服务器计算&#xff08;Server-based Computing&#xff09;的应用虚拟化平台。如何将内网平台提供到互联网上外网访问&#xff0c;是我们比较关注的问题。…

【力扣-10天SQL入门】1~3天刷题 知识点总结

https://leetcode.cn/study-plan/sql/?progressjgmzq5s第1天 选择595. 大的国家无1757. 可回收且低脂的产品枚举类型enumenum是一个字符串对象&#xff0c;用于指定一组预定义的值&#xff0c;并可在创建表时使用&#xff0c;如sex取值为 (male, female, unknown)若要使用条件…

同为(TOWE)电源线让家用电器随心放置

如今&#xff0c;随着科技水平的不断发展&#xff0c;人们工作、生活中越来越离不开各类电子设备和电器产品。当用电器数量多了以后&#xff0c;由于电器设备原有电线长度的限制&#xff0c;常常需要通过连接接线板来延长电器设备的电能传输线路。电源线虽然看着是一件不起眼的…

51单片机定时器使用与计算-----day3

51单片机定时器-----day3 8051单片机介绍&#xff1a; 集成 8位CPU、 4K字节ROM&#xff08;掉电不丢失&#xff09;、 128字节RAM&#xff08;掉电丢失&#xff09;、 4个8位并口、 1个全双工串行口、2个16位定时/计数器。 寻址范围64K&#xff0c; 并有控制功能较强的布尔处…

MyBatis执行Sql的流程分析

目录 举例 openSession的过程 Executor 简单总结 获取Mapper的流程 Mapper方法的执行流程 doQuery方法 简单总结 举例 public class App {public static void main(String[] args) {String resource "mybatis-config.xml";Reader reader;try {//将XML配置文…

专享策略04 | 商品通用套利模型(二)

量化策略开发&#xff0c;高质量社群&#xff0c;交易思路分享等相关内容 『正文』 ˇ 大家好&#xff0c;去年我们推出了一款套利模型专享策略No.2 | 套利策略-自动换仓-出场加速. 截至到今天创出新高。 大家比较缺少套利&#xff0c;截面&#xff0c;盘口等类型的策略。因此…

「TCG 规范解读」PC 平台相关规范(1)

可信计算组织&#xff08;Ttrusted Computing Group,TCG&#xff09;是一个非盈利的工业标准组织&#xff0c;它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立&#xff0c;并采纳了由可信计算平台联盟&#xff08;the Trusted Computing Platform Alli…

SpringBoot集成Knife4j接口管理工具

SpringBoot集成Knife4j接口管理工具1、导入依赖包2、配置Knife4j3、放行Knife4j的请求4、使用Knife4j注解5、实现效果平时开发项目都用的是Swagger2或者Swagger3&#xff0c;但是这两个UI看起来不是很舒服&#xff0c;今天看到了Knife4j&#xff0c;它对Swagger进行了增强&…