mybatis plus基本使用初体验01

news2024/12/27 9:45:53

我们都知道MyBatis是目前比较常用的持久层框架;这个框架的使用也是很简单的,我们在使用的时候,只需要关注mapper的接口层和对应的xml文件即可。

但是MyBatis作为一个半自动框架,是需要我们自己手动编写sql语句的,对于一些单表的简单查询我们还是不大喜欢都需要自己来编写,虽然MyBatis也提供了代码生成器可以自动生成部分代码,但是依旧不够灵活。

所以MyBatis-Plus就出现了,MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus官方网站:官网

1.快速使用

1.1 创建数据库及数据库表

创建表
CREATE DATABASE `mybatis_plus`use `mybatis_plus`; 
CREATE TABLE `user` ( 
`id` bigint(20) NOT NULL COMMENT '主键ID', 
`name` varchar(30) DEFAULT NULL COMMENT '姓名', 
`age` int(11) DEFAULT NULL COMMENT '年龄', 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
添加测试数据
INSERT INTO user (id, name, age) VALUES 
(1, 'Jone', 18), 
(2, 'Jack', 20), 
(3, 'Tom', 28), 
(4, 'Sandy', 21),
(5, 'Billie', 24);

1.2 创建Spring Boot项目

pom.xml

引入相关依赖

 <!--mybatis-plus启动器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter-web</artifactId>
            <version>3.5.1</version>
        </dependency>

        <!--lombok用于简化实体类开发-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>
主配置文件
spring:
  # 配置数据源信息
  datasource:
    # 配置数据源类型
    type: com.zaxxer.hikari.HikariDataSource
    # 配置连接数据库的各个信息
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&autoReconnect=true&useSSL=false&allowMultiQueries=true
    username: root
    password: 12345678
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

1.3 基本的crud

MyBatis-Plus中的基本CRUD在内置的BaseMapper中都已得到了实现,我们可以直接继承该类就可以直接使用了。

创建User类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private Long id;
    private String name;
    private Integer age;
}
创建UserMapper接口

这个接口需要继承BaseMapper接口,才能使用基本的crud方法。可以看到我们没有在mapper接口中编写任何方法,同时也没有编写对应的xml文件。此时,我们已经可以实现基本的crud了。

@Repository
public interface UserMapper extends BaseMapper<User> {

}
添加包扫描路径

在这里插入图片描述

1.4 开始测试

1.4.1 插入测试
@SpringBootTest
class MybatisplusApplicationTests {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testInsert(){
        User user = new User();
        user.setName("picacho");
        user.setAge(18);
        int result = userMapper.insert(user);
        System.out.println("result:"+result);
        System.out.println("id:"+user.getId());
    }
}

测试效果:
在这里插入图片描述
这里,MyBatis-Plus默认使用雪花算法生成唯一主键插入到user表中。

1.4.2 删除测试
  • 通过id删除单个数据
@Test
    public void testDeleteById(){
        // 1614268020820037633, 这里删除前面插入的记录
        int result = userMapper.deleteById(1614268020820037633L);
        System.out.println("受影响的行数:" + result);
    }

测试效果:
在这里插入图片描述

  • 通过id批量删除记录
    @Test
    public void testDeleteBatchIds(){
        List<Long> idsList = Arrays.asList(1L, 2L, 3L);
        int result = userMapper.deleteBatchIds(idsList);
        System.out.println("受影响的行数:" + result);
    }

测试效果:
在这里插入图片描述

  • 通过map条件删除记录
    @Test
    public void testDeleteMap(){
        Map<String, Object> map = new HashMap<>();
        map.put("name", "Sandy");
        map.put("age", 21);
        int result = userMapper.deleteByMap(map);
        System.out.println("受影响的行数:" + result);
    }

测试效果:
在这里插入图片描述

1.4.3 修改测试
    @Test
    public void testUpdateById(){
        User user = new User(5L, "picacho", 18);
        int result = userMapper.updateById(user);
        System.out.println("受影响的行数:" + result);
    }

测试效果:
在这里插入图片描述

1.4.4 查询测试

由于前面将测试数据都删除了,所以这里先插入一些数据后再查询。

  • 通过id查询记录
    @Test
    public void testSelectById(){
        User user = userMapper.selectById(5L);
        System.out.println(user);
    }

测试效果:
在这里插入图片描述

  • 通过多个id查询记录
    @Test
    public void testSelectBatchByIds(){
        List<Long> idsList = Arrays.asList(1614277703085600770L, 1614277704847208450L, 5L);
        List<User> userList = userMapper.selectBatchIds(idsList);
        System.out.println(userList);
    }

测试效果:
在这里插入图片描述

  • 通过map条件查询记录
    @Test
    public void testSelectByMap(){
        Map<String, Object> map = new HashMap<>();
        map.put("age", 18);
        map.put("name", "picacho0");
        List<User> userList = userMapper.selectByMap(map);
        System.out.println(userList);
    }

