一,初始 MyBatis-Plus

打印 上一主题 下一主题

主题 861|帖子 861|积分 2583

一,初始 MyBatis-Plus

@
目次

1. MyBatis-Plus 的概述

学习 MyBatis -Plus 之前,我们可以先来简单的,轻微的,回顾一下,MyBatis 框架的一些问题:
这里只是简单的回顾,关于MyBatis 的更多具体内容各人可以移步至:✏️✏️✏️ MyBatis_ChinaRainbowSea的博客-CSDN博客
我们来简单思考一下,MyBatis 框架的开发效率怎么样?
开发效率也就是我们使用这款框架开发的速度快不快,是否简单好用易上手。从这个角度思考,每当我们需要编写一个SQL需求的时间,我们需要做几步:

  • Mapper 接口提供一个抽象方法。
  • Mapper 接口对应的映射设置文件提供对应的标签和SQL语句
  • 在 Service 中依赖 Mapper 实例对象
  • 调用 Mapper 实例中的方法
  • 在Controller 中依赖 Service 实例对象
  • 调用 Service 实例中的方法
通过上面的发现,对于一个SQL需求,无论是单表照旧多表,我们是需要完成如上几步,才气实现SQL需求的开发。
但是在开发中,有一些操纵是通过逻辑,这些通用逻辑是可以被简化的,比方:

  • 对于 dao ,是否可以由框架帮我们提供好单表的 Mapper 抽象方法,和对应的SQL实现,不需要程序员去实现这些。
  • 对于 service,使用可以有框架直接帮我们提供好一些 serivce 的抽象方法,和对应的实现,不需要程序员去实现这些。
  • 一些别的的企业开发中所需要的操纵
分析到这里我们发现,其实核心框架并没有发生变化,依赖照旧 Mybatis,只不外我们希望对于 MyBatis 进行一些封装和优化,让他更加的好用,更加的易用。
以是:MyBatis Plus 它就来了,它是 MyBatis 的一款增强工具。
MybatisPlus,从名称上来看,我们就发现,他和Mybatis长得很像,其实MybatisPlus就是Mybatis的孪生兄弟。学习MyBatis-Plus 首先,我们来看看它的官网地点是:https://baomidou.com/

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
愿景
我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。

MyBatis-Plus的特性说明:

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入根本 CURD,性能根本无损耗,直接面向对象操纵
  • 强盛的 CRUD 操纵:内置通用 Mapper、通用 Service,仅仅通过少量设置即可实现单表大部分 CRUD 操纵,更有强盛的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由设置,完善解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继续 Model 类即可进行强盛的 CRUD 操纵
  • 支持自界说全局通用操纵:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码大概 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自界说设置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操纵,设置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操纵智能分析阻断,也可自界说拦截规则,预防误操纵
MyBatis-Plus 的框架结构:

什么是Mybatis框架呢,他是一个持久层框架,目的是简化持久层的开发。在这里我们就使用springboot整合Mybatis,实现Mybatis框架的搭建。
特别说明:这里这个是 IDEA 2021 创建项目的操纵步调:
我们首先创建一个空的工程

工程名称是mp

创建springboot模块


这里我们选择springboot2.7.8的版本,并不勾选依赖,随后通过pom.xml手动添加


特别说明:下面这个是:IDEA 2024 的操纵设置








2. 入门设置第一个 MyBatis-Plus 案例

第一步:  创建数据库 mybatisplus

这些测试表,是来自于 MyBatis-Plus 官网教学的内容,各人也可以移步去看看:✏️✏️✏️ https://baomidou.com/getting-started/

现有一张 User 表,其表结构如下:
idnameageemail1Jone18test1@baomidou.com2Jack20test2@baomidou.com3Tom28test3@baomidou.com4Sandy21test4@baomidou.com5Billie24test5@baomidou.com其对应的数据库 Schema 脚本如下:
  1. DROP TABLE IF EXISTS `user`;
  2. CREATE TABLE `user`
  3. (
  4.     id BIGINT NOT NULL COMMENT '主键ID',
  5.     name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
  6.     age INT NULL DEFAULT NULL COMMENT '年龄',
  7.     email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
  8.     PRIMARY KEY (id)
  9. );
