西南交通大学智能监测 培训课程练习3

news2024/12/27 13:13:20

2023.05.31培训

task1:MybatisPlus的使用

task2:SpringMVC常用接口开发

task3:JSON、接口测试

task4:SpringMVC拦截器与过滤器

 

目录

一、MybatisPlus

1.1DO类

1.2Mapper接口

1.3编写测试类测试

1.4Mybatis和MybatisPlus

二、SpringMVC常用开发

2.1项目结构

2.2 ProductController

2.2.1基础接口测试

2.2.2使用BaseMapper操作数据

2.2.3通过浏览器传入参数操作数据

 2.2.4手写Mybatis语句操作数据

三、Post请求与JSON

3.1使用Post请求

3.2将请求转化为对象并返回

四、SpringMVC拦截器与过滤器

4.1创建拦截器

4.1.1第一个拦截器

4.1.2第二个拦截器


一、MybatisPlus

1.1DO类

在ProductDO类上加上@TableName(“t_ykx_product”)注解,否则启动会报找不到表的错误

 

1.2Mapper接口

用Mapper接口继承BaseMapper

public interface ProductMapper extends BaseMapper<ProductDO>

 

1.3编写测试类测试

单一查询

@Component
public class TestClass {
    @Autowired
    private ProductMapper productMapper;

    @PostConstruct
    private  void init(){
        ProductDO productDO = productMapper.selectById(1);
        System.out.println("查询结果:" + productDO);

    }
}

查询结果:

 

 

批量查询

需要使用LambdaQueryWrapper 实例 lqw

lqw添加查询的条件(eq()  是 添加  = 条件)

若不添加查询条件则查询表中的所有数据

将lqw传入selectList()中

@PostConstruct
    private  void init(){
        LambdaQueryWrapper<ProductDO> lqw = new LambdaQueryWrapper<>();
        lqw.eq(ProductDO::getType, "book"); //添加 = 条件  where type = "book"
        List<ProductDO> productDOS = productMapper.selectList(lqw);
        for (ProductDO productDO : productDOS) {
            System.out.println("product:" + productDO);
        }

    }

查询结果:

 

1.4Mybatis和MybatisPlus

BaseMapper里对数据库操作的方法都是封装好了的,使用起来很方便,但是有时候不能满足实际需求,也就是不灵活,无法灵活添加注解,所以不能一味地使用BaseMapper。

尽量手写Mybatis语句

二、SpringMVC常用开发

2.1项目结构

system下新建product包,在里面建三个平级的包adapter、application、domain

adapter是适配器的意思,在里面新建controller包

application建service包

domain建reader、wirter包

 

 

2.2 ProductController

controller包内新建ProductController类,标注@Controller注解和@ResponseBody注解

@Controller     //标记这个类是Spring的一个组件,用于向外提供接口
@ResponseBody   //强制将所有接口的返回值变为String

2.2.1基础接口测试

编写ProductController类,在浏览器输入http://127.0.0.1:8000/product/getStr

获取结果

 

//@Controller     //标记这个类是Spring的一个组件,用于向外提供接口
//@ResponseBody   //强制将所有接口的返回值变为String(本质上转化为JSON)
@RestController  //这个相当于上面俩
@RequestMapping(value = "/product")
public class ProductController {

    @GetMapping("/getMsg")
    public double getMsg(){
        System.out.println("getMsg正在执行~~~");
        return Math.random();
    }

    @GetMapping("/getStr")
    public String getStr(){
        return "test~";
    }

}

 

2.2.2使用BaseMapper操作数据

getAll返回product表内所有数据,在浏览器显示

@RestController 
@RequestMapping(value = "/product")
public class ProductController {

    @Autowired
    private ProductMapper productMapper;

    @GetMapping("/getAll")
    public List<ProductDO> getAllProductInfo(){
        LambdaQueryWrapper<ProductDO> lqw = new LambdaQueryWrapper<>();
        List<ProductDO> productDOS = productMapper.selectList(lqw);
        return productDOS;
    }


}

 

2.2.3通过浏览器传入参数操作数据

还是在ProductController类进行操作

