Spring Boot学习篇(五)

news2024/12/29 10:35:28

Spring Boot学习篇(五)

mybatis-plus使用

1.1 配置pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>boot-plus</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--①继承springboot项目-->
    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.7.2</version>
    </parent>
    <!--② 导入相关依赖-->
    <dependencies>
        <!--2.1 导入springboot所需要的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--2.2 导入mysql数据库依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--2.3 导入lombok依赖,便于写实体类-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!--2.4 导入mybatisPlus所需依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
        <!--2.5 导入springboot项目中单元测试所需依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

        <!--2.6 导入代码生成器所需要的依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>
    </dependencies>
</project>

1.2 在java文件夹下面创建com包.zlz包,其目录结构如下所示

在这里插入图片描述

1.3 在zlz包下创建PlusStart类,其内容如下所示

package com.zlz;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class PlusStart {
    public static void main(String[] args) {
        SpringApplication.run(PlusStart.class);
    }
}

1.4 在zlz包下创建代码生成器类MyGenerator

1.4.0 复制java文件夹绝对路径小技巧

在这里插入图片描述

1.4.1 内容如下

package com.zlz;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;

import java.util.Collections;

public class MyGenerator {
    public static void main(String[] args) {
        FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3305/db0618", "root", "root")
                .globalConfig(builder -> {
                    builder.author("zlz") // 设置作者
                            .dateType(DateType.ONLY_DATE) // 时间策略,日期以什么样子的类型去生成
                            .outputDir("F:\\boot\\boot-plus\\src\\main\\java"); // 指定输出目录
                })
                .packageConfig(builder -> {
                    builder.parent("com.zlz") // 设置父包名
                            .pathInfo(Collections.singletonMap(OutputFile.xml, "F:\\boot\\boot-plus\\src\\main\\resources\\mapper")); // 设置mapperXml生成路径,
                    // 注意:这个mapper文件夹是可以不存在的,运行该main方法会自动创建的
                })
                .strategyConfig(builder -> {
                     //开启lombok
                    builder.entityBuilder().enableLombok();
                    //覆盖现有文件
                    builder.entityBuilder().fileOverride();
                    builder.addInclude("songs"); // 设置需要生成的表名,想一次性生成多张表,就用逗号隔开,如:addInclude("songs","music")
                })
                .execute();
    }
}

1.5 运行MyGenerator类方法

1.5.1 运行前目录结构

在这里插入图片描述

1.5.2 运行后

a 弹出一个如下所示的文件资源管理器,直接叉掉即可

在这里插入图片描述

b 运行后目录结构

在这里插入图片描述

1.6.微改一下生成的实体类Songs

package com.zlz.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import java.util.Date;

import lombok.*;

/**
 * <p>
 * 
 * </p>
 *
 * @author zlz
 * @since 2023-01-02
 */
//①改动地方1
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Songs implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    private String singerName;

    private String album;

    private String albumImg;

    private String name;
    //②改动地方2,调成日期形式,就不用转型了
    private String releaseDate;
}

1.7.在resources文件夹下创建application.yml,其内容如下所示

spring:
  datasource
    url: jdbc:mysql://127.0.0.1:3305/db0618
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: root

mybatis-plus:
  type-aliases-package: com.zlz.entity #实体别名扫描
#配置日志 查看具体的sql执行语句
logging:
  level:
    com.zlz.mapper: debug

1.8 在zlz包下创建config包,并创建PlusConfig类

1.8.1 目录结构如下所示

在这里插入图片描述

1.8.2 PlusConfig类的内容如下所示

package com.zlz.config;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan("com.zlz.mapper")//mapper接口扫描,@MapperScan也可以放在启动类PlusStart上面(启动类也算配置类)
public class PlusConfig {
}

1.9.测试类环境准备