复制代码
其对应的数据库 Data 脚本如下:
  1. DELETE FROM `user`;
  2. INSERT INTO `user` (id, name, age, email) VALUES
  3. (1, 'Jone', 18, 'test1@baomidou.com'),
  4. (2, 'Jack', 20, 'test2@baomidou.com'),
  5. (3, 'Tom', 28, 'test3@baomidou.com'),
  6. (4, 'Sandy', 21, 'test4@baomidou.com'),
  7. (5, 'Billie', 24, 'test5@baomidou.com');
复制代码

第二步: 引入相关依赖,在 pom.xml 文件当中设置我们所需要的 jar 依赖。
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4.     <modelVersion>4.0.0</modelVersion>
  5.     <parent>
  6.         <groupId>org.springframework.boot</groupId>
  7.         <artifactId>spring-boot-starter-parent</artifactId>
  8.         <version>2.5.3</version>
  9.         <relativePath/>
  10.     </parent>
  11.     <groupId>com.rainbowsea</groupId>
  12.     <artifactId>mp02</artifactId>
  13.     <version>0.0.1-SNAPSHOT</version>
  14.     <name>mp02</name>
  15.     <description>mp02</description>
  16.     <url/>
  17.     <licenses>
  18.         <license/>
  19.     </licenses>
  20.     <developers>
  21.         <developer/>
  22.     </developers>
  23.     <scm>
  24.         <connection/>
  25.         <developerConnection/>
  26.         <tag/>
  27.         <url/>
  28.     </scm>
  29.     <properties>
  30.         <java.version>8</java.version>
  31.     </properties>
  32.     <dependencies>
  33.         <dependency>
  34.             <groupId>org.springframework.boot</groupId>
  35.             <artifactId>spring-boot-starter</artifactId>
  36.         </dependency>
  37.         <dependency>
  38.             <groupId>org.springframework.boot</groupId>
  39.             <artifactId>spring-boot-starter-test</artifactId>
  40.             <scope>test</scope>
  41.         </dependency>
  42.         
  43.         <dependency>
  44.             <groupId>org.springframework.boot</groupId>
  45.             <artifactId>spring-boot-starter-web</artifactId>
  46.         </dependency>
  47.         
  48.         <dependency>
  49.             <groupId>mysql</groupId>
  50.             <artifactId>mysql-connector-java</artifactId>
  51.         </dependency>
  52.         
  53.         <dependency>
  54.             <groupId>org.projectlombok</groupId>
  55.             <artifactId>lombok</artifactId>
  56.         </dependency>
  57.         
  58.         <dependency>
  59.             <groupId>com.alibaba</groupId>
  60.             <artifactId>druid</artifactId>
  61.             <version>1.2.8</version>
  62.         </dependency>
  63.         
  64.         <dependency>
  65.             <groupId>com.baomidou</groupId>
  66.             <artifactId>mybatis-plus-boot-starter</artifactId>
  67.             <version>3.4.3</version>
  68.         </dependency>
  69.     </dependencies>
  70.     <build>
  71.         <plugins>
  72.             <plugin>
  73.                 <groupId>org.springframework.boot</groupId>
  74.                 <artifactId>spring-boot-maven-plugin</artifactId>
  75.             </plugin>
  76.         </plugins>
  77.     </build>
  78.     <repositories>
  79.         <repository>
  80.             <id>spring-snapshots</id>
  81.             <name>Spring Snapshots</name>
  82.             <url>https://repo.spring.io/snapshot</url>
  83.             <releases>
  84.                 <enabled>false</enabled>
  85.             </releases>
  86.         </repository>
  87.     </repositories>
  88.     <pluginRepositories>
  89.         <pluginRepository>
  90.             <id>spring-snapshots</id>
  91.             <name>Spring Snapshots</name>
  92.             <url>https://repo.spring.io/snapshot</url>
  93.             <releases>
  94.                 <enabled>false</enabled>
  95.             </releases>
  96.         </pluginRepository>
  97.     </pluginRepositories>
  98. </project>
