五,MyBatis-Plus 当中的 “ActiveRecord模式”和“SimpleQuery工具类”(详细实操)

news2024/12/27 16:55:00

五,MyBatis-Plus 当中的 “ActiveRecord模式”和“SimpleQuery工具类”(详细实操)

文章目录

  • 五,MyBatis-Plus 当中的 “ActiveRecord模式”和“SimpleQuery工具类”(详细实操)
  • 1. ActiveRecord 模式
  • 2. ActiveRecord介绍
    • 2.1 ActiveRecord实现
  • 3. SimpleQuery 工具类
    • 3.1 SimpleQuery介绍
    • 3.2 list
    • 3.3 map
    • 3.4 Group
  • 4. 最后:


1. ActiveRecord 模式

2. ActiveRecord介绍

ActiveRecord(活动记录,简称AR),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。ActiveRecord,一直广受解释型动态语言(PHP,Ruby 等)的喜爱,通过围绕一个数据对象进行 CRUD 操作。而Java作为准静态(编译型语言),对于 ActiveRecord 往往只能感叹其优雅,所以 MP 也在 AR 道路上进行了一定的探索,仅仅需要让实体类继承 Model 类且实现主键指定方法,即可开启 AR 之旅。

2.1 ActiveRecord实现

接下来我们来看一下ActiveRecord的实现步骤

想要使用 ActiveRecord 模式,就需要让对应的实体类(Java Bean) extends(继承) Model 类。

在这里插入图片描述

我们可以看到,Model 类中提供了一些增删改查方法,这样的话我们就可以直接使用实体类对象调用这些增删改查方法了,简化了操作的语法,但是他的底层依然是需要 UserMapper 的,所以持久层接口不能省略。

测试 ActiveRecord 模式的增删改查。

添加数据

import com.rainbowsea.bean.User;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;



@SpringBootTest
public class ActiveRecordTest {
    //public class User extends Model<User>, 需要继承 extends Model<User>
    // 添加操作
    @Test
    void activeRecordAdd() {
        User user = new User();
        user.setName("zhang");
        user.setAge(28);
        user.setEmail("zhang@rainbowsea.com");
        user.insert();
    }
}

在这里插入图片描述

删除数据


import com.rainbowsea.bean.User;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;



@SpringBootTest
public class ActiveRecordTest {
    //public class User extends Model<User>, 需要继承 extends Model<User>

    // 删除操作
    @Test
    void activeRecordDelete() {
        User user = new User();
        user.setId("1837781440184680449");
        user.deleteById();
    }
}

在这里插入图片描述

修改数据



import com.rainbowsea.bean.User;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;



@SpringBootTest
public class ActiveRecordTest {
    //public class User extends Model<User>, 需要继承 extends Model<User>
    // 修改操作
    @Test
    void activeRecordUpdate() {
        User user = new User();
        user.setId("3");
        user.setAge(1);
        user.updateById();
    }
}

在这里插入图片描述

查询数据


import com.rainbowsea.bean.User;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;



@SpringBootTest
public class ActiveRecordTest {
    //public class User extends Model<User>, 需要继承 extends Model<User>
    // 查询操作
    @Test
    void activeRecordSelect() {
        User user = new User();
        user.setId("7");
        User result = user.selectById();
        System.out.println(result);

    }
}

在这里插入图片描述

3. SimpleQuery 工具类

3.1 SimpleQuery介绍

SimpleQuery 可以对 selectList 查询后的结果用 Stream 流进行了一些封装,使其可以返回一些指定结果,简洁了 api 的调用。

3.2 list

在这里插入图片描述


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.toolkit.SimpleQuery;
import com.rainbowsea.bean.User;
import com.rainbowsea.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;


import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Consumer;

@SpringBootTest
public class SimpleQueryTest {

    @Resource
    private UserMapper userMapper;

    @Test
    void testList() {
        List<String> list = SimpleQuery.list(new LambdaQueryWrapper<User>().eq(User::getName, "Mary"), User::getId);
        System.out.println(list);
    }
}

在这里插入图片描述

对于封装后的字段进行 lambda 操作。

在这里插入图片描述



import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.toolkit.SimpleQuery;
import com.rainbowsea.bean.User;
import com.rainbowsea.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;


import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Consumer;

@SpringBootTest
public class SimpleQueryTest {

    @Resource
    private UserMapper userMapper;

    @Test
    void testList2() {
        List<String> list = SimpleQuery.list(new LambdaQueryWrapper<User>().eq(User::getName, "Mary"), User::getName,
                new Consumer<User>() {
                    @Override
                    public void accept(User user) {
                        Optional.of(user.getName()).map(String::toLowerCase).ifPresent(user::setName);
                    }
                });
        System.out.println(list);

    }
}

在这里插入图片描述


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.toolkit.SimpleQuery;
import com.rainbowsea.bean.User;
import com.rainbowsea.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;


import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Consumer;

@SpringBootTest
public class SimpleQueryTest {

    @Resource
    private UserMapper userMapper;