import com.zlz.PlusStart;
import com.zlz.service.ISongsService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest(classes = PlusStart.class,
    webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class MyTest {
    @Autowired
    ISongsService songsService;
}

1.10 查询

A 根据主键查询单条

a 示例代码
@Test
public void findOne(){
    Songs byId = songsService.getById(666);
    System.out.println(byId);
}
b.运行截图

在这里插入图片描述

B 查询全部

a 示例代码
 @Test
    public void findAll(){
        List<Songs> list = songsService.list();
        for (Songs songs : list) {
            System.out.println(songs);
        }
    }
b 运行截图

在这里插入图片描述

C 带条件的查询(queryWrapper)

a 相等查询
a.1 示例代码
//带上条件的查询(使用场景:商城商品的关键字搜索)
@Test
public void findByCondition(){
    //查询条件构造器
    String search="张学友";
    QueryWrapper<Songs> qw = new QueryWrapper<>();
    //第一个参数是条件,如果条件为真就带上第三个参数,为假就不带上,第二个参数是表的字段名
    qw.eq(search!=null, "singer_name",search);
    List<Songs> list = songsService.list(qw);
    for (Songs songs : list) {
        System.out.println(songs);
    }
}
a.2 运行截图

在这里插入图片描述

b 范围查询between
b.1 示例代码
  @Test
    public void findByCondition(){
        //范围查找between
        QueryWrapper<Songs> qw = new QueryWrapper<>();
        qw.between("release_date", "2000-1-1","2020-1-1");
        List<Songs> list = songsService.list(qsw);
        for (Songs songs : list) {
            System.out.println(songs);
        }
    }
b.2 运行截图

在这里插入图片描述

c 模糊查询 like
c.1 示例代码
  @Test
    public void findByCondition(){
        //查询条件构造器
        QueryWrapper<Songs> qw = new QueryWrapper<>();
        //查询歌曲表中歌手名字以张开头的所有歌手信息
        qw.likeRight("singer_name", "张");
        List<Songs> list = songsService.list(qw);
        for (Songs songs : list) {
            System.out.println(songs);
        }
    }
c.2 运行截图

在这里插入图片描述

e 查询指定的一些列
e.1 示例代码
public void findByCondition(){
        //查询条件构造器
        QueryWrapper<Songs> qw = new QueryWrapper<>();
        //查询某些列是用逗号去进行分开,然后查到了的数据才有值,没有查到的数据就都是null值
        qw.select("id,name");
        List<Songs> list = songsService.list(qw);
        for (Songs songs : list) {
            System.out.println(songs);
        }
    }
e.2 运行截图

在这里插入图片描述

f 分组查询
f.1 示例代码
@Test
    public void findByGroup(){
        //统计歌曲表中每个歌手唱了多少首歌
        //① 创建QueryWrapper对象
        QueryWrapper<Songs> qw = new QueryWrapper<>();
        //② 指定分组字段
        qw.groupBy("singer_name");
        //下面的select方法相当于的sql语句是 select singer_name,count(*) num from songs group by singer_name;
        //③指定要查询出来的列
        qw.select("singer_name,count(*) num");
        //因为是多条数据,一条数据就相当于一个map,所以需要用List<Map<String, Object>>来进行接受
        //④使用listMaps方法去进行查询
        List<Map<String, Object>> maps = songsService.listMaps(qw);
        for (Map<String, Object> map : maps) {
            System.out.println(map);
        }
    }
f.2 日志显示最终使用的sql语句

在这里插入图片描述

f.3 查询出来的结果展示

在这里插入图片描述

g 排序查询

g.1 示例代码

//排序的使用
@Test
public void findByOrder(){
    //把歌曲表按照日期降序排列
    QueryWrapper<Songs> qw = new QueryWrapper<>();
    //如果想要指定多个字段排序,那么可以使用逗号隔开,如orderByDesc("字段1,字段2...")
    qw.orderByDesc("release_date");
    songsService.list(qw).forEach(System.out::println);
}

9.2 运行截图
在这里插入图片描述

D 分页查询

a 在PlusConfig中加入如下代码
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    //设置分页插件,别的拦截器也是addInnerInterceptor加入进去
    PaginationInnerInterceptor pi = new PaginationInnerInterceptor();
    pi.setDbType(DbType.MYSQL);//设置数据库类型为MySQL
    pi.setOverflow(true);//溢出分页处理,默认是false不处理,需要设置成true,保证分页合理化
    interceptor.addInnerInterceptor(pi);
    return interceptor;
}
b 完整的PlusConfig类内容
package com.zlz.config;

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