复制代码
特别说明:这里我们,将 Spring boot 改为:2.5.3 版本的。


在:MyBatis-Plus 当中是包含了MyBatis 的依赖的。以是,引入了 MyBatis-Plus 也就引入了MyBatis了。

第三步: 编写该项目/模块的场景启动器:

第四步: 根据数据表创建对应的实体类:
  1. package com.rainbowsea.bean;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. @Data
  6. @NoArgsConstructor
  7. @AllArgsConstructor
  8. public class User {
  9.     private Long id;
  10.     private String name;
  11.     private Integer age;
  12.     private String email;
  13. }
复制代码
第五步: 切换数据库连接池为 Druid 。这里我们编写设置类的方式,切换数据库连接池。

  • 在 resoucre 类路径下,创建名为 applicaiton.yaml 的设置文件,其中编写连接数据库的设置信息。
  1. spring:
  2.   datasource:
  3.     driver-class-name: com.mysql.cj.jdbc.Driver
  4.     url: jdbc:mysql://localhost:3306/mybatisplus?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
  5.     username: root
  6.     password: MySQL123
复制代码

  • 编写设置类,切换数据库为 Druid
  1. package com.rainbowsea.config;
  2. import com.alibaba.druid.pool.DruidDataSource;
  3. import org.springframework.boot.context.properties.ConfigurationProperties;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. import javax.sql.DataSource;
  7. /**
  8. * 配置切换,Druid 数据库连接池
  9. */
  10. @Configuration  // 标志配置类
  11. public class DruidDataSourceConfig {
  12.     @Bean  // 被 Spring ioc 容器管理起来
  13.     @ConfigurationProperties(value = "spring.datasource")
  14.     public DataSource getDataSource() {
  15.         DruidDataSource druidDataSource = new DruidDataSource();
  16.         return druidDataSource;
  17.     }
  18. }
复制代码
特别说明:关于spring boot 中切换数据库连接池的具体内容,各人可以移步至:✏️✏️✏️  十六,Spring Boot 整合 Druid 以及使用 Druid 监控功能-CSDN博客
测试:看看我们是否成功切换为了 Druid 数据库连接池。
  1. import com.rainbowsea.bean.User;
  2. import com.rainbowsea.mapper.UserMapper;
  3. import com.rainbowsea.service.UserService;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import org.springframework.jdbc.core.JdbcTemplate;
  8. import javax.annotation.Resource;
  9. import java.util.List;
  10. @SpringBootTest(classes = Mp02Application.class)  // Spring Boot 当中的测试,必须要有 项目的启动场景,不然无法测试报错
  11. class Mp02ApplicationTests {
  12.     @Resource
  13.     private JdbcTemplate jdbcTemplate;
  14.     @Test
  15.     void contextLoads() {
  16.         System.out.println(jdbcTemplate.getDataSource().getClass());
  17.     }
  18. }
复制代码

第六步: 背面的都是对应 MyBatis-Plus 的内容上的重点内容。
编写 Mapper接口
  1. package com.rainbowsea.mapper;
  2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  3. import com.rainbowsea.bean.User;
  4. import org.apache.ibatis.annotations.Mapper;
  5. @Mapper // 被Spring Boot 扫描到
  6. public interface UserMapper extends BaseMapper<User> {
  7. }
复制代码


我们的自己编写的 Mapper  接口 extends(继续) BaseMapper 接口就会拥有了其该接口下的方法。
第七步: 编写 Service 接口

  1. package com.rainbowsea.service;
  2. import com.baomidou.mybatisplus.extension.service.IService;
  3. import com.rainbowsea.bean.User;
  4. import java.util.List;
  5. public interface UserService extends IService<User> {
  6.     // 当 IService 当中提供的方法,不能满足我们的业务需要的时候,
  7.     // 我们可以自定义方法。
  8.     // 自定义的方法
  9.     List<User> selectAll();
  10. }
复制代码


