首页 > 其他分享 >五,MyBatis-Plus 当中的 “ActiveRecord模式”和“SimpleQuery工具类”(详细实操)

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

时间:2024-09-30 14:00:29浏览次数:8  
标签:java ActiveRecord util Plus User SimpleQuery import com 实操

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

@

目录


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("[email protected]");
        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. 最后:

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

在这里插入图片描述

标签:java,ActiveRecord,util,Plus,User,SimpleQuery,import,com,实操
From: https://www.cnblogs.com/TheMagicalRainbowSea/p/18441707

相关文章

  • 【漏洞复现】用友畅捷通-TPlus FileUploadHandler.ashx 任意文件上传
    》》》产品描述《《《  ‌用友畅捷通-TPlus‌是由用友集团成员企业畅捷通公司开发的一款企业级财务管理工具,旨在帮助企业实现财务管理的现代化和智能化。作为畅捷通旗下的核心产品,TPlus集成了财务核算、资金管理、预算控制等多项核心功能,通过自动化和智能化的手段,提高企......
  • SpringBoot-MybatisPlus项目中,在控制台查看sql执行日志的方法
    SpringBoot-MybatisPlus项目中,在控制台查看sql执行日志的方法springboot、maven、mybatisplus、sql、日志、控制台、console、log背景在baomidou.com学习mybatisPlus入门的过程中,接触到表名和关键词冲突,加注解加表名引号后问题解决。不过我还想,在控制台打印一下执行......
  • Linux-基础实操篇-组管理和权限管理(下)
    chown    改变用户者    chown新用户路径文件名chgrp     改变用户组和目录组    chgrp新组名路径文件名chmod    改变用户和目录权限    chmod-R[r=4,w=2,x=1,777]路径文件名权限的基本介绍0-9位说明第......
  • C语言指针plus版
            本篇文章,我们将一起探讨指针高级版一、指针数组、数组指针    1.1指针数组    就是存放指针的数组,因此指针数组是一个数组,不是指针    例如:   int*pa[5];   //整型指针的数组   char*pb[2];  //字符型指针......
  • SpringBoot与MyBatis-Plus的整合与综合实例
    MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程、以及高级映射。MyBatis3提供的注解可以取代XML。例如,使用注解@Select直接编写SQL完成数据查询。MyBatis-Plus是一个对MyBatis进行增强的工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生......
  • MyBatis-Plus分页查询
    在实际开发中,对于大量数据的查询,可以通过分页查询的方式来减少查询量和提高查询效率。在MyBatis-Plus中,分页查询可以通过使用Page对象和IService接口提供的分页方法来实现。MyBatis-Plus的分页插件PaginationInnerInterceptor提供了强大的分页功能,支持多种数据库,使得......
  • 深入剖析 MyBatis-Plus:操作总结、对比与实践案例(CRUD 操作、分页、条件构造器、自动填
    MyBatis-Plus是MyBatis的增强工具,它极大简化了MyBatis的配置和操作,提高了开发效率。本文从基本操作到高阶用法,详细介绍了MyBatis-Plus的常见功能及与MyBatis的区别,并通过实际案例展示其强大的扩展能力。MyBatis-Plus基于MyBatis,但旨在减少开发者的代码量,增强可......
  • Tauri2.0+Vite5聊天室|vue3+tauri2+element-plus仿微信|tauri聊天应用
    原创tauri2.0+vue3+pinai2仿QQ/微信客户端聊天Exe程序TauriWinChat。tauri2-vue3-winchat自研vite5+tauri2.0+vue3setup+element-plus跨平台仿QQ|微信桌面端聊天软件。全新封装tauri2多开窗口管理、自定义圆角阴影窗体。实现聊天、通讯录、收藏、我的、朋友圈/小视频等模块。......
  • 实操了 AI 大模型项目落地, 程序员成功转变为 AI 大模型工程师
    根据《2024年全球人工智能行业报告》最新的数据显示,全球AI市场预计将以每年超过40%的速度增长,到2030年市值将达到数万亿美元,这也是预示着在接下来的十年到十五年里,人工智能将获得巨大的发展红利。在过去的一年多时间里,我持续关注着大模型的发展趋势,并且尽可能地进行......
  • 【Java】【SpringBoot】SpringBoot整合MybatisPlus(快速入门)
    较早之前,写了SpringBoot整合Mybatis:https://www.cnblogs.com/luyj00436/p/16701894.html。这个数据库的链接有过时。Mybatisplus是mybatis的增强工具。对比Mybatis功能强大、易于使用。对于复杂业务,需要连接多张表单,Mybatisplus不够灵活,隐藏了代码,也不能更好地调试;对于简单业务......