SPring Boot整合第三方框架

springboot整合第三方框架

1. 整合mybatis

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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.12.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>sbAndMybatis</artifactId><version>0.0.1-SNAPSHOT</version><name>sbAndMybatis</name><description>sbAndMybatis</description><properties><java.version>8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--mysql依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--mybatis和springboot的整合的依赖--><dependency><groupId>repMaven.org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency></dependencies><build><plugins><plugin><groupId>repMaven.org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>3.2.5</version><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build>
</project>

spring-boot-starter-parent的版本为2.3.12,因为jdk版本为8,只有17及以上版本的jdk才可以用3.0以上的

mybatis-spring-boot-starter的版本依赖于上述的版本,为3.0的话会出现兼容问题,采用2.1.4

spring-boot-maven-plugin自动生成的会飘红,改为使用本地仓库的插件

1.2 配置文件

spring.application.name=sbAndMybatis
#数据源的信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/zmq?serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456#配置mybatis映射文件的路径
mybatis.mapper-locations=classpath:mapper/*.xml

在该文件中可以配置关于数据库的相关信息,也可以指定端口号和上下文路径

1.3 在entiry包下生成实体类User

@Data
public class User {private Integer id;private String username;private String password;
}

1.4 在dao包下生成接口UserDao

@Repository
public interface UserDao {//添加public int insert(User user);//删除public int del(Integer id);//修改public int update(User user);//查询全部public List<User> selectAll();//根据id查询public User selectById(Integer id);
}

1.5 在resources目录下生成mapper

在该文件下生成UserMapper.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zmq.dao.UserDao"><!--resultMap映射--><resultMap id="myMap" type="com.zmq.entity.User" autoMapping="true"><id property="id" column="id"/><result property="username" column="u_name"/></resultMap><!--添加新用户--><insert id="add">insert into user values (null,#{username},#{password})</insert><insert id="insert">insert into user values (null,#{username},#{password})</insert><update id="update">update user set u_name=#{username},password=#{password} where id=#{id}</update><delete id="del">delete from user where id=#{id}</delete><!--根据姓名和密码查询--><select id="getByOthers" resultMap="myMap">select * from user where u_name=#{username} and password=#{password}</select><select id="selectAll" resultMap="myMap">select * from user</select><select id="selectById" resultMap="myMap">select * from user where id=#{id}</select>
</mapper>

1.6 在vo包下生成R类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class R {private Integer code;private String msg;private Object object;
}

该类用于统一返回信息的类型

1.7 在service包下生成UserService业务接口

public interface UserService {public  R insert(User user);public R del(Integer id);public R update(User user);public R selectAll();public R selectById(Integer id);
}

1.8 在service包下生成impl包

在该包下生成UserServiceImpl类,并实现UserService接口

@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;@Overridepublic R insert(User user) {int insert = userDao.insert(user);if(insert>0){return new R(200,"添加成功!",null);}else {return new R(500,"添加失败!",null);}}@Overridepublic R del(Integer id) {int del = userDao.del(id);if(del>0) {return new R(200,"删除成功!",null);}else {return new R(500,"删除失败!",null);}}@Overridepublic R update(User user) {int update = userDao.update(user);if(update>0){return new R(200,"修改成功!",null);}else {return new R(500,"修改失败!",null);}}@Overridepublic R selectAll() {List<User> list = userDao.selectAll();if(list!=null){return new R(200,"查询成功!",list);}else {return new R(500,"查询失败",null);}}@Overridepublic R selectById(Integer id) {User user = userDao.selectById(id);if(user!=null){return new R(200,"查询成功",user);}else {return new R(500,"查询失败!",null);}}
}

1.9 在controller层生成UerController类

@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;//添加@PostMapping("/insert")public R insert(@RequestBody User user){return userService.insert(user);}//删除@DeleteMapping("/delete")public R delete(Integer id){return userService.del(id);}//修改@PutMapping("/update")public R update(@RequestBody User user){return userService.update(user);}//查询全部@GetMapping("/selectAll")public R selectAll(){return userService.selectAll();}//根据id查询@GetMapping("/selectById")public R selectById(Integer id){return userService.selectById(id);}
}

1.10 在主类上添加注入dao层的注解

@SpringBootApplication
//为指定的dao生成代理实现类
@MapperScan(basePackages = "com.zmq.dao")
public class SbAndMybatisApplication {public static void main(String[] args) {SpringApplication.run(SbAndMybatisApplication.class, args);}}

1.11 报错

  • 报错1

在这里插入图片描述

没有为dao生成代理实现类

在这里插入图片描述

  • 报错2

在这里插入图片描述

mybatis和springboot整合的版本太高

2. 整合swagger2

2.1 什么是swagger2

swagger2就是在线生成接口文档的,而且还可以对接口进行测试

Swagger2是一个规范和完整的框架,用于生成、描述、调用和可视化Restful风格的web服务,现在我们使用spring boot整合,作用:
1. 在线生成接口文档
2. 接口的功能测试

Restful风格:在controller层的注解使用:

添加:@PostMapping

删除:@DeleteMapping

修改:@PutMapping

查询:@GetMapping

2.2 为什么需要使用swagger2

因为项目为前后端分离,靠接口调用连接,就需要为每个接口生成接口文档,而手写word文档实时性差

在这里插入图片描述

2.3 如何使用

  • 引入依赖
<!--引入swagger2依赖--><dependency><groupId>com.spring4all</groupId><artifactId>swagger-spring-boot-starter</artifactId><version>1.9.1.RELEASE</version></dependency><!--图形化依赖--><dependency><groupId>com.github.xiaoymin</groupId><artifactId>swagger-bootstrap-ui</artifactId><version>1.9.6</version></dependency>

考虑版本不兼容问题

  • 创建swagger2配置类
@Configuration
public class Swagger2Config {//创建swagger实例@Beanpublic Docket docket() {Docket docket=new Docket(DocumentationType.SWAGGER_2).apiInfo(getInfo())//设置接口文档的信息.select().apis(RequestHandlerSelectors.basePackage("com.zmq.controller")) //指定为那些路径下得到类生成接口文档.build();return docket;}private ApiInfo getInfo(){Contact DEFAULT_CONTACT = new Contact("ldw", "http://www.ldw.com", "110@qq.com");ApiInfo DEFAULT = new ApiInfo("用户管理系统API", "该系统中的接口专门操作用户的", "v1.0", "http://www.baidu.com",DEFAULT_CONTACT, "dong", "http://www.jd.com", new ArrayList<VendorExtension>());return DEFAULT;}
}

@Configuration:Spring注解:声明该类为配置类

@Bean注解:用在方法上,必须用在配置类里面,将当前方法的返回值对象存入容器中

Docket对象说明:

  • 构造方法:需要一个DocumentationType类对象,这里选择SWAGGER_2

在这里插入图片描述

在这里插入图片描述

Docket对象说明:

  • apiInfo():用于配置swagger 信息,设置接口文档的信息

这个类对象仅有如下属性,且只有一个构造方法。

  • 在主类上开启swagger的注解驱动
@SpringBootApplication
@MapperScan(basePackages = "com.zmq.dao")
//开启文档注解
@EnableSwagger2
public class SbAndMybatisWorkApplication {public static void main(String[] args) {SpringApplication.run(SbAndMybatisWorkApplication.class, args);}}

@EnableSwagger2:开启swagger2的注解驱动

  • 访问swagger接口文档

第一种:http://localhost:8080/swagger-ui.html

第二种:http://localhost:8080/doc.html

2.4 swagger2常用注解

  • 对controller层的三个注解

@Api(tags=“”):使用在接口类上,对接口类的说明

@ApiOperation(value=“”):接口方法上,对接口方法的说明

@ApiImplicitParams(

@ApiImplicitParam(name=“参数名”,value=“参数说明”,required=“是否必写”,dataType=“数据类型”)

):接口方法所有参数的概述

@RestController
@RequestMapping("/user")
@Api(tags = "用户管理")
public class UserController {@Autowiredprivate UserService userService;@PostMapping("/insert")@ApiOperation(value = "添加用户")@ApiImplicitParams(@ApiImplicitParam(name = "user" ,value="用户对象",required = true,dataType = "User"))public R insert(@RequestBody User user){return userService.isnert(user);}@GetMapping("/selectAll")public R selectAll(){return userService.selectAll();}
}
  • 对实体类的两个注解

@ApiModel(value=“”):使用在实体类上,对实体类的说明

@ApiModelProperty(value=“”):使用在实体类属性上,对属性的说明

@Data
@ApiModel(value = "用户实体类")
public class User {private Integer id;@ApiModelProperty(value = "用户姓名")private String username;@ApiModelProperty(value = "用户密码")private String password;
}

3. 整合定时器

在指定的时间执行相应的业务代码。场景:oss修改照片时,存在一个冗余照片。定时删除冗余照片

比如:下单,30分钟未支付就取消订单

  • 引入定时器依赖
  <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId></dependency>
  • 创建一个定时业务类
@Configuration
public class QuartzConfig {//定时业务代码//定义定时规则@Scheduled(cron = "0/5 * * * * ?")public void show(){System.out.println("*******************");//发生短信 或者删除oss冗余文件  或者取消订单}
}

cron:表达式

  • 在主类上开启定时器注解驱动
@SpringBootApplication
@MapperScan(basePackages = "com.zmq.dao")
//开启文档注解
@EnableSwagger2
//开启定时器注解
@EnableScheduling
public class SbAndMybatisWorkApplication {public static void main(String[] args) {SpringApplication.run(SbAndMybatisWorkApplication.class, args);}
}

@EnableScheduling:开启定时器注解驱动

在线生成cron表达式:https://cron.ciding.cc/

4. 整合mybatis-plus

4.1 概述

MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强,不做改变,为简化开发、提高效率而生

4.2 特点

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作。
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询。
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

4.3 使用

  • 引入依赖
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.7</version>
</dependency>

若因为MyBatis-Plus和MyBatis的依赖版本问题而报错,可以将MyBatis的依赖删除,因为MyBatis-Plus中包含MyBatis的依赖,且保证了版本的一致性

  • 配置文件
spring.application.name=sbAndMPspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/zmq1?serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456#??mybatis???????
mybatis.mapper-locations=classpath:mapper/*.xml#配置日志--sql日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
  • 实体类
@TableName(value ="user")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {/*** 主键ID*/@TableIdprivate Long id;/*** 姓名*/private String name;/*** 年龄*/private Integer age;/*** 邮箱*/private String email;@TableField(exist = false)private static final long serialVersionUID = 1L;
}
  • mapper层