第八步: 编写ServiceImpl

  1. package com.rainbowsea.service.Impl;
  2. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import com.rainbowsea.service.UserService;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Service;
  8. import javax.annotation.Resource;
  9. import java.util.Collections;
  10. import java.util.List;
  11. @Service
  12. public class UserServiceImpl extends ServiceImpl<UserMapper,User>
  13.         implements UserService  {
  14.     //@Resource
  15.     @Autowired  // 自动装配
  16.     private UserMapper userMapper;
  17.     // 对自定义方法的,重写实现
  18.     @Override
  19.     public List<User> selectAll() {
  20.         return userMapper.selectList(null);
  21.     }
  22. }
复制代码

它们之间的关系结构如下:


第九步:编写Controller 控制器:
  1. package com.rainbowsea.controller;
  2. import com.rainbowsea.bean.User;
  3. import com.rainbowsea.service.UserService;
  4. import org.springframework.web.bind.annotation.GetMapping;
  5. import org.springframework.web.bind.annotation.RestController;
  6. import javax.annotation.Resource;
  7. import java.util.List;
  8. @RestController
  9. public class UserController {
  10.     @Resource
  11.     private UserService userService;
  12.     @GetMapping(value = {"/selectList"})
  13.     public List<User> selectList() {
  14.         return userService.selectAll();
  15.     }
  16. }
复制代码
第十一步 :打开浏览器运行测试。

3. 补充说明:

3.1 通用 Mapper 接口先容

有关于 Mapper 接口,之前我们已经看到了,我们自己编写的Mapper接口继续 自己 BaseMapper 接口,由 BaseMapper 接口提供了很多单表的增删改查 相关的操纵方法,在入门案例种,我们测试了查询所有的操纵。我们先容一些简单的Mapper 接口中的方法,主要是感觉一下。Mapper接口中对于单表的增删改查的操纵都有涉及,更加高级的一些操纵。


3.1.1 Mapper 接口的 “增删改查”

3.1.1.1 查询所有记录

  1. import com.rainbowsea.bean.User;
  2. import com.rainbowsea.mapper.UserMapper;
  3. import com.rainbowsea.service.UserService;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import org.springframework.jdbc.core.JdbcTemplate;
  8. import javax.annotation.Resource;
  9. import java.util.List;
  10. @SpringBootTest(classes = Mp02Application.class)  // Spring Boot 当中的测试,必须要有 项目的启动场景,不然无法测试报错
  11. class Mp02ApplicationTests {
  12.     @Resource
  13.     private UserMapper userMapper;
  14.     // 查询所有
  15.     @Test
  16.     void selectList() {
  17.         List<User> users = userMapper.selectList(null);
  18.         for (User user : users) {
  19.             System.out.println(user);
  20.         }
  21.     }
  22. }
复制代码
3.1.1.2 插入一条数据

  1. import com.rainbowsea.bean.User;
  2. import com.rainbowsea.mapper.UserMapper;
  3. import com.rainbowsea.service.UserService;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import org.springframework.jdbc.core.JdbcTemplate;
  8. import javax.annotation.Resource;
  9. import java.util.List;
  10. @SpringBootTest(classes = Mp02Application.class)  // Spring Boot 当中的测试,必须要有 项目的启动场景,不然无法测试报错
  11. class Mp02ApplicationTests {
  12.     @Resource
  13.     private UserMapper userMapper;
  14.     // 简单添加
  15.     @Test
  16.     void insert() {
  17.         User user = new User();
  18.         user.setId(6L);
  19.         user.setAge(18);
  20.         user.setName("Lihua");
  21.         user.setEmail("test6@baomidou.com");
  22.         userMapper.insert(user);
  23.     }
  24. }