测试效果:
在这里插入图片描述

  • 查询所有记录
    @Test
    public void testSelect(){
        List<User> userList = userMapper.selectList(null);  // 这里没有使用条件选择器
        System.out.println(userList);
    }

测试效果:
在这里插入图片描述
可以看到,我们没有编写任何方法和sql语句,但是却能实现上面展示的各种方法,这是由于这些方法是MyBatis Plus提供的,sql语句是自动生成的。
在这里插入图片描述

2.通用Service

通用 Service CRUD 封装IService接口,进一步封装 CRUD。

采用 get 查询单行,remove 删除,list 查询集合,page 分页。前缀命名方式区分 Mapper 层避免混淆,泛型 T 为任意实体对象

2.1 IService

MyBatis-Plus中有一个接口 IService和其实现类 ServiceImpl,封装了常见的业务层逻辑。

2.2 创建Service接口和实现类

public interface UserService extends IService<User> {
}
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}

2.3 测试基本方法

这里使用和mapper层基本一致,只是将具体实现提升到了service层。

2.3.1 测试查询记录
@Autowired
    private UserService userService;

    @Test
    public void testSelectCount(){
        long count = userService.count();
        System.out.println("查询的行数:" + count);
    }

测试效果:
在这里插入图片描述

2.3.2 测试批量插入
    @Test
    public void testSaveBatch(){
        // SQL长度有限制,海量数据插入单条SQL无法实行,因此MP将批量插入放在了通用Service中实现,而不是通用Mapper
        ArrayList<User> users = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            User user = new User();
            user.setName("picacho" + i);
            user.setAge(20 + i);
            users.add(user);
        }
        // INSERT INTO t_user ( username, age ) VALUES ( ?, ? )
        userService.saveBatch(users);
    }

测试效果:
在这里插入图片描述
MyBatis-Plus的基本使用与MyBatis基本一致,只是不用我们自己去编写xml文件了,可以看到还是很好用的,同时我们也可以像使用MyBatis一样,自己编写xml文件;几乎可以说是无缝对接。

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

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

相关文章

Linux系统软件安装

在Linux上部署各类软件MySQL数据库管理系统安装部署简介注意MySQL5.7版本在CentOS系统安装安装配置MySQL8.0版本在CentOS系统安装安装配置MySQL5.7版本在Ubuntu&#xff08;WSL环境&#xff09;系统安装安装MySQL8.0版本在Ubuntu&#xff08;WSL环境&#xff09;系统安装安装To…

Web服务统一身份认证协议设计与实现

单点登录(SSO)是目前比较流行的企业业务整合的解决方案之一,它的机制是在企业网络用户访问企业网站时作一次身份认证,随后就可以对所有被授权的网络资源进行无缝的访问,而不需要多次输入自己的认证信息.Web服务具有松散耦合、语言中立、平台无关性、开放性的特性,通过对集中单点…

Qt扫盲-Qt 属性系统记录

Qt 属性系统记录一、概述二、属性声明三、通过元对象系统读写属性四、简单例子五、动态属性六、对一个类添加额外的属性一、概述 Qt 提供了一个复杂的属性系统&#xff0c;类似于一些编译器供应商提供的系统。然而&#xff0c;作为一个独立于编译器和平台的库&#xff0c;Qt并…

Java基础07——集合

Java基础07——集合一、集合和数组的对比二、ArrayList成员方法三、集合练习1. 添加数字并遍历2. 添加学生对象并遍历学生类测试类输出结果3. 添加用户对象并判断是否存在用户类测试类输出结果4. 添加手机对象并返回要求的数据&#xff08;返回多个数据&#xff09;手机类测试类…

【算法】Day06

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录1. BST二叉搜索树的后序遍历序列2. 二叉树中和为某一值的路径&#xff08;二&#xff09;[回溯法]3. 字符串的排列 [全排列问题]4. 最小的K个数 [topK问题]普通小孩也要热爱生活&#xff01; 1. BST二叉搜索树的后序…

IF:6+ 综合分析揭示了一种炎症性癌症相关的成纤维细胞亚型在预测膀胱癌患者的预后和免疫治疗反应方面具有重要意义...

桓峰基因的教程不但教您怎么使用&#xff0c;还会定期分析一些相关的文章&#xff0c;学会教程只是基础&#xff0c;但是如果把分析结果整合到文章里面才是目的&#xff0c;觉得我们这些教程还不错&#xff0c;并且您按照我们的教程分析出来不错的结果发了文章记得告知我们&…

Linux 中断子系统(七):注册中断

Linux 注册中断的 API request_irq():不使用中断线程化request_threaded_irq():使用中断线程化中断线程化 为什么需要将中断下半部处理线程化,原因如下: 中断具有最高优先级,有中断发生时,会抢占进程,导致实时任务不能及时处理。中断上下文总是可以抢占进程上下文,这…

【PyTorch】教程:学习基础知识-(3) Datasets-DataLoader

Dataset & DataLoader PyTorch 提供了两个数据处理的基本方法&#xff1a;torch.utils.data.DataLoader torch.utils.data.Dataset 允许使用预加载的数据集以及自己的数据。 Dataset 存储样本及其对应的标签&#xff0c; DataLoader 在 Dataset 基础上封装了一个可迭代的对…