1)在方法内设置参数,加上@RequestParam注解 能够绑定参数

)在浏览器输入对应路径 并加上参数(用 ?id=1 传递参数)

@GetMapping("/getProductById")
    public List<ProductDO> getProductById(@RequestParam("id") String id){
        //@RequestParam注解 绑定参数
        LambdaQueryWrapper<ProductDO> lqw = new LambdaQueryWrapper<>();
        lqw.eq(ProductDO::getId,id);
        List<ProductDO> productDOS = productMapper.selectList(lqw);
        return productDOS;
    }

 

 

 2.2.4手写Mybatis语句操作数据

1)ProductMapper类里使用Mybatis语句

@Select("select *from t_ykx_product where id = #{id};")
        ProductDO[] selectProduct(@Param("id") String id);

2)ProductController类写相应的方法

@RestController  
@RequestMapping(value = "/product")
public class ProductController {

    @Autowired
    private ProductMapper productMapper;


    @GetMapping("/getProductById")
    public ProductDO[] getProductById(@RequestParam("id") String id){
        ProductDO[] productDOS = productMapper.selectProduct(id);
        return productDOS;
    }


}

 

三、Post请求与JSON

3.1使用Post请求

@PostMapping用法和GetMapping用法相同

使用@RequestBody注解可以在方法形参处获取body

public class ProductController {

    @Autowired
    private ProductMapper productMapper;

    //Post请求的使用
    @PostMapping("/postTest")
    public void postTest(@RequestBody String str){
        System.out.println(str);
    }

}

 使用Postman访问 并将body返回

 

返回结果打印在控制台上

 

3.2将请求转化为对象并返回

使用Post发送ProductDO类的JSON,获取转化为ProductDO的对象的id,并使用Mybatis进行查询,最后返回查询结果

1)post请求的方法稍作修改

//Post请求的使用
    @PostMapping("/returnProduct")
    public ProductDO[] postTest(@RequestBody ProductDO pDO){
        //获取传过来的JSON的ID
        int id = pDO.getId();
        //使用ID进行查询并返回结果
        ProductDO[] productDOS = productMapper.selectProduct(id);
        System.out.println(productDOS);
        return productDOS;
    }

3)传递JSON(自动绑定),并获取结果

 

四、SpringMVC拦截器与过滤器

4.1创建拦截器

4.1.1第一个拦截器

1)该类需要实现HandlerInterceptor接口

2)重写三个方法

public class AccessTokenInterceptor implements HandlerInterceptor {

    //在业务执行之前就执行
    //如果返回false 请求就被打回
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String accessToken = request.getHeader("accessToken");
        if(accessToken == null || "".equals(accessToken)){
            System.out.println("前置没有找到AccessToken,不可以访问哦~");
            return false;
        }else{
            System.out.println("找到AccessToken!");
            return true;
        }
    }

    //在业务执行之后执行
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    //在流程完成之后执行
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

 3)在ProductController类里修改方法

@RestController  //这个相当于上面俩
@RequestMapping(value = "/product")
public class ProductController {

    @Autowired
    private ProductMapper productMapper;

    @GetMapping("/getMsg")
    public void getMsg(){
        System.out.println("getMsg 业务 执行");
    }


}

注:此时使用浏览器进行访问,并没有执行拦截器里的方法

解决上述问题:

在web包下创建一个WebConfig 作为配置类,加上@Configuration注解,实现WebMvcConfigurer接口,重写addInterceptors方法

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //给拦截器注册器添加新的拦截器
        registry.addInterceptor(new AccessTokenInterceptor())
                .addPathPatterns("/**");//添加路径匹配,匹配上了才会拦截
    }
}

再次执行,因为没有accessToken的值,所以被拦截了。

 

在Postman里设置一个accessToken值,成功执行

 

 

4.1.2第二个拦截器

同第一个拦截器一样,需要实现接口,重写方法

public class IPLimitInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String ip = request.getHeader("IP");
        if(ip == null || "".equals(ip) || !"1.1.1.1".equals(ip)){
            System.out.println("前置 IP不对!!!");
            return false;
        }else{
            System.out.println("前置 IP正确~~~");
            return true;
        }
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("IPLimitInterceptor 后置");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("IPLimitInterceptor 最终");
    }
}