复制代码
3.1.1.3 删除一条数据

  1. import com.rainbowsea.bean.User;
  2. import com.rainbowsea.mapper.UserMapper;
  3. import com.rainbowsea.service.UserService;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import org.springframework.jdbc.core.JdbcTemplate;
  8. import javax.annotation.Resource;
  9. import java.util.List;
  10. @SpringBootTest(classes = Mp02Application.class)  // Spring Boot 当中的测试,必须要有 项目的启动场景,不然无法测试报错
  11. class Mp02ApplicationTests {
  12.     @Resource
  13.     private UserMapper userMapper;
  14.     // 简单删除
  15.     @Test
  16.     void deleteOne() {
  17.         userMapper.deleteById(4L);
  18.     }
  19. }
复制代码
3.1.1.4 更新一条数据

  1. import com.rainbowsea.bean.User;
  2. import com.rainbowsea.mapper.UserMapper;
  3. import com.rainbowsea.service.UserService;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import org.springframework.jdbc.core.JdbcTemplate;
  8. import javax.annotation.Resource;
  9. import java.util.List;
  10. @SpringBootTest(classes = Mp02Application.class)  // Spring Boot 当中的测试,必须要有 项目的启动场景,不然无法测试报错
  11. class Mp02ApplicationTests {
  12.     @Resource
  13.     private UserMapper userMapper;
  14.     // 简单更新
  15.     @Test
  16.     void updateById() {
  17.         User user = new User();
  18.         user.setId(2L);
  19.         user.setAge(18);
  20.         user.setName("李华");
  21.         user.setEmail("lihua@baomidou.com");
  22.         userMapper.updateById(user);
  23.     }
  24. }
复制代码
3.1.1.5 查询一条数据

  1. import com.rainbowsea.bean.User;
  2. import com.rainbowsea.mapper.UserMapper;
  3. import com.rainbowsea.service.UserService;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import org.springframework.jdbc.core.JdbcTemplate;
  8. import javax.annotation.Resource;
  9. import java.util.List;
  10. @SpringBootTest(classes = Mp02Application.class)  // Spring Boot 当中的测试,必须要有 项目的启动场景,不然无法测试报错
  11. class Mp02ApplicationTests {
  12.     @Resource
  13.     private UserMapper userMapper;
  14.     // 简单查询
  15.     @Test
  16.     void selectById() {
  17.         User user = userMapper.selectById(6L);
  18.         System.out.println(user);
  19.     }
  20. }
复制代码
3.2 通用 service接口先容

除了Mapper接口,MybatisPlus还提供了IService接口和对应的实现类ServiceImpl,该实现类已经提供好了一些对应的Service相关的方法,在某些场景下,我们可以直接使用ServiceImpl提供的方法,实现对应的功能。
IService接口

IService接口中包含了service相关的一些增删改查方法


ServiceImpl实现类

ServiceImpl实现类提供了service相关的增删改查方法的实现

UserService接口继续自IService接口

UserServiceImpl类继续ServiceImpl


注入UserService对象,测试相关方法

3.2.1 Service 接口的“增删改查”

3.2.1.1 添加一条记录

  1. import com.rainbowsea.bean.User;
  2. import com.rainbowsea.mapper.UserMapper;
  3. import com.rainbowsea.service.UserService;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import org.springframework.jdbc.core.JdbcTemplate;
  8. import javax.annotation.Resource;
  9. import java.util.List;
  10. @SpringBootTest(classes = Mp02Application.class)  // Spring Boot 当中的测试,必须要有 项目的启动场景,不然无法测试报错
  11. class Mp02ApplicationTests {
  12.     @Autowired
  13.     private UserService userService;
  14.    
  15.     //  UserService 添加
  16.     @Test
  17.     void insertService() {
  18.         User user = new User();
  19.         user.setId(7L);
  20.         user.setAge(18);
  21.         user.setName("Tom");
  22.         user.setEmail("Tom@baomidou.com");
  23.         userService.save(user);
  24.     }
  25. }
复制代码
3.2.1.2 删除一条记录

  1. import com.rainbowsea.bean.User;
  2. import com.rainbowsea.mapper.UserMapper;
  3. import com.rainbowsea.service.UserService;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import org.springframework.jdbc.core.JdbcTemplate;
  8. import javax.annotation.Resource;
  9. import java.util.List;
  10. @SpringBootTest(classes = Mp02Application.class)  // Spring Boot 当中的测试,必须要有 项目的启动场景,不然无法测试报错
  11. class Mp02ApplicationTests {
  12.     @Autowired
  13.     private UserService userService;
  14.     // UserService 删除
  15.     @Test
  16.     void deleteServie() {
  17.         userService.removeById(2L);
  18.     }
  19. }
