SpringBoot-基础篇03

之前搭建了整个开发环境实现了登录注册,springBoot整合mybatis完成增删改查,今天完成分页查询,使用阿里云oss存储照片等资源,后期会尝试自己搭建分布式文件系统来实现。

一,SpringBoot+Mybatis完成分页查询

        1,导入分页插件坐标,我们需要使用分页插件帮助我们实现分页查询:

<!--引入pageHelper依赖-->
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.6</version>
</dependency>

        2,实现controller层代码如下:

//文章列表(分页查询)
@GetMapping
public Result<PageBean<Article>> getArticleByPage(Integer pageNum,Integer pageSize,@RequestParam(required = false) Integer categoryId,@RequestParam(required = false) String state
){PageBean<Article> pageResult=articleService.getArticleByPage(pageNum, pageSize,categoryId,state);return Result.success(pageResult);
}

        在这里前端传递四个参数,前两个参数pageNum和pageSize是前端传递的分页的页数和每页的记录数,后两个参数是分页查询需要的条件,需要注意的是,分页查询的条件可能不是必须的,于是我们加入RequestParam注解,将参数required改为false,标注传递的该参数不是必须的,之后就调用service层进行具体的代码实现:

3,service层实现:

//实现文章分页查询
public PageBean<Article> getArticleByPage(Integer pageNum, Integer pageSize,Integer categoryId, String state) {//用于封装返回的数据PageBean<Article> pbResult=new PageBean<>();//调用pagehelp插件开启分页查询PageHelper.startPage(pageNum,pageSize);//调用mapper层进行查询//查询的时候只能是登录用户查询自己的文章Integer userId=ThreadLocalUtil.getId();List<Article> articleList=articleMapper.list(categoryId,state,userId);//将当前查询的所有文章数据强制转化为分页插件提供的Page类,指定泛型为文章类Page<Article> articlePage= (Page<Article>) articleList;//及那个page中的数据封装金PageBean中返回pbResult.setTotal(articlePage.getTotal());pbResult.setItems(articlePage.getResult());return pbResult;
}

        在上述代码中,实现分页查询之前我们需要先调用pageHelp插件开启分页查询,也就是是 PageHelper.startPage(pageNum,pageSize);传递进去查询的页数和每页记录数,之后调用mapper进行查询,查询完之后返回结果,这时候插件的作用就体现出来了,我们直接将查询出来的结果封装在pageHelper插件提供的page对象中,(我这里代码直接强转),这时候,插件就会自动将我们查询的结果处理好,最后直接封装返回即可

4,mapper层实现:

由于参数的不确定,我们这里不使用注解开发,使用xml文件编写动态sql来实现

ArticleMapper实现:

//进行文章的分页查询
List<Article> list(Integer categoryId, String state, Integer userId);

ArticleMapper.xml实现:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.qmlx.mapper.ArticleMapper"><!--命名空间加载映射接口--><!--User selectById();--><select id="list" resultType="com.qmlx.pojo.Article">select * from article<where><if test="categoryId!=null">category_id=#{categoryId}</if><if test="state!=null">and state=#{state}</if>and create_user=#{userId}</where>and create_user=#{userId}</select></mapper>

在上述代码中,ArticleMapper.xml文件的位置要和ArticleMapper在同一个目录之下,一般放在resources目录下,结构如下:

注意在resources目录下创建的是目录,所以不能使用 . 的方式,例如我这个目录创建的使用应该是com/qmlx/mapper/ArticleMapper.xml,不能是com.qmlx.mapper.ArticleMapper.xml.并且在xml文件中需要指定id以及resultType,也就是mapper中对应的方法以及返回的类型:

<select id="list" resultType="com.qmlx.pojo.Article">

之后,书写sql,查询完毕返回即可!!