同样需要在WebConfig配置里添加拦截器

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //给拦截器注册器添加新的拦截器
        registry.addInterceptor(new AccessTokenInterceptor())
                .addPathPatterns("/**");//添加路径匹配,匹配上了才会拦截

        registry.addInterceptor(new IPLimitInterceptor())
                .addPathPatterns("/**");
    }
}

最后在Postman里添加键就能成功执行了

 

 三个区域的执行顺序如下

 

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

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

相关文章

Verilog学习笔记(串口RS232,基于野火教程)

目录 一、串口简介 二、设计与实现 串口数据回环顶层模块设计 串口接收模块uart_rx 串口发送模块uart_tx 顶层模块rs32_top 三、上板验证 一、串口简介 其中SPI和I2C为同步通信接口&#xff0c;双方时钟频率相同。而UART属于异步通信接口&#xff0c;没有统一时钟&…

旅游网项目(SpringBoot2.7.1 + SpringMVC + Mybatis-Plus3.5.0)

技术选型 JAVA版本&#xff1a;JDK17 数据库&#xff1a;Mysql5.7Navicat 后端框架&#xff1a;SpringBoot3.0.6 SpringMVC Mybatis-Plus3.5.0 权限控制&#xff1a;SpringSecurity 前端框架&#xff1a;AdminLTE2 模板引擎&#xff1a;Thymeleaf 工具类&#xff1a;发…

WIN10系统解决IDEA动不动就卡顿一下

1、前言 不知为啥&#xff0c;最近idea一直在卡顿&#xff0c;输入几个代码都会卡两秒&#xff0c;鼠标滚动文件卡两秒&#xff0c;点击打开文件卡两秒&#xff0c;就算是点击上方的工具栏&#xff0c;它也要等两秒才会出来菜单&#xff01; 卡顿的时候整个idea直接无响应&a…

Java性能权威指南-总结3

Java性能权威指南-总结3 性能测试方法原则4:尽早频繁测试小结 Java性能调优工具箱操作系统的工具和分析CPU使用率 性能测试方法 原则4:尽早频繁测试 这是最后的原则。性能测试应该作为开发周期不可或缺的一部分。理想情况下&#xff0c;在代码提交到中心源代码仓库前&#xf…