复制代码
3.2.1.3 修改一条记录

  1. import com.rainbowsea.bean.User;
  2. import com.rainbowsea.mapper.UserMapper;
  3. import com.rainbowsea.service.UserService;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import org.springframework.jdbc.core.JdbcTemplate;
  8. import javax.annotation.Resource;
  9. import java.util.List;
  10. @SpringBootTest(classes = Mp02Application.class)  // Spring Boot 当中的测试,必须要有 项目的启动场景,不然无法测试报错
  11. class Mp02ApplicationTests {
  12.     @Autowired
  13.     private UserService userService;
  14.     // userService 修改
  15.     @Test
  16.     void updateService() {
  17.         User user = new User();
  18.         user.setId(3L);
  19.         user.setAge(22);
  20.         userService.updateById(user);
  21.     }
  22. }
复制代码
3.2.1.4 查询一条记录

  1. import com.rainbowsea.bean.User;
  2. import com.rainbowsea.mapper.UserMapper;
  3. import com.rainbowsea.service.UserService;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import org.springframework.jdbc.core.JdbcTemplate;
  8. import javax.annotation.Resource;
  9. import java.util.List;
  10. @SpringBootTest(classes = Mp02Application.class)  // Spring Boot 当中的测试,必须要有 项目的启动场景,不然无法测试报错
  11. class Mp02ApplicationTests {
  12.     @Autowired
  13.     private UserService userService;
  14.     // UserService 查询
  15.     @Test
  16.     void selectService() {
  17.         List<User> users = userService.selectAll();
  18.         for (User user : users) {
  19.             System.out.println(user);
  20.         }
  21.     }
  22. }
复制代码
3.3 自界说方法

MybatisPlus除了给我们提供了这些丰富的接口方法以外,对于我们自己的需求,也可以编写自界说的接口方法,我们通过自己编写SQL语句的形式,实现想要的SQL需求
3.3.1 自界说Mapper接口方法

Mapper接口中提供抽象方法
  1. package com.rainbowsea.mapper;
  2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  3. import com.rainbowsea.bean.User;
  4. import org.apache.ibatis.annotations.Mapper;
  5. @Mapper // 被Spring Boot 扫描到
  6. public interface UserMapper extends BaseMapper<User> {
  7.     // 自定义方法
  8.   User selectByName(String name);
  9. }
复制代码
提供映射设置文件,提供对应的SQL语句
注意:对应的映射的 SQL 设置文件的路径/包要同等,以及名称也要同等,才行。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper
  3.                 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4.                 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.rainbowsea.mapper.UserMapper" >
  6.         <select id="selectByName" resultType="com.rainbowsea.bean.User" parameterType="string">
  7.                 select id,age,name,email
  8.                 from user
  9.                 where name = #{value}
  10.         </select>
  11. </mapper>
复制代码
测试自界说的Mapper接口方法
  1. import com.rainbowsea.bean.User;
  2. import com.rainbowsea.mapper.UserMapper;
  3. import com.rainbowsea.service.UserService;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import org.springframework.jdbc.core.JdbcTemplate;
  8. import javax.annotation.Resource;
  9. import java.util.List;
  10. @SpringBootTest(classes = Mp02Application.class)  // Spring Boot 当中的测试,必须要有 项目的启动场景,不然无法测试报错
  11. class Mp02ApplicationTests {
  12.     @Resource
  13.     private UserMapper userMapper;
  14.     // 测试自定义方法
  15.     @Test
  16.     void myMethod() {
  17.         User tom = userMapper.selectByName("Lihua");
  18.         System.out.println(tom);
  19.     }
  20. }
复制代码
4. 总结:



6. 最后:

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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小秦哥

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表