SpringBoot快速入门笔记(3)

news2024/11/21 1:44:01

文章目录

  • 一、MybatisPlus
    • 1、ORM
    • 2、添加依赖
    • 3、全局配置
    • 4、Navicat
    • 5、UserController
    • 6、CRUD操作
    • 7、BaseMapper
    • 8、两个注解
  • 二、多表查询
    • 1、模拟用户订单
    • 2、通过用户查相关订单
    • 3、UserMapperNew
    • 4、查询订单和所属用户
    • 5、OrderMapper
    • 6、OrderController
  • 三、条件查询
  • 四、分页查询

一、MybatisPlus

1、ORM

(Object Relational Mapping)对象关系映射,为了解决面向对象与关系数据库存在的互不匹配的一种技术

ORM框架本质是简化编程中操作数据库的编码

2、添加依赖

<!--        MyBatisPlus依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2</version>
        </dependency>
<!--        mysql驱动依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.32</version>
        </dependency>
<!--        数据连接池druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.23</version>
        </dependency>

3、全局配置

在application.properties中添加配置

server.port=80
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3307/demo2?useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

😮由于我PC有两个数据库版本的存在,所以这里使用3307端口不产生冲突,数据库的名称为demo2,账号密码默认

在启动项,也就是项目名Application中添加@MapperScan注解,这里是新建的mapper包,如果不好找路径,那么鼠标右键点击包,选择Copy Path/Reference...复制路径
在这里插入图片描述

4、Navicat

在navicat里面把表建好,然后选择id主键自增
在这里插入图片描述

5、UserController

这里模拟查询用户

之前的实体类User继续使用

这里是引用

编写UserMapper接口:

这里是引用

编写UserController,并且声明UserMapper对象,写上@AutoWired注解表示注入,这样我们可以直接使用UserMapper中的方法🤓

在这里插入图片描述

🌐浏览器测试一下:

这里是引用

😈如果查询不到报错:检查数据库是否正常连接
也可以在控制台日志看到结果:

这里是引用

6、CRUD操作

同理,有查就少不了指定id查、增删改

查询指定用户:

UserController:这里是引用
UserMapper:
在这里插入图片描述

增删改UserController:

这里是引用
在这里插入图片描述
在这里插入图片描述

增删改UserMapper:

这里是引用

🌍打开ApiPost测试一下:

这里是引用
在这里插入图片描述

这里id是8虽然是自增,因为我之前测试过几条,我们可以再加一条:

这里是引用
在这里插入图片描述

可以看到表更新了😀

😈如果表中的username是???说明是编码的问题,在navicat中设置utf-8字符集还没用的话,继续在application.properties中的url后多加点规则

spring.datasource.url=jdbc:mysql://localhost:3307/demo2?useSSL=false&useUnicode=true&characterEncoding=utf-8

😈如果出现Data truncated for column id at row 1问题,①检查实体类参数类型是否和数据库表中匹配
②将数据库表的int范围调高
③看看是不是id默认在表里面排最后了,把id上移到第一条和mapper中语句参数对应😲

7、BaseMapper

白学时刻,以上都是我们在mybatis中用到的,而mybatisPlus提供了BaseMapper接口

新建UserMapperNew接口:

这里是引用

修改UserController类,可以发现userMapperNew里面就自带了很多方法,可以ctrl+左键点进去详情查看:

这里是引用

List<User> list = userMapperNew.selectList(null);

重新测试一下 🤓

这里是引用

剩下方法类似👍

8、两个注解

@TableName注解说明了对应哪一张表,应对实体类和表不一致
@TableId主键自增,在控制台打印日志时看到对应的id(之前会显示0)

在这里插入图片描述

二、多表查询

实现复杂关系映射,可以使用@Results、@Result、@One、@Many注解组合完成复杂关系的配置

1、模拟用户订单

navicat 新建订单order表(uid表示所属哪个用户订单):
在这里插入图片描述

2、通过用户查相关订单

在User类里添加代码,其实orders这个东西是不在user表里的,所以这样打上注解,并且添加getter和setter方法,只是为了实现多表查询😮

在这里插入图片描述

在UserMapperNew中定义查找用户和订单的接口:

这里是引用

在UsrController中调用:

这里是引用

🌍浏览器访问,发现orders为空(因为本来user表中就没有orders)

这里是引用

3、UserMapperNew

利用@Results、@Result和@Many注解

 //查询用户及其所有的订单
    @Select("select * from user")
    @Results(
            {
                    @Result(column = "id",property = "id"),
                    @Result(column = "username",property = "username"),
                    @Result(column = "password",property = "password"),
                    @Result(column = "birthday",property = "birthday"),
                    @Result(column = "id",property = "orders",javaType = List.class,
                        many=@Many(select = "com.example.demo.mapper.OrderMapper.selectByUid"))
            }
    )
    List<User> selectAllUserAndOrders();