二,SpringBoot+阿里云oss存储图片:

        在项目实现中会经常遇到图片,音视频文档等大文件,需要耗费大量的存储资源,那图片举例,例如我们在项目中需要存储用户头像,这种资源比较耗费存储空间,于是在存取到数据库的时候我们一般存图片的url,图片本身存储在有公网地址的服务器上,也就是互联网上的大型计算机(不知道这个说法对不对,大概这个意思吧,我的理解),到时候我们只需访问图片对应的这个地址,就可以获取到这张图片 ,而这种互联网上的计算机就叫云,他对外提供了很多服务,例如云计算,云数据库等等,我们本次使用的是阿里云提供的云存储服务(oss)。

实现方法:

1,注册阿里云账号开通对象存储服务(oss),这个不过多解释,百度即可。

2,在oss管理控制台页面新建bucket也就是一个存储空间

新建Bucket,命名为 hmleadnews ,读写权限为 公共读,注意bucket名称如果重复,换一个即可

3,获取AccessKey

点击你的头像,点击方框获取之后一定记得复制保存,复制保存,后面要用

4,编写代码

这里的代码我已经封装在一个工具类里面,你只需要做两步

第一步,导入坐标 

<!--阿里云依赖-->
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version>
</dependency>
<dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version>
</dependency>
<dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.3.3</version>
</dependency>

注意,我这里是java9版本以上使用的坐标其余版本卡参考阿里云官方手册:

安装OSS Java SDK_对象存储(OSS)-阿里云帮助中心 (aliyun.com)

第二步,copy我的工具类:

public class AliOssUtil {private static final String ENDPOINT = "";private static final String ACCESS_KEY_ID = "";private static final String SECRET_ACCESS_KEY = "";private static final String BUCKET_NAME = "";//上传文件,返回文件的公网访问地址public static String uploadFile(String objectName, InputStream inputStream){// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(ENDPOINT,ACCESS_KEY_ID,SECRET_ACCESS_KEY);//公文访问地址String url = "";try {// 创建存储空间。ossClient.createBucket(BUCKET_NAME);ossClient.putObject(BUCKET_NAME, objectName, inputStream);url = "https://"+BUCKET_NAME+"."+ENDPOINT.substring(ENDPOINT.lastIndexOf("/")+1)+"/"+objectName;} catch (OSSException oe) {System.out.println("Caught an OSSException, which means your request made it to OSS, "+ "but was rejected with an error response for some reason.");System.out.println("Error Message:" + oe.getErrorMessage());System.out.println("Error Code:" + oe.getErrorCode());System.out.println("Request ID:" + oe.getRequestId());System.out.println("Host ID:" + oe.getHostId());} catch (ClientException ce) {System.out.println("Caught an ClientException, which means the client encountered "+ "a serious internal problem while trying to communicate with OSS, "+ "such as not being able to access the network.");System.out.println("Error Message:" + ce.getMessage());} finally {if (ossClient != null) {ossClient.shutdown();}}return url;}
}

注意,前面四个静态常量对应的值要修改为你自己的,该方法传递两个参数 objectName,和 inputStream分别是存储文件的名称以及该文件前端传递的输入流,具体传递形式详见controlller层代码。

第三步,编写controller

