SpringBoot快速入门笔记(3)

文章目录

  • 一、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查看具体参数:

这里是引用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++之类

目录 一&#xff1a;面向过程和面向对象的初步认识 二&#xff1a;类的引入 三&#xff1a;类的定义 3.1类的两种定义方式&#xff1a; 3.2成员变量命名的建议 四&#xff1a;类的访问限定符及封装 4.1类的访问限定符 4.2封装 一&#xff1a;面向过程和面向对象的初步认…

【学习笔记】java项目—苍穹外卖day09

文章目录 用户端历史订单模块1. 查询历史订单1.1 需求分析和设计1.2 代码实现1.2.1 user/OrderController1.2.2 OrderService1.2.3 OrderServiceImpl1.2.4 OrderMapper1.2.5 OrderMapper.xml1.2.6 OrderDetailMapper 1.3 功能测试 2. 查询订单详情2.1 需求分析和设计2.2 代码实…

【计算机考研】408到底有多难?值得冲吗?

考408就必须要面对的现实&#xff01;拒绝眼高手低&#xff01;&#xff01; 408其实想达到110并不难&#xff0c;但是想上130是比较困难的。 几个必须要面对的现实&#xff1a; 1.如果备考的是11408&#xff0c;除非基础特别好或者学习能力特别强&#xff0c;否则一定要尽早…

[Python] 如何导出PDF文件中的图片

文章目录 一、背景说明二、代码编写三、问题3.1、如何得到图片的xref&#xff1f;3.2、xref有什么用呢&#xff1f; 四、总结 一、背景说明 最近在看一份pdf的书籍&#xff0c;其中有一些图片绘制地比较出色&#xff0c;所以就打算将其复制出来&#xff0c;以便于在需要的时候…

TCP客户端及服务器端开发实践

一、TCP客户端及服务器端开发实践 1、TCP网络应用程序开发分类 ① TCP客户端应用程序开发 ② TCP服务器端应用程序开发 客户端程序是指运行在用户设备上的程序&#xff0c;服务端程序是指运行在服务器设备上的程序&#xff0c;专门为客户端提供数据服务。那如何记忆呢&…

深入浅出 -- 系统架构之单体架构

单体架构&#xff08;Monolithic Architecture&#xff09; 单体架构的定义 单体架构&#xff08;Monolithic Architecture&#xff09;是一种传统的软件架构模式&#xff0c;将整个应用程序作为一个单一的、统一的单元进行开发、部署和扩展。在单体架构中&#xff0c;所有的功…

【数字图像处理matlab系列】空间域处理之亮度变换(imadjust函数使用)

【数字图像处理matlab系列】空间域处理之亮度变换(imadjust函数使用) 在空间域中&#xff0c;图像处理就是直接对图像的像素进行操作 imadjust 是 MATLAB 中用于调整图像强度值或颜色图的函数。它可以改变图像的对比度&#xff0c;使得图像更清晰或更易于分析。以下是 imadju…

计算机网络针对交换机的配置

实验 目的 交换机的基本配置&#xff0c;交换机VLAN配置 实验条件 Windows&#xff0c;Cisco packet tracer 实验 内容 交换机的基本配置&#xff0c;交换机VLAN配置 实验 过程 一、交换机的基本配置 进入特权模式 Switch>enable 进入配置模式 Switch#configure ter…

第15届蓝桥杯省赛模拟第二期题解及代码实现

试题A:求余数 问题描述 求12345678901234567890123456789012345678901234567890除以2023的余数。 答案提交 这是一道结果填空的题&#xff0c;你只需要算出结果后提交即可。本题的结果为一个整数&#xff0c;在提交答案时只填写这个整数&#xff0c;填写多余…

kubectl explain资源文档命令

学习并使用了一段时间的kubernetes&#xff0c;发现对k8s还是了解甚少&#xff0c;于是利用上下班通勤的时间又去B站看一些大佬的视频&#xff0c;又来重学巩固一遍知识&#xff0c;并做些记录。 之前在学习使用过程中未成了解过explain这个命令&#xff0c;因为自己部署的版本…