    // 使用lab表达式
    @Test
    void testList3() {
        List<String> list = SimpleQuery.list(new LambdaQueryWrapper<User>().eq(User::getName, "Mary"), User::getName,
                user -> Optional.of(user.getName()).map(String::toLowerCase).ifPresent(user::setName));
        System.out.println(list);

    }
}

3.3 map

将所有的对象以id,实体的方式封装为Map集合

在这里插入图片描述


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.toolkit.SimpleQuery;
import com.rainbowsea.bean.User;
import com.rainbowsea.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;


import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Consumer;

@SpringBootTest
public class SimpleQueryTest {

    @Resource
    private UserMapper userMapper;


    @Test
    void testMap() {
        Map<String, User> map = SimpleQuery.keyMap(new LambdaQueryWrapper<User>(), User::getId);
        System.out.println(map);

    }
}

将单个对象以id,实体的方式封装为Map集合

在这里插入图片描述


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.toolkit.SimpleQuery;
import com.rainbowsea.bean.User;
import com.rainbowsea.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;


import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Consumer;

@SpringBootTest
public class SimpleQueryTest {

    @Resource
    private UserMapper userMapper;


    @Test
    void testMap2() {
        Map<String, User> map = SimpleQuery.keyMap(new LambdaQueryWrapper<User>().eq(User::getId, 1L), User::getId);
        System.out.println(map);
    }
}

只想要 id 和 name 组成的 map

在这里插入图片描述



import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.toolkit.SimpleQuery;
import com.rainbowsea.bean.User;
import com.rainbowsea.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;


import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Consumer;

@SpringBootTest
public class SimpleQueryTest {

    @Resource
    private UserMapper userMapper;


    @Test
    void testMap3() {
        Map<String, String> map = SimpleQuery.map(new LambdaQueryWrapper<User>(), User::getId, User::getName);
        System.out.println(map);
    }

}

3.4 Group

Group 就是简单的分组效果。

在这里插入图片描述



import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.toolkit.SimpleQuery;
import com.rainbowsea.bean.User;
import com.rainbowsea.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;


import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Consumer;

@SpringBootTest
public class SimpleQueryTest {

    @Resource
    private UserMapper userMapper;


    @Test
    void testGroup() {
        Map<String, List<User>> map = SimpleQuery.group(new LambdaQueryWrapper<User>(), User::getName);
        System.out.println(map);
    }

}

4. 最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”

在这里插入图片描述

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

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

相关文章

UE5 项目缓存文件删除、版本控制说明(工程目录结构)

文章目录 前言一、项目文件示例二、缓存文件删除、版本控制说明前言 我们在拷贝项目或者使用 Git 进行版本控制,如果不对文件选择性的控制,大量缓存文件会导致传输速度变慢;或者我们的项目报错了,想要删除缓存文件又不知如何下手,哪些是可删除的,哪些又是不可删除的,本…

Ubuntu安装oh-my-zsh

Ubuntu20.04安装oh-my-zsh 安装zsh sudo apt-get updatesudo apt-get install zshcat /etc/shell出现**/bin/zsh**即为安装成功 安装oh-my-zsh git clone https://github.com/ohmyzsh/ohmyzsh.git ~/.oh-my-zshcp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc更改默…

二、AI大模型(Transformer架构)

Transformer架构 Transformer架构是目前大多数AI大模型的基础&#xff0c;它通过**自注意力机制&#xff08;Self-Attention Mechanism&#xff09;**解决了序列处理中的长距离依赖问题。相比传统的递归神经网络&#xff08;RNN&#xff09;和长短期记忆网络&#xff08;LSTM&…

C Primer Plus 第7章——第二篇

你该逆袭了 第7章:重点摘录 三、逻辑运算符1、备选拼写&#xff1a;iso646.h 头文件2、优先级3、求值顺序4、范围 四、一个统计单词的程序1、针对代码&#xff0c;提出疑问&#xff0c;第8章节进行讲解2、我结合自己的理解&#xff0c;自己写的代码 五、条件运算符 &#xff1f…

公交IC卡收单管理系统 多接口SQL注入

0x01 产品描述&#xff1a; 公交IC卡系统是公交一卡通系统核心建设部分&#xff0c;是高时尚、高科技的管理系统&#xff0c;大大提升了公交行业的服务&#xff0c;能让公交企业信息化和电子化打下一个良好的硬件基础和软件基 0x02 漏洞描述&#xff1a; 公交IC卡系统在/role&…

HashMap底层原理是什么?从源码入手,沉浸式解读HashMap序列化、存储、扩容、获取等方法具体实现

导航&#xff1a; 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/谷粒商城/学成在线设计模式面试题汇总性能调优/架构设计源码解析-CSDN博客 目录 一、基本介绍 1.1 集合和映射 1.1.1 基本介绍 1.1.2 思考&#xff1a;Map是不是集合&#xff1f; …

当今爆火的RPA其实就是自动化测试