这里是将结果集对应起来,然后利用user表中的id,去映射orders,说明orders的参数类型List,many表示一对多的关系;UserMapperNew去使用OrderMapper中的方法😮使得user表的id能够作为order表的uid去执行sql语句

这里是引用

😈刚开始我报错说是语法问题,检查后无误,又将包全部导入一遍,还是爆500错误;发现可能是关键字冲突,将order表的名字改为t_order后成功运行

这里是引用

4、查询订单和所属用户

同理,在Order实体类加上注解,说明user参数并不存在

 @TableField(exist = false)
    private User user;

5、OrderMapper

//    查询所有的订单,同时查询订单所属的用户
    @Select("select * from t_order")
    @Results(
            {
                    @Result(column = "id",property = "id"),
                    @Result(column = "orderTime",property = "orderTime"),
                    @Result(column = "money",property = "money"),
                    @Result(column = "uid",property = "uid"),
                    @Result(column = "uid",property = "user",javaType = User.class,
                            one=@One(select = "com.example.demo.mapper.UserMapperNew.selectById"))
            }
    )
    List<Order> selectAllOrdersAndUser();

这里是一个订单只对应一个用户,所以是@One注解,利用订单的uid对应找出user表中的用户

6、OrderController

新建OrderController控制器,运行

@RestController
public class OrderController {
    @Autowired
    OrderMapper orderMapper;

    @GetMapping("/order/findAll")
    public List<Order> find(){
        return orderMapper.selectAllOrdersAndUser();
    }
}

这里是引用

可以看到三个订单以及所属的用户都被查询出来了 🤓

三、条件查询

前面说过MybatisPlus对单表查询增强了,我们可以不用自己写sql语句,这里采用QueryWrapper

UserController,表示我们只想找到关于火男的信息:

//    条件查询
    @GetMapping("/user/find")
    public List<User> findByCondition(){
        QueryWrapper<User> queryWrapper = new QueryWrapper();
        queryWrapper.eq("username","火男");
        return userMapperNew.selectList(queryWrapper);
    }

这里是引用

四、分页查询

UserController:

//    分页查询
    @GetMapping("/user/findByPage")
    public IPage findByPage(){
//        设置起始值和每页条数
        Page<User> page = new Page<>(0, 2);
        IPage iPage = userMapperNew.selectPage(page,null);
        return iPage;
    }

可以在mybatis-plus官网查看page使用方法:

这里是引用

edge运行结果默认返回JSON格式,如果其他的浏览器可以用F12查看具体参数:

这里是引用

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

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

相关文章

爬虫 新闻网站 并存储到CSV文件 以红网为例 V2.0 (控制台版)升级自定义查询关键词、时间段,详细注释

爬虫&#xff1a;红网网站&#xff0c; 获取指定关键词与指定时间范围内的新闻&#xff0c;并存储到CSV文件 V2.0&#xff08;控制台版&#xff09; 爬取目的&#xff1a;为了获取某一地区更全面的在红网已发布的宣传新闻稿&#xff0c;同时也让自己的工作更便捷 对比V1.0升级的…

瑞吉外卖实战学习--14、菜品上传

添加菜品接口 前言效果图1、菜品分类查询接口2、上传图片和下载图片3、创建接收数据的Dto4、创建提交的方法 前言 本项目gitee位置&#xff1a;gitee网址 本篇文章是学习了添加菜品的总结&#xff0c;其中包括菜品分类的接口&#xff0c;图片上传接口&#xff0c;数据整体上传…

【Spring篇】Spring IoC DI

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Spring系列】 本专栏旨在分享学习Spring MVC的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 前言一、IoC二、…

语义分割——自动驾驶鱼眼数据集

一、重要性及意义 环境感知&#xff1a;语义分割技术能够精确识别道路、车辆、行人、障碍物、交通标志和信号等各种交通场景元素。这为自动驾驶系统提供了丰富的环境信息&#xff0c;有助于车辆准确理解周围环境的结构和动态变化。决策规划&#xff1a;基于语义分割的结果&…

AI Kimi:帮助教师做好试卷命题

原文&#xff1a;https://www.toutiao.com/article/7353661304307778083/?log_fromcfd0a50014034_1712243146922 最近&#xff0c;Kimichat工具很火。这款软件不仅仅是一个聊天和阅读工具&#xff0c;还是一个强大的教学辅助工具。作为一位教师&#xff0c;尝试使用Kimichat&…

【React】useState为何返回数组而非对象

useState的正确语法如下 const [count, setCount] useState(0)通过打印可以看到useState返回一个数组&#xff0c;那么为何不返回对象呢 涉及到数组与对象间解构方式的差异 数组的解构&#xff1a;根据索引 const [a,,b] [1,2,3] console.log(a) // 1 console.log(b) // 3…