@Repository
public interface UserMapper extends BaseMapper<User> {
}
  • 在主类上为mapper生成代理实现类
//生成代理实现类
@MapperScan("com.zmq.mapper")
public class SbAndMpApplication {public static void main(String[] args) {        SpringApplication.run(SbAndMpApplication.class, args);}
}

测试:

  • 根据id查询
@SpringBootTest
class Qy174SpringbootMpApplicationTests {@Autowiredprivate UserMapper userMapper;/*** 如果出现实体类和表名不一致。@TableName* 如果出现实体类属性名和字段名不一致。@TableField*/@Testvoid testSelectById() {User user = userMapper.selectById(1);System.out.println(user);}}
  • 添加
@Testvoid testInsert(){//添加一条记录
//        User user=new User(null,"qqq",19,"123@qq.com");
//        //添加--把生成的主键也会赋值给对象中主键属性
//        System.out.println("填进去:"+user);
//        int row = userMapper.insert(user);
//        System.out.println(row);
//        System.out.println("填进去后:"+user);//批量添加
//        List<User> list=new ArrayList<>();
//        list.add(new User(null,"aa",18,"123@qq.com"));
//        list.add(new User(null,"aaa",19,"223@qq.com"));
//        list.add(new User(null,"vb",19,"323@qq.com"));
//        list.add(new User(null,"bb",17,"323@qq.com"));
//        List<BatchResult> insert = userMapper.insert(list);//如果有id则修改 没有则添加User user=new User(2,"sss",19,"123@qq.com");userMapper.insertOrUpdate(user);}

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

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

相关文章

安装isce2

今天再次尝试安装&#xff0c;之前试过2次都是卡在同一步&#xff0c;今天换成了用mamba conda就没有再报错了 全程参考云军老师的step by step教程&#xff0c;安装成功 GitHub - yunjunz/conda-envs: conda environment setup on Linux / macOS for InSAR data processing …

【进阶】利用python内置模块自动化发送邮件及邮件附件

目录 自动化发送邮件 流程&#xff1a; 步骤&#xff1a; 【重点】 【MIMEText--发送文本类型的邮件】 【MIMEImage-发送附件为图片的邮件】 【MIMEBase--发送附件为html报告的邮件】 自动化发送邮件 以qq邮箱为例&#xff0c;提前打开POP3/IMAP/SMTP/Exchange/CardDAV 服…

【Redis】复制(Replica)

文章目录 一、复制是什么&#xff1f;二、 基本命令三、 配置&#xff08;分为配置文件和命令配置&#xff09;3.1 配置文件3.2 命令配置3.3 嵌套连接3.4 关闭从属关系 四、 复制原理五、 缺点 以下是本篇文章正文内容 一、复制是什么&#xff1f; 主从复制 master&#xff…

GloVe: Global Vectors for Word Representation论文笔记解读

基本信息 作者Jeffrey Penningtondoi10.3115/v1/D14-1162发表时间2014期刊EMNLP网址https://aclanthology.org/D14-1162.pdf 研究背景 1. What’s known 既往研究已证实 全局矩阵分解方法&#xff1a;LSA&#xff0c;考虑整个语料库词频的统计信息得到共现矩阵&#xff0c;通…

根据视图矩阵, 恢复相机的世界空间的位置

根据视图矩阵, 恢复相机的世界空间的位置 一、方法1 glsl 实现: // 从本地局部坐标系(相机空间) 到 世界空间的旋转变换 mat3 getLocal2WorldRotation() {mat3 world2localRotation mat3(viewMatrix[0].xyz,viewMatrix[1].xyz,viewMatrix[2].xyz);return inverse(world2loca…

汽车零配件行业看板管理系统应用

生产制造已经走向了精益生产&#xff0c;计算时效产出、物料周转时间等问题&#xff0c;成为每一个制造企业要面临的问题&#xff0c;工厂更需要加快自动化&#xff0c;信息化&#xff0c;数字化的布局和应用。 之前的文章多次讲解了企业MES管理系统&#xff0c;本篇文章就为大…

论文er们,YOLO这口饭得趁热吃

不知道各位有没有看出来&#xff0c;从去年开始YOLO相关的论文就处于一个井喷式状态&#xff0c;SCI各区都能见到它的身影。 这是因为YOLO其实是个很好发论文的方向&#xff0c;需求量很大&#xff0c;热度高&#xff0c;并且好入门&#xff0c;能获取的资源也很多。写论文时一…

宾馆酒店电视信号高清改造-广电信号接入数字电视同轴高清传输系统应用

宾馆酒店电视信号高清改造-广电信号接入数字电视同轴高清传输系统应用 由北京海特伟业科技有限公司任洪卓发布于2024年7月12日 一、宾馆酒店广电信号接入数字电视同轴高清传输系统建设背景 在当今数字化快速发展的时代&#xff0c;宾馆酒店作为服务行业的重要组成部分&#x…

idea修改全局配置、idea中用aliyun的脚手架,解决配置文件中文乱码

idea修改全局配置 idea中用aliyun的脚手架&#xff0c;创建springBoot项目 解决配置文件中文乱码

解决fidder小黑怪倒出JMeter文件缺失域名、请求头

解决fidder小黑怪倒出JMeter文件缺失域名、请求头 1、目录结构&#xff1a; 2、代码 coding:utf-8 Software:PyCharm Time:2024/7/10 14:02 Author:Dr.zxyimport zipfile import os import xml.etree.ElementTree as ET import re#定义信息头 headers_to_extract [Host, Conn…

内网安全:权限维持的各种姿势

1.Linux权限维持 2.Windows权限维持 目录&#xff1a; 一.Linux权限维持&#xff1a; 1.webshell&#xff1a; 2.定时任务&#xff1a; 3.SUID后门&#xff1a; 4.SSH Key免密登录后门&#xff1a; 5.添加用户后门&#xff1a; 二.Windows权限维持 1.计划任务后门&…

在 Java 中:为什么不能在 static 环境中访问非 static 变量?

在 Java 中&#xff1a;为什么不能在 static 环境中访问非 static 变量&#xff1f; 1、静态&#xff08;static&#xff09;变量2、非静态&#xff08;非static&#xff09;变量3、为什么不能访问&#xff1f;4、如何访问&#xff1f;5、总结 &#x1f496;The Begin&#x1f…

2024年用于在 Python 中构建 API 的 8 个开源框架

什么是API&#xff1f; API是一个软件解决方案&#xff0c;作为中介&#xff0c;使两个应用程序能够相互交互。以下一些特征让API变得更加有用和有价值&#xff1a; 遵守REST和HTTP等易于访问、广泛理解和开发人员友好的标准。API不仅仅是几行代码&#xff1b;这些是为移动开…

安装WindowsTerminal并设置默认以管理员身份运行启动终端

安装WindowsTerminal并设置默认以管理员身份运行启动终端 背景&#xff1a;Microsoft Store打不开&#xff0c;且WindowsTerminal没有默认以管理员身份运行。 下载msixbundle类型的安装包&#xff1a;https://github.com/microsoft/terminal/releases 使用管理员运行Windows …

[RK3308H_Linux] 关于8+2(8路模拟麦克风 + 2路es7243e回采)的调试心得

问题描述 RK3308H 使用8路个模拟麦克风录音&#xff0c;2路用es7243e做回采 解决方案&#xff1a; 首先先调8路模拟麦克风&#xff0c;根据原理图确定使用的是哪路I2S。 以下为dts配置&#xff0c;acodec的属性注释附上。 &acodec {status "okay";rockchip,m…

springBoot(若依)集成camunda

1、下图为项目结构 2、最外层 pom引入依赖 <properties><!--camunda 标明版本&#xff0c;注意要个自己的Spring 版本匹配&#xff0c;匹配关系自行查询官网--><camunda.version>7.18.0</camunda.version> </properties> 3、common模块引入依赖 …

Python 开发植物大战僵尸杂交版辅助【全网最详细_查找 + 代码编写一体化零基础也能学会】

目录 辅助最终展示效果 一、文章介绍 二、工具介绍 三、基址搜索 3.1、寻找阳光基址 3.2、寻找卡槽冷却基址 3.3、寻找僵尸刷新时间基址 3.4、寻找大阳光刷新时间基址 3.5、寻找植物编号基址 3.6、寻找场上僵尸数量基址 3.7、寻找僵尸 X 坐标基址 3.8、通过找到的僵…

《昇思25天学习打卡营第1天|QuickStart》

说在前面 曾经接触过华为的910B服务级显卡&#xff0c;当时基于910B做了一些开发的工作&#xff0c;但是总感觉做的事情太低层&#xff0c;想要能自顶向下的了解下&#xff0c;因此开始了MindSpore的学习。另外也想给予提供的显卡&#xff0c;简单尝试下llm模型的训练&#xf…

数据库mysql-对数据库和表的DDL命令

文章目录 一、什么是DDL操作二、数据库编码集和数据库校验集三、使用步骤对数据库的增删查改1.创建数据库2.进入数据库3.显示数据库4.修改数据库mysqldump 5.删除数据库 对表的增删查改1.添加/创建表2.插入表内容3.查看表查看所有表查看表结构查看表内容 4.修改表修改表的名字修…

SpringBootWeb 篇-入门了解 Swagger 的具体使用

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Swagger 介绍 1.1 Swagger 和 Yapi 的使用场景 2.0 Swagger 的使用方式 2.1 导入 knife4j 的 maven 坐标 2.2 在配置类中加入 knife4j 相关配置 2.3 设置静态资源…