最近有机会看到了 RPA 在实际工作中的重度应用&#xff0c;深刻感受到了自动化的强大实力&#xff0c;以后的应用前景时完全可期的。 RPA (Robotic Process Automation) 简介 Robotic Process Automation (RPA) 是一种技术&#xff0c;使用软件机器人&#xff08;或称“机器人…

知乎信息流广告营销获客投放策略!

知乎内容营销已成为品牌吸引目标客户、提升品牌知名度的重要手段&#xff0c;吸引了众多企业的关注。为了更好地利用知乎这一平台进行品牌推广&#xff0c;越来越多的企业开始关注知乎信息流广告的投放。云衔科技通过知乎信息流广告实现高效的营销获客&#xff0c;为企业提供知…

小程序原生-数据的双向绑定

1. 通过model:实现数据的双向绑定 <input type"text" name"名称" model:value"{{name}}" /> <checkbox model:checked"{{isChecked}}"/> 是否同意该协议// pages/test/test.js Page({data: {name:wuk,isChecked:false}, }…

无心上班,只想为祖国庆生?让ChatGPT帮你搞定工作!

国庆假期临近&#xff0c;大家的心早已飞向诗和远方了吧。 然而&#xff0c;现实总是无情地将我们拉回到堆积如山的工作任务上&#xff1a;紧急报告的截止日期就在眼前&#xff0c;复杂的项目策划还未动笔&#xff0c;客户的定制需求迫在眉睫。每年的这个时候&#xff0c;如何…

大模型产品架构全景解读:从应用场景到技术支持的完整路径

随着人工智能技术的迅猛发展&#xff0c;大模型逐渐成为推动各行业智能化转型的核心动力之一。大模型不仅可以处理大量数据&#xff0c;进行复杂任务的自动化&#xff0c;还能通过微调、蒸馏等技术在特定场景中表现出色。本文将结合大模型产品架构图&#xff0c;详细解读每一个…

解决TikTok无网络连接问题解析

随着社交媒体的快速发展&#xff0c;TikTok已成为全球用户最喜欢的短视频平台之一&#xff0c;吸引了数以亿计的用户。然而&#xff0c;在享受这个平台时&#xff0c;用户经常会遇到无网络连接的问题&#xff0c;这不仅影响观看体验&#xff0c;还可能导致无法上传内容或参与社…

数字人直播违规解决方案揭晓:阿凡达模式2.0版本如何实现7*24小时全天候无间断直播?

随着AI数字人行业的兴起&#xff0c;以数字人直播为代表的应用逐渐走入人们的视野&#xff0c;并成为企业降本增效的一大重要工具。不过&#xff0c;就目前的实际应用情况来看&#xff0c;绝大多数企业在使用数字人直播的过程中&#xff0c;经常会有直播间违规和账号封禁等情况…

IdmGAE Importance-Inspired Dynamic Masking for Graph Autoencoders

sigir24 #paper/⭐ 不要读这篇论文以及笔记了&#xff0c;没有用的东西。。这采样技术都是21-23年的论文的技术了&#xff0c;到24年还在用&#xff0c;也没有理论支撑。。。后悔读了 贡献&#xff1a;利用节点度和节点相似性去构造自适应增强 增强 构造度矩阵&#xff1a; D…

Word样式的同步与重置

有时候我们需要修改Word中的样式&#xff0c;实现排版的个性化。 如何同步样式到其他电脑上&#xff1f; Word中的样式是由Normal.dotm文件控制的&#xff0c;对样式所有的设置和修改&#xff0c;都会保存到这个问题件中&#xff0c;所以我们只需要在设置好样式以后&#xff…

骨传导耳机哪个牌子好?盘点五大热销主流机型全方位实测分析!

市面上的骨传导耳机品牌繁多&#xff0c;质量也参差不齐&#xff0c;甚至有些产品工艺粗糙&#xff0c;盲目入手使用可能存在安全隐患&#xff0c;还会影响听力和健康。那么&#xff0c;究竟骨传导耳机哪个牌子好&#xff1f;作为一名有着多年数码测试经验的博主&#xff0c;今…

【hot100-java】【编辑距离】

多维dp篇 class Solution {public int minDistance(String word1, String word2) {char [] sword1.toCharArray();char [] tword2.toCharArray();int ns.length;int mt.length;int [][] fnew int[n1][m1];for (int j1;j<m;j){f[0][j]j;}for(int i0;i<n;i){f[i1][0]i1;for…

博弈论(学习笔记)

定义何为最优&#xff01; 最优解是均衡&#xff01;&#xff08;&#xff09; 一次博弈 --- 一面之缘 复杂动态博弈&#xff1b; 路怒症----陌生人&#xff0c;一次性博弈。 一次性博弈最能暴露人性。 重复博弈太压抑了。 沙普利求解合作博弈的著名理论---如何为参与者制定利益…

24.9.29

星期一&#xff1a; 补 cf round974 div3 H cf传送门 题意&#xff1a;给一数组&#xff0c;q次询问&#xff0c;每次询问l-r区间内是否每个数字都出现偶数次 终于找到了梦中的随机数函数&#xff0c;这随机数真是非常顶级口牙 思路&a…