【数据分享】1929-2022年全球站点的逐月最高气温(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01; 之前我们分享过1929-2022年全球气象站…

Win10搭建Nacos2.2.3集群版

Nacos是Alibaba提供的服务注册发现的管理平台&#xff0c;其优异的性能越来越受到广大开发者的喜爱&#xff0c;在构建分布式微服务项目中通常会首选Nacos作为注册/配置中心&#xff0c;在实际开发中为了提升服务的可用性和稳定性&#xff0c;通常都会搭建集群版&#xff0c;有…

《强风吹拂》呐!你喜欢跑步吗?

《强风吹拂》呐&#xff01;你喜欢跑步吗&#xff1f; 三浦紫苑&#xff0c;1976生于东京。主要作品有《多田便利屋》《强风吹拂》《哪啊哪啊~神去村》《编舟记》等 林佩瑾、李建铨、杨正敏 译 文章目录 《强风吹拂》呐&#xff01;你喜欢跑步吗&#xff1f;[toc]动漫摘录箱根驿…

Go Web下gin框架使用(一)

〇、前言 在前面&#xff0c;已经在这篇文章中详细地讨论了 gin 框架下的模板渲染问题&#xff0c;这篇文章主要对 gin 框架的使用进行讨论。 一、不同的路由 以下可以选择不同的路由进行渲染&#xff1a; r : gin.Default()type usr struct {Name string json:"name&…

八、go语言键盘输入和打印输出

键盘输入和打印输出 一、打印输出 1.1 fmt包 fmt包实现了类似C语言printf和scanf的格式化I/O。格式化verb&#xff08;‘verb’&#xff09;源自C语言但更简单。 详见官网fmt的API&#xff1a;https://golang.google.cn/pkg/fmt/ 1.2 导入包 import "fmt"1.3 常…

MyBatis——MyBatis项目搭建

但凡是框架&#xff0c;使用都是分三步走 1.导入jar文件&#xff0c;用maven导入 2.处理配置文件 3.开发业务代码 1.创建maven项目导入相关依赖 在pom文件中导入MyBatis相关依赖jar文件 安装lombok 在File->Settings Pugins 中安装lombok 要想启动lombok的话还需要在B…

GPT带你飞:Chat GPT吊打面试官,实时获取答案,分享调用OpenAI API key+完整源码脚本哦!

目录 福利&#xff1a;文末纯分享中文版CHAT GPT镜像&#xff0c;不存在魔法&#xff0c;纯分享免费使用 故事发生了 火爆GitHub 所以大家注意 网友看了之后调侃到&#xff0c;为了防止线上面试作弊&#xff0c;以后只好把面试都改成线下了。 如何安装 既然是调用GPT的AP…

nodejs基于vue的汽车订票客运站售票网站

使用Mysql创建数据表保存本系统产生的数据。系统可以提供信息显示和相应服务&#xff0c;其管理员负责审核会员充值&#xff0c;审核客户购票信息以及会员购票信息&#xff0c;管理客运班次与留言板&#xff0c;管理会员等级。客户查看客运班次&#xff0c;购买并支付车票&…

【Selenium】常用的Selenium基础使用模板和简单封装

前言 近来又用上了 Selneium &#xff0c;因为反复用到&#xff0c;所以在这里将一些常用的方法封装起来&#xff0c;方便后续的使用。 在这篇文章中&#xff0c;我们将探讨 Selenium 的基础模板和基础封装&#xff0c;以便更好地理解 Selenium 的使用方法。 在Selenium的使用…

python基础----03-----if语句、while、for循环、range语句、continue和break

一 布尔类型和比较运算符 1.1 布尔类型和比较运算符 定义变量存储布尔类型数据&#xff1a;变量名称 布尔类型字面量。 布尔类型不仅可以自行定义同时也可以通过计算的来。也就是使用比较运算符进行比较运算得到布尔类型的结果。在C/C中&#xff0c;比较运算符称之为关系运算…

如何解决航空企业数字化转型中的痛点?

数字化时代&#xff0c;越来越多的企业开始关注数字技术&#xff0c;希望通过数字化改造提高企业效率和竞争力&#xff0c;为企业创造更多的商机和利润。今天就来同大家探讨航空领域&#xff0c;小程序在企业数字化转型中发挥的作用、 航空业员工端App的敏捷转型挑战 技术上的…

Java 异常机制:是Java 提供的一种识别及响应错误的一致性机制。

。 目录 友情提醒第一章、异常概述1.1&#xff09;我们常说的异常是什么1.2&#xff09;异常的作用1.3&#xff09;Java异常体系和分类1.4&#xff09;演示异常的产生 第二章、定义异常与抛出异常&#xff1a;throw2.1&#xff09;自定义异常类&#xff1a;继承Exception或Run…

网络io与io多路复用select/poll/epoll

一、网络IO请求 网络I/O请求是指在计算机网络中&#xff0c;向其他主机或服务器发送请求或接收响应的操作。这些请求可以包括获取网页、下载文件、发送电子邮件等。网络I/O请求需要使用合适的协议和通信方式来进行数据传输&#xff0c;例如HTTP、FTP、SMTP等。 要完成一个完整…

字节面试过了,薪资都谈好了20K*13,结果挂在这里....

一般提到面试&#xff0c;肯定都会想问一下面试结果&#xff0c;我就大概的说一下面试结果&#xff0c;哈哈&#xff0c;其实不太想说&#xff0c;因为挺惨的&#xff0c;并没有像很多大佬一样 ”已拿字节阿里腾讯各大厂offer”&#xff0c;但是毕竟是自己的经历&#xff0c;无…

让效果图渲染做到最佳的几个小诀窍

制作出优秀的效果图需要多方面的技术支持&#xff0c;而渲染是其中非常关键的一步。一份精美的效果图需要经过高质量的渲染才能呈现出最佳的效果。本文将分享一些关于如何让效果图渲染做到最佳的小诀窍&#xff0c;包括专注的小细节、优化场景设置和灯光、纹理、图像应用最终修…