蓝桥集训之垒骰子

蓝桥集训之垒骰子 核心思想&#xff1a;矩阵乘法 f[i]存顶面数值 构造a矩阵 使得*f[i] f[i-1]a 则f[i] f[1] * an 快速幂优化 #include <iostream>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;const int N 6,m…

xilinx AXI CAN驱动开发

CAN收发方案有很多&#xff0c;常见的解决方案通过是采用CAN收发芯片&#xff0c;例如最常用的SJA1000,xilinx直接将CAN协议栈用纯逻辑实现&#xff0c;AXI CAN是其中一种&#xff1b; 通过这种方式硬件上只需外接一个PHY芯片即可 上图加了一个电平转换芯片 软件设计方面&…

Unity:2D SpriteShape

1.1 简介 Sprite Shape 可以很灵活的更改sprite的轮廓。比如&#xff1a; 它由两部分组成&#xff1a;Sprite Shape Profile、Sprite Shape Controller&#xff0c;需要导入2D Sprite Shape Package. 1.1.1 Sprite导入要求 Texture Type - ‘Sprite (2D and UI)’.Sprite Mo…

【动手学深度学习】深入浅出深度学习之RMSProp算法的设计与实现

目录 &#x1f31e;一、实验目的 &#x1f31e;二、实验准备 &#x1f31e;三、实验内容 &#x1f33c;1. 认识RMSProp算法 &#x1f33c;2. 在optimizer_compare_naive.py中加入RMSProp &#x1f33c;3. 在optimizer_compare_mnist.py中加入RMSProp &#x1f33c;4. 问…

C#/WPF Inno Setup打包程序

Inno Setup介绍 Inno Setup 是一个免费的 Windows 安装程序制作软件。第一次发表是在 1997 年&#xff0c;现在已经更新到Inno Setup 6了。Inno Setup是一个十分简单实用的打包小工具&#xff0c;可以按照我们自己的意愿设置功能&#xff0c;稳定性也很好。 官方网址&#xff1…

考研人千万不能犯的错误——什么情况下求极限可以直接带入值?

博主最近在复习考研的过程中&#xff0c;做了武忠祥老师的每日一题发现有一个题型错的很集中&#xff0c;就是关于极限数值带入的问题&#xff0c;相信也有不少的宝子容易在这种题型上犯错&#xff0c;今天带大家梳理总结一下常见的计算极限时容易犯的错误 极限的四则运算定义…

harmonyOS安装ohpm

下载 下载地址 HUAWEI DevEco Studio和SDK下载和升级 | 华为开发者联盟 初始化 注意&#xff1a;初始化ohpm前&#xff0c;需先完成node.js环境变量配置 1.解压文件&#xff0c;进入commandline-tools-windows-2.0.0.2\command-line-tools\ohpm\bin 2.执行&#xff1a; init.ba…

第二十三章 Git

一、Git Git 是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同&#xff0c;它采用了分布式版…

设计模式总结-建造者模式

建造者模式 模式动机模式定义模式结构模式分析建造者模式实例与解析实例&#xff1a;KFC套餐 模式动机 无论是在现实世界中还是在软件系统中&#xff0c;都存在一些复杂的对象&#xff0c;它们拥有多个组成部分&#xff0c;如汽车&#xff0c;它包括车轮、方向盘、发送机等各种…

点亮创意:ChatGPT如何搭桥DALL-E图像编辑新纪元

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

力扣爆刷第111天之CodeTop100五连刷41-45

力扣爆刷第111天之CodeTop100五连刷41-45 文章目录 力扣爆刷第111天之CodeTop100五连刷41-45一、232. 用栈实现队列二、4. 寻找两个正序数组的中位数三、31. 下一个排列四、69. x 的平方根五、8. 字符串转换整数 (atoi) 一、232. 用栈实现队列 题目链接&#xff1a;https://le…

Kubernetes(k8s):精通 Pod 操作的关键命令

Kubernetes&#xff08;k8s&#xff09;&#xff1a;精通 Pod 操作的关键命令 1、查看 Pod 列表2、 查看 Pod 的详细信息3、创建 Pod4、删除 Pod5、获取 Pod 日志6、进入 Pod 执行命令7、暂停和启动 Pod8、改变 Pod 副本数量9、查看当前部署中使用的镜像版本10、滚动更新 Pod11…

【Unity灶台】食品加工系统模型搭建

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

黑马鸿蒙笔记

目录 27.网络连接-Http请求数据 28.网络连接-第三方库axios 29.数据持久化-用户首选项 27.网络连接-Http请求数据 Http常见 GET一般与String配合&#xff0c;POST&#xff0c;PUT&#xff0c;DELETE与Object配合 28.网络连接-第三方库axios 29.数据持久化-用户首选项 不行&a…