@RestController
public class FileUploadController {@PostMapping("/upload")public Result upload(MultipartFile file) throws IOException {//获取文件原始名String originalFilename = file.getOriginalFilename();//保证文件名不重复String filename= UUID.randomUUID().toString()+originalFilename.substring(originalFilename.lastIndexOf("."));//调用工具类将文件存储在阿里云上String url = AliOssUtil.uploadFile(filename, file.getInputStream());//将文件存储在本地磁盘上//file.transferTo(new File("D:\\桌面\\upload\\"+filename));return Result.success(url);}
}

注意,前端采用post方式类型为file,编码为multipart/form-data,后端接受类型为MultipartFile  ,其余代码不用修改即可!其余功能可参考阿里云官方手册!!

马上过年了,贪玩了,更新有点小慢,不过还是要坚持下去!!!

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

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

相关文章

天线阵列车载应用——第1章 介绍 1.1节 汽车工业中的天线阵列:应用和频率范围

1.1 汽车工业中的天线阵列:应用和频率范围 无线通信系统的发展需要新的技术来支持更高质量的通信、新的服务和应用。近年来&#xff0c;汽车无线通信市场得到了极大的扩展。现代汽车使用不同的服务:AM/FM收音机、卫星广播(SDARS)、移动电话通信、数字音频广播(DAB)、远程无钥匙…

零基础学编程从入门到精通,系统化的编程视频教程上线,中文编程开发语言工具构件之缩放控制面板构件用法

一、前言 零基础学编程从入门到精通&#xff0c;系统化的编程视频教程上线&#xff0c;中文编程开发语言工具构件之缩放控制面板构件用法 编程入门视频教程链接 https://edu.csdn.net/course/detail/39036 编程工具及实例源码文件下载可以点击最下方官网卡片——软件下载—…

监控室脱岗检测系统-人员脱岗监测报警方案---豌豆云

人员脱岗检测算法自动识别比如保安值班室,监控室中的人员离岗行为,并自动告警给管理人员,约束了工作人员擅自离岗行为。 人员脱岗检测,对违规动作/危险行为/行为规范做精确识别,打造人员脱岗检测,将视频图像智能识别系统应用在企业日常运营管理中,降低生产成本。 应用场景&am…

mysql事务锁

Lock - 事务锁 与 latch 的区别 lock对象是事务&#xff0c;用来锁定的是数据库中的对象&#xff0c;如表、行、页。并且一般lock的对象仅在事务commit或rollback后进行释放&#xff08;不同事务隔离级别释放的时间可能不同&#xff09;。此外&#xff0c;lock&#xff0c;正…

3.0 Zookeeper linux 服务端集群搭建步骤

本章节将示范三台 zookeeper 服务端集群搭建步骤。 所需准备工作&#xff0c;创建三台虚拟机环境并安装好 java 开发工具包 JDK&#xff0c;可以使用 VM 或者 vagrantvirtualbox 搭建 centos/ubuntu 环境&#xff0c;本案例基于宿主机 windows10 系统同时使用 vagrantvirtualb…

发送get请求并且发送请求头(header),java实现

发送get请求时&#xff0c;发送请求头&#xff08;Header&#xff09;中的内容 方便第二次调用其他url时传递参数&#xff0c;例如userCode或者租户编码 调用方式 Autowired private HttpServletRequest request;先注入HttpServletRequestpublic xxx xxx(){String url &quo…

docker程序镜像的制作

目录 一、每种资源的预安装&#xff08;基础&#xff09; 安装 nginx安装 redis 二、dockerfile文件制作&#xff08;基础&#xff09; 打包 redis 镜像 创建镜像制作空间制作dockerfile 打包 nginx 镜像 三、创建组合镜像&#xff08;方式一&#xff09; 生成centos容器并…

vue3+echarts:Vue中使用echarts从后端获取数据并赋值显示

//由于前后端交互,所以使用axios发送请求 const Count ref(null); //设备种类数值 const Name ref(null); //设备种类名称 //设备种类 饼图 const pieChart () > {const getpieChart echarts.init(document.getElementById("deviceKind"));// 创建图标getpieC…

位置内插 PI:基于Positional Interpolation扩大模型的上下文窗口

位置内插 PI&#xff1a;基于Positional Interpolation扩大模型的上下文窗口 如何在不牺牲性能或从头训练的情况下&#xff0c;扩展大型语言模型的上下文窗口以处理长文档或长对话&#xff1f; 论文&#xff1a;https://arxiv.org/pdf/2306.15595.pdf 这篇论文介绍了一种名为位…

详解Python3的垃圾回收机制

Python的垃圾回收机制主要包括两个部分&#xff1a;引用计数和循环引用检测。 引用计数法 内部采用 引用计数法&#xff0c;为每个对象维护引用次数&#xff0c;并据此回收不在需要的垃圾对象。 由于引用计数法存在重大缺陷&#xff0c;循环引用时由内存泄露风险&#xff0c…

自动驾驶TPM技术杂谈 ———— Unix常用命令行

文章目录 介绍常用命令 —— A常用命令 —— C常用命令 —— D常用命令 —— E常用命令 —— F常用命令 —— G常用命令 —— H常用命令 —— I常用命令 —— J常用命令 —— K常用命令 —— L常用命令 —— M常用命令 —— N常用命令 —— P常用命令 —— Q常用命令 —— R常用…

Vue3——创建一个应用

文章目录 创建应用实例挂载应用没有模板的组件的挂载 应用配置多个应用实例 其实使用脚手架创建的vue项目的main.js文件中已经为我们配置好 vue应用的创建。 import { createApp } from vue import App from ./App.vue const app createApp(App) app.mount(#app)创建应用实例…

C++ JSON解析

JSON解析 JSONCPPC实现JSON解析器 JSONCPP JSONCPP源码链接&#xff1a;https://github.com/open-source-parsers/jsoncpp JSOCPP源码下载以后&#xff0c;首先复制一份include文件夹下的json文件夹&#xff0c;头文件留着后续备用。 使用Cmake生成项目。在IDE中编译jsoncpp_…

【Nicn的刷题日常】之打印整数二进制的奇数位和偶数位

目录 1.题目描述 2.解题思路 3.解题 1.题目描述 获取一个整数二进制序列中所有的偶数位和奇数位&#xff0c;分别打印出二进制序列 2.解题思路 1. 提取所有的奇数位&#xff0c;如果该位是1&#xff0c;输出1&#xff0c;是0则输出0 2. 以同样的方式提取偶数位置检测n…

CGAL-3D 凸包算法

3D 凸包算法 一、概述二、静态凸包构造1. Traits 特征类2. 极端点3. 半空间相交4. 凸性检验 三、动态凸包构造四、性能 一、概述 一个点集 S∈R3 是凸的&#xff0c;如果对于任意两点 p 和 q 在集合中&#xff0c;具有端点的线段 p 和 q 包含在 S。集合的凸包 P 包含点集 S 的最…

GADM 4.1 全球国家行政区划下载

扫描文末二维码&#xff0c;关注微信公众号&#xff1a;ThsPool 后台回复g004&#xff0c;领取最新 GADM 4.1 全球国家行政区划 GADM概述 GADM&#xff0c;全称 Database of Global Administrative Areas&#xff0c;是一个开放获取的全球行政区划数据库&#xff0c;包含各国、…

APIfox编排自动化测试场景(一)

测试场景用于将多个接口请求与实际可能发生的一些特殊情况&#xff08;如条件判断、循环&#xff09;有序的组合在一起&#xff0c;来模拟一个真实业务流程&#xff0c;组成自动化测试单元。 新建目录 / 测试场景​ 打开 Apifox 后点击左侧菜单栏中的“自动化测试”&#xff…

基于Vue的移动端UI框架整理

一、Vant 官方地址&#xff1a;https://youzan.github.io/vant/#/zh-CN/ 简介&#xff1a;有赞公司开发。 特性&#xff1a;60 高质量组件、90% 单元测试覆盖率、完善的中英文文档和示例、支持按需引入、支持主题定制、支持国际化、支持 TS、支持 SSR。 特别说明&#xff1…

机器学习---概率图模型(隐马尔可夫模型、马尔可夫随机场、条件随机场)

1. 隐马尔可夫模型 机器学习最重要的任务是根据已观察到的证据&#xff08;例如训练样本&#xff09;对感兴趣的未知变量&#xff08;例如类别标 记&#xff09;进行估计和推测。概率模型&#xff08;probabilistic model&#xff09;提供了一种描述框架&#xff0c;将描述任…

MySQL单主模式部署组复制集群

前言 本篇文章介绍MySQL8.0.27版本的组复制详细搭建过程&#xff0c;教你如何快速搭建一个三节点的单主模式组复制集群。 实际上&#xff0c;MySQL组复制是MySQL的一个插件 group_replication.so&#xff0c;组中的每个成员都需要配置并安装该插件&#xff0c;配置和安装过程…