三、keepalived双机热备

一、双机热备概述 1、为什么需要双机热备&#xff1a; 双机热备主要为了解决服务器的单点故障问题。 在主机 MASTER 宕机之后可以马上切换到备选服务器 BACKUP。 服务器规划&#xff1a; 2、克隆产生web01服务器&#xff1a; (1) 基于LNMP克隆生成Web01服务器&#xff1a; (…

【TB作品】MSP430单片机读取大气压强传感器BMP180

文章目录 实物main所有代码 实物 main #include <msp430.h> #include "stdio.h" #include "OLED.h"#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h>// P2.2 oled scl // P2.3 oled sda// p…

第六期丨酷雷曼无人机技能培训

第6期无人机技能提升培训 盼望着盼望着&#xff0c;第六期无人机技能提升培训会终于如期和大家见面了。 2024年1月1日&#xff0c;国务院、中央军事委员会颁布《无人驾驶航空器飞行管理暂行条例》&#xff0c;对民用无人机飞行活动实施更为严格的规范约束&#xff0c;越来越多…

第十四篇:web后端开发-Springboot

文章目录 一、Web入门1. 什么是Spring2. SpringBootWeb入门3. HTTP 协议3.1 HTTP-概述3.2 HTTP-请求协议3.3 HTTP-响应协议 4. Web服务器4.1 Tomcat---简介4.2 基本使用 5. 请求/响应5.1 请求5.1.1 postman5.1.2 简单参数5.1.3 实体参数5.1.4 数组集合参数5.1.5 日期参数5.1.6 …

echart 仪表盘实现指针的渐变色及添加图片

需求&#xff1a; 在仪表盘中设置指针为渐变色&#xff0c;并在仪表盘中间添加图片。 实现重点&#xff1a; 1、仪表盘指针渐变色的实现 渐变色通过设置pointer的itemStyle属性内的color实现&#xff0c;重点是echart版本&#xff0c;这个原本使用4.8.0的版本不起作用&#xff…

33---PS2-键盘鼠标电路设计

视频链接 PS2-键盘鼠标电路设计01_哔哩哔哩_bilibili PS2-键盘鼠标电路设计 1、PS/2简介 PS/2原是“personal 2”的意思&#xff0c;即“个人系统2”&#xff0c;是IBM公司在上个世纪80年代推出的一种个人电脑。 PS/2协议和接口最初由IBM公司开发并广泛使用的应用于键盘/鼠…

速通数据结构与算法第四站 双链表

系列文章目录 速通数据结构与算法系列 1 速通数据结构与算法第一站 复杂度 http://t.csdnimg.cn/sxEGF 2 速通数据结构与算法第二站 顺序表 http://t.csdnimg.cn/WVyDb 3 速通数据结构与算法第三站 单链表 http://t.csdnimg.cn/cDpcC 感谢佬们…

有人用GPT来做日内交易,居然赚钱了!但是……

在我们还在烦恼会不会被AI替代时&#xff0c;已经有人在教ChatGPT去炒股票了。 在近年ChatGPT火速出圈后&#xff0c;围绕AI能取代什么职业的讨论持续受到大众关注。 从事客服、编程、法律合规以及内容创作等行业人员最早感受到这股AI带来的寒意。 那ChatGPT能不能替代交易员…

Lora 串口透传开发 5

1 简介 串口转usb、转wifi等很多应用 2 设计原理 2.1 设计需求 1将LoRa终端定义成两种角色:Master和Slave 2一个模块发送任意字节长度&#xff08;小于128Byte&#xff09;数据&#xff0c;另一模块都可以接收到 3PC机上通过串口调试助手实现接收和发送 4终端在LCD屏幕上显…

【Redis】分布式锁及其他常见问题

分布式锁及其他常见问题 1. 我看你的项目都用到了 Redis&#xff0c;你在最近的项目的哪些场景下用到了 Redis 呢&#xff1f; 一定要结合业务场景来回答问题&#xff01;要是没有不要硬讲&#xff0c;除非面试官问&#xff1b; 接下来面试官将深入发问。 你没用到的也可能会…