@Configuration
@MapperScan("com.zlz.mapper")//mapper接口扫描,@MapperScan也可以放在启动类PlusStart上面(启动类也算配置类)
public class PlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //设置分页插件,别的拦截器也是addInnerInterceptor加入进去
        PaginationInnerInterceptor pi = new PaginationInnerInterceptor();
        pi.setDbType(DbType.MYSQL);//设置数据库类型为MySQL
        pi.setOverflow(true);//溢出分页处理,默认是false不处理,需要设置成true,保证分页合理化
        interceptor.addInnerInterceptor(pi);
        return interceptor;
    }
}
c 条件构造器实现分页
c.1 测试代码
@Test
public void findByPage(){
    //创建分页对象
    IPage<Songs> page = new Page<>(1, 5);
    //条件构造器
    QueryWrapper<Songs> qw = new QueryWrapper<>();
    qw.like("name", "天");
    //如果有条件的话,就把条件构造器对象丢到它的第二个形参就是的
    songsService.page(page,qw);
    //输出
    List<Songs> records = page.getRecords();
    for (Songs record : records) {
        System.out.println(record);
    }
    //页码相关
    System.out.println("当前页码:"+page.getCurrent());
    System.out.println("总条数:"+page.getTotal());
    System.out.println("总页数:"+page.getPages());
}
c.1 运行截图

在这里插入图片描述

d 自定义sql实现分页
d.1 在SongsMapper接口里面写上自定义方法
 List<Songs> find(IPage<Songs> page, String album);
d.2 在SongsMapper.xml里面写自定义sql语句
 <select id="find" resultType="songs">
        SELECT * FROM songs WHERE album like #{album}
 </select>

d.3 测试代码

//自定义分页,要注入自己的mapper
@Autowired
SongsMapper songsMapper;
@Test
public void findByCustomPage(){
    //创建分页对象
    IPage<Songs> page = new Page<>(1, 5);
    String search="年";
    List<Songs> songs = songsMapper.find(page, "%" + search + "%");
    System.out.println(songs);
    //页码相关
    System.out.println("当前页码:"+page.getCurrent());
    System.out.println("总条数:"+page.getTotal());
    System.out.println("总页数:"+page.getPages());
}

d.4 运行截图
在这里插入图片描述

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

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

相关文章

《设计模式》代理模式

《设计模式》设计模式的基本原则 《设计模式》单例模式 《设计模式》工厂模式 《设计模式》原型模式 《设计模式》建造者模式 《设计模式》适配器模式 《设计模式》桥接模式 《设计模式》装饰者模式 《设计模式》组合模式 《设计模式》外观模式 《设计模式》享元模式 《设计模式…

HTML5和CSS3 WEB技术开发

HTML5和CSS3 WEB技术开发 B站视频参考&#xff1a;https://www.bilibili.com/video/BV1H44y1k7ze/ 课程目标&#xff1a; 使用HTML5进行网站布局使用CSS3进行网站美化开发精美的商业网站 第一章 HTML5基础 概念&#xff1a; ​ 网页 &#xff1a;互联网的基础&#xff0c;网…

requests请求库(爬取)

文章目录requests模块链接拼接&#xff08;params参数&#xff09;UA伪装&#xff08;headers参数&#xff09;POST请求页面局部信息爬取&#xff08;GET&#xff09;爬取国家药品监督管理监督总局中基于中华人民共和国化妆品生产许可证相关数据爬取图片爬虫分类通用爬虫&#…

分布式存储从FastDFS切换到Minio

什么是Minio 基于官网的介绍如下&#xff1a;MinIO 是一款高性能、分布式的对象存储系统. 它是一款软件产品, 可以100%的运行在标准硬件。即X86等低成本机器也能够很好的运行MinIO。 从官网的介绍可以看出Minio是一款和FastDFS类似的工具&#xff0c;分布式存储系统。目前在使…

运行MAT项目环境配置中出现的问题及参考方案

MAT项目是用于修复图片中缺失的部分&#xff1a;及为图像中缺失的区域产生视觉吸引力和语义适当的内容。 项目链接&#xff1a;GitHub - fenglinglwb/MAT: MAT: Mask-Aware Transformer for Large Hole Image InpaintingMAT: Mask-Aware Transformer for Large Hole Image Inp…

国内有没有可以全职远程办公的程序员工作?

明作为一个曾经靠兼职开发远程办公来赚钱的程序员&#xff0c;既碰到过无良甲方&#xff0c;开发完了不结尾款&#xff0c;最后通过法律手段才解决问题&#xff1b;也接过自称甲方的中介单&#xff0c;耗费心力拿到尾款&#xff0c;最后发现人家拿的钱比自己还多......这一路兼…

方格取数--数字三角形dp问题

项目场景&#xff1a; 线性dp 数字三角形类问题 问题描述 设有 NN 的方格图&#xff0c;我们在其中的某些方格中填入正整数&#xff0c;而其它的方格中则放入数字0。如下图所示&#xff1a; 某人从图中的左上角 A 出发&#xff0c;可以向下行走&#xff0c;也可以向右行走&am…

