国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

最近正在集成SpringBoot與MyBatis-plus, MyBatis-Plus-Join體驗感很好啊

這篇具有很好參考價值的文章主要介紹了最近正在集成SpringBoot與MyBatis-plus, MyBatis-Plus-Join體驗感很好啊。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

基本介紹

MyBatis-Plus (opens new window)(簡稱 MP)是一個 MyBatis (opens new window)的增強工具,在 MyBatis 的基礎(chǔ)上只做增強不做改變,為簡化開發(fā)、提高效率而生。

MyBatis-Plus特性

無侵入:只做增強不做改變,引入它不會對現(xiàn)有工程產(chǎn)生影響,如絲般順滑
損耗?。簡蛹磿詣幼⑷牖?CURD,性能基本無損耗,直接面向?qū)ο蟛僮?br> 強大的 CRUD 操作:內(nèi)置通用 Mapper、通用 Service,僅僅通過少量配置即可實現(xiàn)單表大部分 CRUD 操作,更有強大的條件構(gòu)造器,滿足各類使用需求
支持 Lambda 形式調(diào)用:通過 Lambda 表達式,方便的編寫各類查詢條件,無需再擔(dān)心字段寫錯
支持主鍵自動生成:支持多達 4 種主鍵策略(內(nèi)含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解決主鍵問題
支持 ActiveRecord 模式:支持 ActiveRecord 形式調(diào)用,實體類只需繼承 Model 類即可進行強大的 CRUD 操作
支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere )
內(nèi)置代碼生成器:采用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼,支持模板引擎,更有超多自定義配置等您來使用
內(nèi)置分頁插件:基于 MyBatis 物理分頁,開發(fā)者無需關(guān)心具體操作,配置好插件之后,寫分頁等同于普通 List 查詢
分頁插件支持多種數(shù)據(jù)庫:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多種數(shù)據(jù)庫
內(nèi)置性能分析插件:可輸出 SQL 語句以及其執(zhí)行時間,建議開發(fā)測試時啟用該功能,能快速揪出慢查詢
內(nèi)置全局攔截插件:提供全表 delete 、 update 操作智能分析阻斷,也可自定義攔截規(guī)則,預(yù)防誤操作

MyBatis-Plus-Join (opens new window)(簡稱 MPJ)是一個 MyBatis-Plus (opens new window)的增強工具,在 MyBatis-Plus 的基礎(chǔ)上只做增強不做改變,為簡化開發(fā)、提高效率而生。

MyBatis-Plus-Join特性

無侵入:只做增強不做改變,引入它不會對現(xiàn)有工程產(chǎn)生影響,如絲般順滑
無感引入, 支持MP風(fēng)格的查詢, 您會MP就會MPJ, 無需額外的學(xué)習(xí)成本
兼容MP的別名、邏輯刪除、枚舉列、TypeHandle列等特性
支持注解形式一對一、一對多和連表查詢形式的一對一和一對多

前置知識

分層領(lǐng)域模型規(guī)約

VO 是 Value Object 的縮寫,用于表示一個與前端進行交互的 java 對象。有的朋友也許有疑問,這里可不可以使用 PO 傳遞數(shù)據(jù)?實際上,這里的 VO 只包含前端需要展示的數(shù)據(jù)即可,對于前端不需要的數(shù)據(jù),比如數(shù)據(jù)創(chuàng)建和修改的時間等字段,出于減少傳輸數(shù)據(jù)量大小和保護數(shù)據(jù)庫結(jié)構(gòu)不外泄的目的,不應(yīng)該在 VO 中體現(xiàn)出來。通常遵守 Java Bean 的規(guī)范,擁有 getter/setter 方法。

DTO 是 Data Transfer Object 的縮寫,用于表示一個數(shù)據(jù)傳輸對象。DTO 通常用于不同服務(wù)或服務(wù)不同分層之間的數(shù)據(jù)傳輸。DTO 與 VO 概念相似,并且通常情況下字段也基本一致。但 DTO 與 VO 又有一些不同,這個不同主要是設(shè)計理念上的,比如 API 服務(wù)需要使用的 DTO 就可能與 VO 存在差異。通常遵守 Java Bean 的規(guī)范,擁有 getter/setter 方法。