Python文本颜色设置

Python文本颜色设置实现过程&#xff1a;书写格式&#xff1a;数值表示的参数含义&#xff1a;常见开头格式&#xff1a;实例&#xff1a;实现过程&#xff1a; 终端的字符颜色是用转义序列控制的&#xff0c;是文本模式下的系统显示功能&#xff0c;和具体的语言无关。 转义序…

Acwing4699. 如此编码

某次测验后&#xff0c;顿顿老师在黑板上留下了一串数字 23333 便飘然而去。 凝望着这个神秘数字&#xff0c;小 P 同学不禁陷入了沉思…… 已知某次测验包含 nn 道单项选择题&#xff0c;其中第 i 题&#xff08;1≤i≤n&#xff09;有 ai 个选项&#xff0c;正确选项为 bi&…

CAS And Atomic

CAS(Compare And Swap 比较并交换)&#xff0c;通常指的是这样一种原子操作&#xff1a;针对一个变量&#xff0c;首先比较它的内存值与某个期望值是否相同&#xff0c;如果相同&#xff0c;就给它赋一个新值,底层是能保证cas是原子性的CAS的应用 在Java 中&#xff0c;CAS 操作…

Android开发-AS学习(三)(布局)

相关文章链接&#xff1a;Android开发-AS学习&#xff08;一&#xff09;&#xff08;控件&#xff09;Android开发-AS学习&#xff08;二&#xff09;(控件&#xff09;Android开发应用案例——简易计算器&#xff08;附完整源码&#xff09;二、布局2.1 Linearyout常见属性说…

测试NGINX和uwsgi.ini设置

1.uwsgi修改测试 将服务器升级到16核16G配置后&#xff0c;我将uwsgi.ini中的部分参数调整如下&#xff1a; processes 32 threads 16 结果是导致内存暴满&#xff0c;然后直接服务器都无法连接&#xff0c;导致服务器卡死。之前有博客说processes处理器*2&#xff0c;结果…

【阶段三】Python机器学习26篇:机器学习项目实战:LightGBM回归模型

本篇的思维导图: 项目实战(LightGBM回归模型) 项目背景 为促进产品的销售,厂商经常会通过多个渠道投放广告。本案例将根据某公司在电视、广播和报纸上的广告投放数据预测广告收益,作为公司制定广告策略的重要参考依据。 本项目应用LightGBM回归算法进行项目实战,整…

Nginx入门

介绍&#xff1a; 下载和安装&#xff1a; 安装过程&#xff1a; 1、因为nginx是由c语言编写的&#xff0c;所以需要下载gcc进行编译 yum -y install gcc pcre-devel zlib-devel openssl openssl-devel 2、下载nginx安装包 wget https://nginx.org/download/nginx-1.16.1.ta…

【Java基础知识 1】第一个Java程序(Java的第一步)

本文已收录专栏 &#x1f332;《Java进阶之路》&#x1f332; 编写一个Java程序 第一个Java程序非常简单&#xff0c;代码如下&#xff1a; public class Java01_HelloWorld {public static void main(String[] agrs){System.out.println("欢迎来到Java进阶之路&#x…

蓝桥杯 stm32 按键点灯 CubeMX

注&#xff1a;我们使用的是 HAL 库 文章目录前言一、按键 原理图&#xff1a;二、按键CubeMX配置:三、代码讲解1. 读按键&#xff1a;&#xff08; 三行代码&#xff09;2.按键消抖&#xff1a;3&#xff0c;按键点灯&#xff1a;总结实验效果&#xff1a;前言 一、按键 原理…

基于yolov5-v7.0开发构建银行卡号实例分割检测识别分析系统

在之前的文章中我们已经做了很多基于yolov5完成实例分割的项目&#xff0c;感兴趣的话可以自行移步阅读&#xff1a;《基于YOLOv5-v7.0的药片污染、缺损裂痕实例分割检测识别分析系统》《基于yolov5-v7.0开发构建裸土实例分割检测识别模型》《基于yolov5-v7.0开发实践实例分割模…

CSDN第24期周赛(记录一下)

▶ 爱要坦荡荡 (163.com) 每一道题都有思路&#xff0c;可是只有一道Accepted100%&#xff0c;一道很简单的50%&#xff0c;一道输出错误10%并报错Segmentation Fault&#xff0c;一道字符串有思路但是没时间了 一&#xff0c;蛇皮矩阵 Accepted 10% 报错Segmentation Fault…

2、矩阵介绍

目录 一、矩阵的构造 二、矩阵大小及结构的改变 三、矩阵下标的引用 1.矩阵下标访问单个矩阵元 2.线性引用矩阵元 3.访问多个矩阵元素 四、矩阵信息的提取 1.矩阵结构 2.矩阵大小 3.矩阵的数据类型 一、矩阵的构造 矩阵的构建方式有两种&#xff0c;一种与单元数组相…