WebGL及Threejs学习介绍

一、学习背景及实现的效果 这十年来Web得到了飞速的发展&#xff0c;随着WebGL的普及&#xff0c;网页的表现能力越来越强大&#xff0c;网页上已经可以开始做出很多复杂的动画、精美的效果&#xff1b;还能通过WebGL在网页中绘制高性能的3d图形。随着浏览器的性能和网络、带宽…

github实用搜索技巧

github搜索指令教程一. in:根据某个关键词来进行检索1.关键词:name: 项目名称description : 项目描述readme : 项目帮助文档语法 &#xff1a;language:xx(检索什么语言的内容)组合检索二.根据stars||forks||pushed关键字查找1.数量范围: xxx关键词 stars:>或者:<2.区间范…

Pytorch 数据操作

神经网络所处理的数据类型都为tensor类型数据&#xff0c;我们首先需要导入库torch import torch 使用 arange 创建一个行向量 x。这个行向量包含以0开始的前12个整数&#xff0c;它们默认创建为整数。除非额外指定&#xff0c;新的张量将存储在内存中&#xff0c;并采用基于…

进程替换心得

进程替换 1️⃣ 什么是进程替换 1.我们想让子进程不执行父进程部分代码&#xff0c;执行新的程序时我们需要进行进程替换。 ** 程序替换的原理 ** &#xff1a; 将磁盘中的程序&#xff0c;加载入内存结构。重新建立页表映射&#xff0c;谁执行程序替换就程序建立谁的映射(子…

redis 的 java 客户端

Jedis 客户端 1&#xff09;引入依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&…

【Vim】Vim 常用编辑操作

目录 正则表达式 vim 命令 vim的工作模式 撤销修改、重做与保存 光标移动命令 文本插入操作 文本删除操作 文本复制、剪切与粘贴 文本的修改与替换 多窗口操作 正则表达式 简单地说&#xff0c;正则表达式是一种符号表示法&#xff0c;用于识别文本模式。在某种程度上…

Python--栈与队列的相互实现

我们都知道这两个数据结构很相似,但是又有差别, 就好像是对立统一的一样. 栈是一种后进先出的数据结构&#xff0c;元素从顶端入栈&#xff0c;然后从顶端出栈。 队列是一种先进先出的数据结构&#xff0c;元素从后端入队&#xff0c;然后从前端出队。 首先我们都知道用Python的…

leetcode--动态规划问题

动态规划1.基本动态规划 一维&#xff08;1&#xff09;爬楼梯(70)&#xff08;2&#xff09;打家劫舍(198)&#xff08;3&#xff09;等差数列划分(413)2.基本动态规划 二维&#xff08;1&#xff09;最小路径和(64)&#xff08;2&#xff09;01 矩阵(542)&#xff08;3&#…

02SpringCloudAlibaba服务注册中心—Eureka

推荐与对比观看&#xff1a;003SpringCloud---Eureka_gh_xiaohe的博客-CSDN博客 服务提供者 1、 2、pom.xml 3、改yum 4、主启动 5、业务类 测试1&#xff1a; 访问&#xff1a; 服务消费者 1、 2、pom.xml 3、改yum 4、主启动 5、业务类 config controller 测…

【代码封装 center和bounds介绍 Objective-C语言】

一、继续上篇文章的例子 1.刚才我们说了,这个“上下左右”无非就是移动一下frame而已 但是,我们发现,“上下左右”四个功能,我们写了4个方法, 这样做的话,有点儿太繁琐了 所以呢,接下来我们想个办法,能不能把这四个方法,封装一下 封装成1个呢,不要这么多 我们先…

使用Alfred + Gitee搭建免费图床

环境 系统: Mac 工具: Alfred, git, homebrew, pngpaste. 语言: perl 其他: Gitee 工具下载 https://gitee.com/serpmelon/inazuma 思路 使用Gitee仓库作为图床, 使用Alfred工作流简化上传图片流程, 并将上传图片地址转换为markdown格式输出到剪切板中. 使用 复制一张图…

植物大战僵尸:无冷却分析方法

植物大战僵尸这款游戏可以说是很多90后的回忆了&#xff0c;基本上只要是90后或多或少的都接触过&#xff0c;而玩游戏与制作辅助是两个概念&#xff0c;今天我将给大家分享一些游戏辅助方面的制作技巧&#xff0c;来供大家参考。 植物无冷却的实现 根据上节课查找太阳花生产…

基于springboot+Vue的社团管理系统(程序+文档+数据库)

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…