BO 是 Business Object 的縮寫,用于表示一個業(yè)務(wù)對象。BO 包括了業(yè)務(wù)邏輯,常常封裝了對 DAO、RPC 等的調(diào)用,可以進行 PO 與 VO/DTO 之間的轉(zhuǎn)換。BO 通常位于業(yè)務(wù)層,要區(qū)別于直接對外提供服務(wù)的服務(wù)層:BO 提供了基本業(yè)務(wù)單元的基本業(yè)務(wù)操作,在設(shè)計上屬于被服務(wù)層業(yè)務(wù)流程調(diào)用的對象,一個業(yè)務(wù)流程可能需要調(diào)用多個 BO 來完成。

PO 是 Persistant Object 的縮寫,用于表示數(shù)據(jù)庫中的一條記錄映射成的 java 對象。PO 僅僅用于表示數(shù)據(jù),沒有任何數(shù)據(jù)操作。通常遵守 Java Bean 的規(guī)范,擁有 getter/setter 方法。

DAO 是 Data Access Object 的縮寫,用于表示一個數(shù)據(jù)訪問對象。使用 DAO 訪問數(shù)據(jù)庫,包括插入、更新、刪除、查詢等操作,與 PO 一起使用。DAO 一般在持久層,完全封裝數(shù)據(jù)庫操作,對外暴露的方法使得上層應(yīng)用不需要關(guān)注數(shù)據(jù)庫相關(guān)的任何信息。

舉個栗子1

數(shù)據(jù)庫表:表中的博客包括編號、博客標題、博客內(nèi)容、博客標簽、博客分類、博客狀態(tài)、創(chuàng)建時間、修改時間等。

VO:在客戶端瀏覽器展示的頁面數(shù)據(jù),博客標題、博客內(nèi)容、博客標簽、博客分類、創(chuàng)建時間、上一篇博客URL、下一篇博客URL。

DTO:在服務(wù)端數(shù)據(jù)傳輸?shù)膶ο螅幪?、博客標題、博客內(nèi)容、博客標簽、博客分類、創(chuàng)建時間、上一篇博客編號、下一篇博客編號。

BO:基本業(yè)務(wù)操作,如管理分類、管理標簽、修改博客狀態(tài)等,是我們常說的service層操作。

PO(Entity):包括編號、博客標題、博客內(nèi)容、博客標簽、博客分類、博客狀態(tài)、創(chuàng)建時間、修改時間等。(與數(shù)據(jù)庫表中的字段一樣。)

DAO:數(shù)據(jù)庫增刪改查的方法,例如新增博客、刪除博客、查詢所有博客、更新博客。

舉個栗子2

最近正在集成SpringBoot與MyBatis-plus, MyBatis-Plus-Join體驗感很好啊

絲滑使用開始了

sql

CREATE TABLE `class` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '編號',
  `name` varchar(30) DEFAULT NULL COMMENT '班級名',
  `floor` int(3) DEFAULT NULL COMMENT '樓層',
  `teacher_id` int(11) DEFAULT NULL COMMENT '老師編號(FK)',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='班級信息表';
INSERT INTO `class` VALUES ('1', '1年級2班', '4', '2');
INSERT INTO `class` VALUES ('2', '1年級3班', '4', '2');
INSERT INTO `class` VALUES ('3', '2年級1班', '1', '4');
INSERT INTO `class` VALUES ('4', '2年級2班', '2', '5');
INSERT INTO `class` VALUES ('5', '2年級3班', '3', '6');
INSERT INTO `class` VALUES ('6', '3年級1班', '4', '7');
INSERT INTO `class` VALUES ('7', '3年級2班', '1', '8');
INSERT INTO `class` VALUES ('8', '3年級3班', '2', '9');
INSERT INTO `class` VALUES ('9', '4年級1班', '3', '10');
INSERT INTO `class` VALUES ('10', '4年級2班', '4', '11');
INSERT INTO `class` VALUES ('11', '4年級3班', '1', '12');
INSERT INTO `class` VALUES ('12', '5年級1班', '2', '13');
INSERT INTO `class` VALUES ('13', '5年級3班', '4', '15');
INSERT INTO `class` VALUES ('14', '6年級2班', '2', '17');
INSERT INTO `class` VALUES ('15', '6年級3班', '3', '18');
INSERT INTO `class` VALUES ('16', '1年級4班', '4', '99');
INSERT INTO `class` VALUES ('17', '2年級4班', '2', '99');
INSERT INTO `class` VALUES ('18', '3年級4班', '1', '99');
INSERT INTO `class` VALUES ('19', '4年級1班', '1', '20');
INSERT INTO `class` VALUES ('30', '4年級1班', '22', '20');

CREATE TABLE `teacher` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '編號',
  `name` varchar(30) DEFAULT NULL COMMENT '名字',
  `age` int(2) DEFAULT NULL COMMENT '年齡',
  `title` varchar(30) DEFAULT NULL COMMENT '職稱',
  `manager` int(11) DEFAULT NULL COMMENT '上司編號(FK)',
  `salary` int(6) DEFAULT NULL COMMENT '工資',
  `comm` int(6) DEFAULT NULL COMMENT '獎金',
  `gender` char(1) DEFAULT NULL COMMENT '性別',
  `subject_id` int(11) DEFAULT NULL COMMENT '科目編號(FK)',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='老師信息表';
INSERT INTO `teacher` VALUES ('1', '劉蒼松', '55', '總監(jiān)', '20', '10000', '5000', '男', '1');
INSERT INTO `teacher` VALUES ('2', '范傳奇', '33', '三級講師', '1', '3000', null, '男', '2');
INSERT INTO `teacher` VALUES ('3', '王克晶', '32', '一級講師', '1', '8000', '3000', '女', '3');
INSERT INTO `teacher` VALUES ('4', '劉國斌', '29', '二級講師', '1', '7300', '3400', '男', '4');
INSERT INTO `teacher` VALUES ('5', '成恒', '35', '三級講師', '1', '5200', '4600', '男', '5');
INSERT INTO `teacher` VALUES ('6', '張皓嵐', '33', '二級講師', '1', '7800', '700', '男', '2');
INSERT INTO `teacher` VALUES ('7', '胡悅', '25', '一級講師', '1', '9000', '2800', '女', '1');
INSERT INTO `teacher` VALUES ('8', '齊雷', '45', '總監(jiān)', '20', '9800', '7800', '男', '3');
INSERT INTO `teacher` VALUES ('9', '王海濤', '44', '二級講師', '8', '3100', '1200', '男', '4');
INSERT INTO `teacher` VALUES ('10', '張久軍', '39', '一級講師', '8', '2000', '6000', '男', '5');
INSERT INTO `teacher` VALUES ('11', '于健', '27', '二級講師', '12', '3800', null, '男', '2');
INSERT INTO `teacher` VALUES ('12', '張立志', '34', '總監(jiān)', '20', '13000', '900', '男', '3');
INSERT INTO `teacher` VALUES ('13', '吳華', '46', '總監(jiān)', '20', '8700', '6900', '男', '5');
INSERT INTO `teacher` VALUES ('14', '李大帥', '29', '三級講師', '13', '7000', null, '男', '1');
INSERT INTO `teacher` VALUES ('15', '田浩', '26', '二級講師', '13', '5600', '1900', '男', '4');
INSERT INTO `teacher` VALUES ('16', '肖旭偉', '36', '一級講師', '12', '6800', '600', '男', '2');
INSERT INTO `teacher` VALUES ('17', '張敏', '29', '三級講師', '13', '6100', '400', '女', '3');
INSERT INTO `teacher` VALUES ('18', '趙微', '26', '二級講師', '13', '4600', '6500', '女', '4');
INSERT INTO `teacher` VALUES ('19', '李源', '25', '三級講師', '13', '6300', '0', '男', '4');
INSERT INTO `teacher` VALUES ('20', '韓少云', '55', '老板', null, '1', '0', '男', null);

pom.xml

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
		<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.8</version>
        </dependency>
		<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
        </dependency>
		<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.3</version>
        </dependency>
        <dependency>
            <groupId>com.github.yulichang</groupId>
            <artifactId>mybatis-plus-join-boot-starter</artifactId>
            <version>1.4.6</version>
       </dependency>

application.yml

spring:
  # 數(shù)據(jù)庫連接配置
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://localhost:3306/hedu?useSSL=false&serverTimeZone=Asia/Shanghai
    username: root
    password: root
# mybatis-plus配置
mybatis-plus:
  mapper-locations: classpath:mappers/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

Mybatis-plus的分頁插件的配置

package cn.highedu.boot.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MybatisPlusConfig {
    /**
     * 分頁插件的配置
     * @return
     */
    @Bean
    public MybatisPlusInterceptor paginationInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        /**
         * DbType.XXX
         * XXX 為具體的數(shù)據(jù)庫類型如MYSQL,ORACLE
         */
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

最近正在集成SpringBoot與MyBatis-plus, MyBatis-Plus-Join體驗感很好啊

創(chuàng)建基本類

Class

package cn.highedu.boot.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Class {
    @TableId(type = IdType.AUTO)
    private Integer id;
    private String name;
    private Integer floor;
    private Integer teacherId;
}

ClassMapper

package cn.highedu.boot.mapper;

import cn.highedu.boot.entity.Class;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.github.yulichang.base.MPJBaseMapper;
import org.apache.ibatis.annotations.*;

@Mapper
public interface ClassMapper extends BaseMapper<Class>, MPJBaseMapper<Class> {
}

ClassService

package cn.highedu.boot.service;

import cn.highedu.boot.pojo.entity.Class;
import com.github.yulichang.extension.mapping.base.MPJDeepService;

public interface ClassService extends MPJDeepService<Class> {
}

ClassServiceImpl

package cn.highedu.boot.service.impl;

import cn.highedu.boot.entity.Class;
import cn.highedu.boot.mapper.ClassMapper;
import cn.highedu.boot.service.ClassService;
import com.github.yulichang.base.MPJBaseServiceImpl;
import org.springframework.stereotype.Service;

@Service
public class ClassServiceImpl extends MPJBaseServiceImpl<ClassMapper, Class> implements ClassService {
}

Teacher

package cn.highedu.boot.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Teacher {
    private Integer id;
    private String name;
    private Integer age;
    private String title;
    private Integer manager;
    private Integer salary;
    private Integer comm;
    private Character gender;
    private Integer subjectId;
}

TeacherMapper

package cn.highedu.boot.mapper;

import cn.highedu.boot.entity.Teacher;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.github.yulichang.base.MPJBaseMapper;
import org.apache.ibatis.annotations.*;

@Mapper
public interface TeacherMapper extends BaseMapper<Teacher>, MPJBaseMapper<Teacher> {
}

TeacherService

package cn.highedu.boot.service;

import cn.highedu.boot.pojo.entity.Teacher;
import com.github.yulichang.extension.mapping.base.MPJDeepService;

public interface TeacherService extends MPJDeepService<Teacher> {
}

TeacherServiceImpl

package cn.highedu.boot.service.impl;

import cn.highedu.boot.entity.Teacher;
import cn.highedu.boot.mapper.TeacherMapper;
import cn.highedu.boot.service.TeacherService;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.springframework.stereotype.Service;

@Service
public class TeacherServiceImpl extends MPJBaseServiceImpl<TeacherMapper, Teacher> implements TeacherService {
}

TeacherVO

package cn.highedu.boot.pojo.vo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class TeacherVO {
    @TableId(type = IdType.AUTO)
    private Integer id;
    private String name;
    private Integer age;
    private String title;
    private Integer manager;
    private Integer salary;
    private Integer comm;
    private Character gender;
    private Integer subjectId;

    private String  className;
    private Integer floor;
}

單表操作

SingleTableOperationTest

package cn.highedu.boot.service;

import cn.highedu.boot.entity.Class;
import cn.highedu.boot.mapper.ClassMapper;
import cn.highedu.boot.service.impl.ClassServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
class ClassServiceTest  extends ClassServiceImpl {

    @Autowired
    private ClassMapper classMapperSimple;

    //基本操作
    //insert
    /**
     * 新增一條記錄
     */
    @Test
    void simpleAddOne(){
        Class addOneClazz = new Class();
        addOneClazz.setName("4年級1班");
        addOneClazz.setFloor(22);
        addOneClazz.setTeacherId(20);
        //INSERT INTO class ( name, floor, teacher_id ) VALUES ( ?, ?, ? );
        int addOneResult = classMapperSimple.insert(addOneClazz);
        System.out.println(addOneResult);
    }

    //delete
    /**
     * 根據(jù)Id刪除一條記錄
     */
    @Test
    void simpleDeleteOneById(){
        //DELETE FROM class WHERE id=?;
        int deleteByIdResult = classMapperSimple.deleteById(1);
        System.out.println(deleteByIdResult);
    }

    //update
    /**
     * 根據(jù)Id更改一條記錄
     */
    @Test
    void simpleUpdateOneById(){
        Class updateClass = new Class();
        updateClass.setId(2);
        updateClass.setName("1年級3班");
        updateClass.setFloor(4);
        updateClass.setTeacherId(2);
        //UPDATE class SET name=?, floor=?, teacher_id=? WHERE id=?;
        int updateByIdResult = classMapperSimple.updateById(updateClass);
        System.out.println(updateByIdResult);
    }

    //select
    /**
     * 根據(jù)Id查詢一條記錄
     */
    @Test
    void simpleQueryOneById(){
        //SELECT id,name,floor,teacher_id FROM class WHERE id=?;
        Class queryOneClass = classMapperSimple.selectById(1);
        System.out.println(queryOneClass);
    }


    /**
     * 查詢所有記錄
     */
    @Test
    void simpleQueryAll() {
        //SELECT id,name,floor,teacher_id FROM class;
        List<Class> queryClasses = classMapperSimple.selectList(null);
        System.out.println(queryClasses);
    }


    /**
     *|     函數(shù)名   |     說明     |
     *| ----------- | -----------  |
     *|      eq     |     等于     |
     *|      ne     |     不等     |
     *|      gt     |     大于     |
     *|      it     |     小于     |
     *|    between  | 在值1到值2之間 |
     *|     like    |   模糊查詢    |
     *|     isNull  |  字段為NULL   |
     */

    @Autowired
    private ClassMapper classMapperComplex;

    //進階操作

    //單表操作
    //select
    /**
     * 根據(jù)Id查詢1條數(shù)據(jù)
     */
    @Test
    void complexQueryOne(){
        LambdaQueryWrapper<Class> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(Class::getId, 1);
        //SELECT id,name,floor,teacher_id FROM class WHERE (id = ?);
        Class complexQueryOne = classMapperComplex.selectOne(queryWrapper);
        System.out.println(complexQueryOne);
    }
    /**
     * 查詢相同條件的數(shù)據(jù)
     */
    @Test
    void complexQueryAll(){
        LambdaQueryWrapper<Class> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(Class::getFloor,1);
        //SELECT id,name,floor,teacher_id FROM class WHERE (floor = ?);
        List<Class> complexQueryAll = classMapperComplex.selectList(queryWrapper);
        System.out.println(complexQueryAll);
    }


    /**
     * 查詢范圍內(nèi)的數(shù)據(jù)
     */
    @Test
    void complexBetweenQuery(){
        LambdaQueryWrapper<Class> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.between(Class::getFloor,1,3);
        //SELECT id,name,floor,teacher_id FROM class WHERE (floor BETWEEN ? AND ?);
        List<Class> complexQueryAll = classMapperComplex.selectList(queryWrapper);
        System.out.println(complexQueryAll);
    }

    /**
     * 模糊查詢
     * like():前后加百分號,如 %1年級%
     * likeLeft():前面加百分號,如 %1年級
     * likeRight():后面加百分號,如 1年級%
     */
    @Test
    void complexLikeQuery(){
        LambdaQueryWrapper<Class> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.likeRight(Class::getName,"1年級");
        // SELECT id,name,floor,teacher_id FROM class WHERE (name LIKE ?);
        List<Class> complexLikeQuery = classMapperComplex.selectList(queryWrapper);
        System.out.println(complexLikeQuery);
    }

    /**
     * 按照樓層升序排列,從小到大
     */
    @Test
    void complexOrderQuery(){
        LambdaQueryWrapper<Class> queryWrapper = Wrappers.lambdaQuery();
        //condition :條件,返回boolean,當condition為true,進行排序,如果為false,則不排序
        //isAsc:是否為升序,true為升序,false為降序
        //columns:需要操作的列
        queryWrapper.orderBy(true,true,Class::getFloor);
        //SELECT id,teacher_id,name,floor FROM class ORDER BY floor ASC;
        List<Class> complexOrderByAscQuery= classMapperComplex.selectList(queryWrapper);
        System.out.println(complexOrderByAscQuery);
    }
    /**
     * 分頁非條件查詢,查詢第1頁,3條數(shù)據(jù)
     */
    @Test
    void complexPageQuery(){
        Page<Class> page = new Page<>(1,3);
        //SELECT id,teacher_id,name,floor FROM class LIMIT ?;
        classMapperComplex.selectPage(page, null);
        System.out.println(page.getRecords());//每頁數(shù)據(jù)list集合

        System.out.println(page.getCurrent());//當前頁
        System.out.println(page.getSize());//每頁顯示記錄數(shù)
        System.out.println(page.getTotal());//總記錄數(shù)
        System.out.println(page.getPages());//總頁數(shù)

        System.out.println(page.hasPrevious());//上一頁
        System.out.println(page.hasNext());//下一頁
    }

    /**
     * 分頁條件查詢,查詢1到3樓的班級信息,顯示第1頁,3條數(shù)據(jù)
     */
    @Test
    void complexPageQueryWrapper(){
        LambdaQueryWrapper<Class> queryWrapper = Wrappers.lambdaQuery();
        Page<Class> page = new Page<>(1,3);
        //SELECT id,teacher_id,name,floor FROM class WHERE (floor BETWEEN ? AND ?) LIMIT ?;
        classMapperComplex.selectPage(page, queryWrapper.between(Class::getFloor,1,3));
    }
}

多表操作

MultipleTableOperationTest

package cn.highedu.boot.service;

import cn.highedu.boot.pojo.vo.TeacherVO;
import cn.highedu.boot.pojo.entity.Class;
import cn.highedu.boot.pojo.entity.Teacher;
import cn.highedu.boot.mapper.TeacherMapper;
import cn.highedu.boot.service.impl.TeacherServiceImpl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
public class MultipleTableOperationTest extends TeacherServiceImpl {

    @Autowired
    private TeacherMapper teacherMapper;

    /**
     *|     函數(shù)名   |     說明     |
     *| ----------- | -----------  |
     *|      eq     |     等于     |
     *|      ne     |     不等     |
     *|      gt     |     大于     |
     *|      it     |     小于     |
     *|    between  | 在值1到值2之間 |
     *|     like    |   模糊查詢    |
     *|     isNull  |  字段為NULL   |
     */

    /**
     * 查詢樓層大于2的所有老師及各個老師所在的班級信息,并按樓層的升序排列
     */
    @Test
    void selectTeachersWhichOverFloor(){
        MPJLambdaWrapper<Teacher> wrapper = new MPJLambdaWrapper<Teacher>();
        wrapper.selectAll(Teacher.class)//查詢Teacher表全部字段
                .select(Class::getFloor, Class::getName)
                .rightJoin(Class.class, Class::getTeacherId, Teacher::getId)
                .gt(Class::getFloor,1)
                .orderByAsc(Class::getFloor);

        //.leftJoin(UserAddressDO.class, UserAddressDO::getUserId,UserDO::getId)
        //相當于 LEFT JOIN user_address t1 on t1.user_id = user.id

        /* SELECT
         *      t.id,t.name,t.age,t.title,t.manager,t.salary,t.comm,t.gender,
         *      t.subject_id,t1.floor,t1.name
         * FROM
         *      teacher t
         * RIGHT JOIN
         *      class t1
         * ON
         *      (t1.teacher_id = t.id);
         * WHERE
         *      (t1.floor > ?)
         * ORDER BY
         *      t1.floor ASC
         */
        List<TeacherVO> teacherList = teacherMapper.selectJoinList(TeacherVO.class, wrapper);
        System.out.println(teacherList);
    }

    /**
     * 在上面的基礎(chǔ)上,增添了分頁的功能,查詢第2頁,每頁5條數(shù)據(jù)
     */
    @Test
    void selectTeachersWhichOverFloorPage(){
        MPJLambdaWrapper<Teacher> wrapper = new MPJLambdaWrapper<Teacher>();
        wrapper.selectAll(Teacher.class)//查詢Teacher表全部字段
                .select(Class::getFloor, Class::getName)
                .rightJoin(Class.class, Class::getTeacherId, Teacher::getId)
                .gt(Class::getFloor,1)
                .orderByAsc(Class::getFloor);
        Page<TeacherVO> page = new Page<>(2, 5);
        /* SELECT
         *      t.id,t.name,t.age,t.title,t.manager,t.salary,t.comm,t.gender,
         *      t.subject_id,t1.floor,t1.name
         * FROM
         *      teacher t
         * RIGHT JOIN
         *      class t1
         * ON
         *      (t1.teacher_id = t.id);
         * WHERE
         *      (t1.floor > ?)
         * ORDER BY
         *      t1.floor ASC
         * LIMIT
         *      ?,?
         */
        IPage<TeacherVO> teacherList = teacherMapper.selectJoinPage(page, TeacherVO.class,wrapper);
        System.out.println(teacherList);
    }
}

參考(項目資源)

Java版本為17
項目的藍奏云: https://robotboy.lanzoue.com/i1szr1a5s1hi

MyBatis-Plus-Join官網(wǎng)--------------MyBatis-Plus官網(wǎng)
https://blog.csdn.net/qq_52880445/article/details/124632069
https://zhuanlan.zhihu.com/p/102389552文章來源地址http://www.zghlxwxcb.cn/news/detail-712016.html

到了這里,關(guān)于最近正在集成SpringBoot與MyBatis-plus, MyBatis-Plus-Join體驗感很好啊的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • spring boot集成mybatis-plus——Mybatis Plus 查詢數(shù)據(jù)(圖文講解)

    spring boot集成mybatis-plus——Mybatis Plus 查詢數(shù)據(jù)(圖文講解)

    ?更新時間 2023-01-03 16:07:12 大家好,我是小哈。 本小節(jié)中,我們將學(xué)習(xí)如何通過 Mybatis Plus 查詢數(shù)據(jù)庫表中的數(shù)據(jù)。 在前面小節(jié)中,我們已經(jīng)定義好了一個用于測試的用戶表, 執(zhí)行腳本如下: 定義一個名為? User ?實體類: 不明白 Mybatis Plus 實體類注解的小伙伴,可參考前面

    2024年02月02日
    瀏覽(23)
  • spring boot集成mybatis-plus——Mybatis Plus 批量 Insert_新增數(shù)據(jù)(圖文講解)

    spring boot集成mybatis-plus——Mybatis Plus 批量 Insert_新增數(shù)據(jù)(圖文講解)

    ?更新時間 2023-01-10 16:02:58 大家好,我是小哈。 本小節(jié)中,我們將學(xué)習(xí)如何通過 Mybatis Plus 實現(xiàn) MySQL 批量插入數(shù)據(jù)。 先拋出一個問題:假設(shè)老板給你下了個任務(wù),向數(shù)據(jù)庫中添加 100 萬條數(shù)據(jù),并且不能耗時太久! 通常來說,我們向 MySQL 中新增一條記錄,SQL 語句類似如下:

    2024年02月04日
    瀏覽(28)
  • spring boot集成mybatis-plus——Mybatis Plus 新增數(shù)據(jù)并返回主鍵 ID(圖文講解)

    spring boot集成mybatis-plus——Mybatis Plus 新增數(shù)據(jù)并返回主鍵 ID(圖文講解)

    ?更新時間 2023-01-10 15:37:37 大家好,我是小哈。 本小節(jié)中,我們將學(xué)習(xí)如何通過 Mybatis Plus 框架給數(shù)據(jù)庫表新增數(shù)據(jù),主要內(nèi)容思維導(dǎo)圖如下: Mybatis Plus 新增數(shù)據(jù)思維導(dǎo)圖 為了演示新增數(shù)據(jù),在前面小節(jié)中,我們已經(jīng)定義好了一個用于測試的用戶表, 執(zhí)行腳本如下: 定義一

    2024年02月02日
    瀏覽(41)
  • spring boot集成mybatis-plus——Mybatis Plus 多表聯(lián)查(包含分頁關(guān)聯(lián)查詢,圖文講解)...

    spring boot集成mybatis-plus——Mybatis Plus 多表聯(lián)查(包含分頁關(guān)聯(lián)查詢,圖文講解)...

    ?更新時間 2023-01-03 21:41:38 大家好,我是小哈。 本小節(jié)中,我們將學(xué)習(xí)如何通過 Mybatis Plus 實現(xiàn) 多表關(guān)聯(lián)查詢 ,以及 分頁關(guān)聯(lián)查詢 。 本文以 查詢用戶所下訂單 ,來演示 Mybatis Plus 的關(guān)聯(lián)查詢,數(shù)據(jù)庫表除了前面小節(jié)中已經(jīng)定義好的用戶表外,再額外創(chuàng)建一張訂單表,然后

    2024年02月01日
    瀏覽(25)
  • 從零開始學(xué)Spring Boot系列-集成MyBatis-Plus

    從零開始學(xué)Spring Boot系列-集成MyBatis-Plus

    在Spring Boot應(yīng)用開發(fā)中,MyBatis-Plus是一個強大且易于使用的MyBatis增強工具,它提供了很多實用的功能,如代碼生成器、條件構(gòu)造器、分頁插件等,極大地簡化了MyBatis的使用和配置。本篇文章將指導(dǎo)大家如何在Spring Boot項目中集成MyBatis-Plus。 首先,確保你已經(jīng)安裝了Java開發(fā)環(huán)

    2024年04月08日
    瀏覽(75)
  • Mybatis-plus-join連表查詢

    目錄 一、數(shù)據(jù)庫DDL 二、JAVA代碼 三、pom依賴和配置文件 ? ? ? ????????最近發(fā)現(xiàn)一個好玩的框架,我們知道m(xù)ybatis-plus在連表查詢上是不行的,如果需要連表查詢,那么我們就得乖乖的去寫xml文件了,但是今天發(fā)現(xiàn)一個新的框架 mybatis-plus-join。它既包含了mybatis-plus的所有優(yōu)

    2024年02月11日
    瀏覽(28)
  • Mybatis-Plus+SpringBoot框架詳解

    Mybatis-Plus+SpringBoot框架詳解

    1、SpringBoot 簡介 SpringBoot 提供了一種快速使用 Spring 的方式,基于約定優(yōu)于配置的思想,可以讓開發(fā)人員不必在配置與邏輯業(yè)務(wù)之間進行思維的切換,全身心的投入到邏輯業(yè)務(wù)的代碼編寫中,從而大大提高了開發(fā)的效率,一定程度上縮短了項目周期。 2014 年 4 月,Spring Boot 1

    2023年04月08日
    瀏覽(28)
  • SpringBoot整合Mybatis-Plus(SpringBoot3)

    SpringBoot整合Mybatis-Plus(SpringBoot3)

    依賴pom.xml: pom.xml resource包下的Application.yml: Aollication.yml pojo包下的實體類User: User mapper包下的接口UserMapper: UserMapper 主啟動類DemoPlusApplication DemoPlusApplication 測試類DemoApplicationTest: DemoApplicationTest 實現(xiàn)結(jié)果 檢測數(shù)據(jù)庫連接: C(Create): D(Delete): U(Update) R(Read)

    2024年03月20日
    瀏覽(24)
  • SpringBoot整合JUnit--MyBatis--MyBatis-Plus--Druid

    SpringBoot整合JUnit--MyBatis--MyBatis-Plus--Druid

    文章轉(zhuǎn)自黑馬程序員SpringBoot學(xué)習(xí)筆記,學(xué)習(xí)網(wǎng)址:黑馬程序員SpringBoot2教程 1.整合JUnit ? SpringBoot技術(shù)的定位用于簡化開發(fā),再具體點是簡化Spring程序的開發(fā)。所以在整合任意技術(shù)的時候,如果你想直觀感觸到簡化的效果,你必須先知道使用非SpringBoot技術(shù)時對應(yīng)的整合是如何做

    2023年04月23日
    瀏覽(26)
  • SpringBoot(整合MyBatis + MyBatis-Plus + MyBatisX插件使用)

    SpringBoot(整合MyBatis + MyBatis-Plus + MyBatisX插件使用)

    1.需求分析 2.數(shù)據(jù)庫表設(shè)計 3.數(shù)據(jù)庫環(huán)境配置 1.新建maven項目 2.pom.xml 引入依賴 3.application.yml 配置數(shù)據(jù)源 數(shù)據(jù)庫名 用戶名 密碼 驅(qū)動是mysql8的(因為上面使用了版本仲裁) 4.Application.java 編寫啟動類 5.測試 6.配置類切換druid數(shù)據(jù)源 7.測試數(shù)據(jù)源是否成功切換 4.Mybatis基礎(chǔ)配置 1

    2024年03月20日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包