SpringBoot知识02

1、快速生成mapper和service

(自动生成简单的单表sql)

2、springboot配置swagger(路径不用加/api)

(1)主pom导包(子pom要引用,可选依赖)

<!--            swagger3用--><dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version></dependency><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</version></dependency>

(2)配置swagger和mvc

server:port: 8081spring:
#  swagger使用mvc:path-match:matching-strategy: ant_path_matcherdatasource:# 指定连接池的类型type: com.alibaba.druid.pool.DruidDataSourcedruid:url: "jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8&useSSL=false&useUnicode=true&serverTimezone=Asia/Shanghai"username: "root"password: "lht660036"max-active: 20# ???# wall  ??druid ???# stat  ??druid?????filters: "wall,slf4j,stat"web-stat-filter:enabled: trueurl-pattern: /*# ??????????exclusions: "/druid,*.png"# ???????stat-view-servlet:enabled: trueurl-pattern: "/druid/*"reset-enable: truelogin-username: adminlogin-password: adminmybatis:# ??mapper.xmlmapper-locations: "classpath*:mapper/**/*.xml"#  ???type-aliases-package: "com.lht.project.data.mybatis.entity"swagger:base-package: "com.lht.project.data.mybatis.controller"title: "京东商城在线Api文档"group-name: "订单商城"description: "出现bug,请熟读该文档"name: "刘惠棠帅哥"url: "https://www.baidu.com"email: "11111@163.com"version: "1.0.0"

(3)定义swaggerProperties

package com.lht.project.data.mybatis.config;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties("swagger")
@Data
public class SwaggerProperties {private String title;private String basePackage;private String groupName;private String description;private String name;private String url;private String email;private String version;}

(4)定义swaggerConfig

package com.lht.project.data.mybatis.config;import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;import javax.annotation.Resource;@Configuration
@EnableOpenApi
public class SwaggerConfig {@Resourceprivate SwaggerProperties swaggerProperties;@Beanpublic Docket docket(ApiInfo apiInfo){return new Docket(DocumentationType.OAS_30).apiInfo(apiInfo).groupName(swaggerProperties.getGroupName()).select().apis(RequestHandlerSelectors.basePackage(swaggerProperties.getBasePackage())).paths(PathSelectors.any()).build();}@Beanpublic ApiInfo apiInfo(){return new ApiInfoBuilder().title(swaggerProperties.getTitle()).description(swaggerProperties.getDescription()).version(swaggerProperties.getVersion()).contact(new Contact(swaggerProperties.getName(), swaggerProperties.getUrl(), swaggerProperties.getEmail())).build();}
}

(5)controller调用

3、配置junit5、日志(springboot自带)

4、日志的级别

info(正常信息)、debug、error(异常信息)

5、mybatisplus用了之后mybatis取别名就用不了了

6、目前导包都是写在父工程dependencyManagement里面,然后子类去调用的

7、springboot整合mybatisplus(自动有很多sql单表)

(1)父pom导入依赖(子也要引用)

<!--            mybatisplus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency>

(2)mapper里面继承basemapper

public interface BrandMapper extends BaseMapper<Brand> {
}

(3)在实体类上映射好数据库表名与类名、属性名和字段名

package com.lht.project.data.mybatis.entity;import java.util.Date;import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;@Data
@TableName("sys_brand")
public class Brand {/*** 主键*/@TableId(value = "brand_id",type = IdType.ASSIGN_ID)private Integer brandId;/*** 中文名*/@TableField("chinese_name")private String chineseName;/*** 英文名*/@TableField("english_name")private String englishName;/*** 产地id*/@TableField("producer_id")private Integer producerId;/*** 备注*/@TableField("notes")private String notes;/*** 图案(string)代替*/@TableField("logo")@TableLogic(value = "1",delval = "0")private String logo;/*** 创建时间*/@TableField("create_date")private Date createDate;//动态select去除列用public  static final String COL_CHINESE_NAME="chinese_name";public  static final String COL_STATUS="status";}

8、分页查询

9、 QueryWrapper条件构造器

 QueryWrapper<Brand> queryWrapper = new QueryWrapper<>();queryWrapper.select().eq().gt()

queryWrapper​​​​​​​相当于where

select()过滤列
eq()=
ne()!=
allEq()检查所有参数是否相等
gt()>
ge()>=
lt<
le<=
between()范围
notBetween()非范围
like模糊查询
notLike不进行模糊匹配查询的条件
likeLeft%k
likeRightk%
in多条件

(1)用法

        1)实体类写固定值

2)写构造器

package com.lht.project.data.mybatis.mapper;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.lht.project.data.mybatis.entity.Brand;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;import javax.annotation.Resource;import static org.junit.jupiter.api.Assertions.*;@SpringBootTest
@Slf4j
public class BrandMapperTest {@Resourceprivate BrandMapper brandMapper;@Testvoid selectOne() {//条件构造器QueryWrapper<Object> qw = new QueryWrapper<>();qw.eq(Brand.COL_CHINESE_NAME,"张三").or().eq(Brand.COL_STATUS,"1");}
}

12、选中之后control+shirt+U强转为大写

13、like索引必失效

14、创建全文索引(索引就不会失效了)

CREATE FULLTEXT INDEX idx_product_name 0N pms_product (product_name);

15、数据库表,主表增删改,用InnoDB(有事务,查询慢所以不用),从表查询,用MyISAM(不支持事务,查询效率高)

16、排序,分组,过滤列

17、条件函数一般与groupBy配合使用

18、测试list里面存放map

 @Testvoid selectMaps() {QueryWrapper<Brand> qw = new QueryWrapper<>();qw.select("COUNT(*) product_count","AVG(product_price) product_avg").groupBy("producer_id");List<Map<String, Object>> maps = brandMapper.selectMaps(qw);log.info("测试分组函数");}

19、封装分页

(1)添加配置类

package com.lht.project.data.mybatis.config;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
//注册所有的mapper接口
@MapperScan("com.lht.**.mapper")
public class MybatisPlusConfig {/*** 乐观锁* @param paginationInnerInterceptor* @return*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(PaginationInnerInterceptor paginationInnerInterceptor){MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();mybatisPlusInterceptor.addInnerInterceptor(paginationInnerInterceptor);return mybatisPlusInterceptor;}/*** 分页插件注册* @return*/@Beanpublic PaginationInnerInterceptor paginationInnerInterceptor(){PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();paginationInnerInterceptor.setOverflow(true);paginationInnerInterceptor.setMaxLimit(500L);return paginationInnerInterceptor;}}

(2)调用执行

  void selectPage(){Page<Brand> brandPage = brandMapper.selectPage(new Page<>(1, 10), null);log.info("总页数===>{}: 测试占位符{}",brandPage.getPages(),"1111");log.info("核心数据{}",brandPage.getRecords());log.info("总条数{}",brandPage.getTotal());}

20、" "那里如果反方向的话就会判断多次

21、typeId的类型

22、配置全局雪花id+逻辑删除

(1)全局(不推荐)

(2)局部

23、配置逻辑删除(都要加注解)

(1)全局

mybatis-plus:global-config:db-config:logic-delete-field: flag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)logic-delete-value: 1 # 逻辑已删除值(默认为 1)logic-not-delete-value: 0 # 逻辑未删除值(默认为0)

(2)局部 (就是写value)

(3)作用:自动加状态码(都要查的时候不适用)

24、乐观锁与悲观锁

        1.悲观锁是当线程拿到资源时,就对资源上锁,并在提交后,才释放锁资源,其他线程才能使用资源。
        2.乐观锁是当线程拿到资源时,上乐观锁,在提交之前,其他的锁也可以操作这个资源,当有冲突的时候,并发机制会保留前一个提交,打回后一个提交,让后一个线程重新获取资源后,再操作,然后提交。和git上传代码一样,两个线程都不是直接获取资源本身,而是先获取资源的两个copy版本,然后在这两个copy版本上修改。
3.悲观锁和乐观锁在并发量低的时候,性能差不多,但是在并发量高的时候,乐观锁的性能远远优于悲观锁
全文们常用的synchronized是悲观锁,lock是乐观锁

25、配置乐观锁

(1)配置类

package com.lht.project.data.mybatis.config;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
//注册所有的mapper接口
@MapperScan("com.lht.**.mapper")
public class MybatisPlusConfig {/*** 乐观锁* @param paginationInnerInterceptor* @return*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(PaginationInnerInterceptor paginationInnerInterceptor){MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();mybatisPlusInterceptor.addInnerInterceptor(paginationInnerInterceptor);return mybatisPlusInterceptor;}/*** 分页插件注册* @return*/@Beanpublic PaginationInnerInterceptor paginationInnerInterceptor(){PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();paginationInnerInterceptor.setOverflow(true);paginationInnerInterceptor.setMaxLimit(500L);return paginationInnerInterceptor;}}

(2)在实体类的字段上加上@Version注解(只能是时间和数字)

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

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

相关文章

Odrive 学习系列一:vscode 编译Odrive

搭建环境可参考Markerbase教程,很详细了。 简单说一两点: 解压ODrive-fw-v0.5.1.zip: 打开ODrive-fw-v0.5.1文件夹,找到Firmware文件夹,用vscode打开该文件夹: 按照以下内容操作: 编译工程: 打开 中断(terminal),输入 make -j4 回车 进行编译。编译…

Linux之Iptables简易应用

文档形成时期&#xff1a;2009-2024年 和iptables打交道有15年了&#xff0c;经过无数实践后&#xff0c;形成一个简易应用文档。 文档主题是简易应用&#xff0c;所以其原理不详述了。 因软件世界之复杂和个人能力之限&#xff0c;难免疏漏和错误&#xff0c;欢迎指正。 文章目…

互联网金融P2P主业务场景自动化测试

互联网金融P2P行业&#xff0c;近三年来发展迅速&#xff0c;如火如荼。 据不完全统计&#xff0c;全国有3000的企业。 “互联网”企业&#xff0c;几乎每天都会碰到一些奇奇怪怪的bug&#xff0c;作为在互联网企业工作的测试人员&#xff0c;风险和压力都巨大。那么我们如何降…

C#上位机与欧姆龙PLC的通信11----【爆肝】上位机应用开发(Winform版)

1、先上图 前面10讲&#xff0c;让你爽煹了肝&#xff0c;已经进入最后收尾阶段&#xff0c;这节来个常规应用&#xff0c;让前面的技能直接飞上天&#xff0c;我们要做的界面软件是这样的&#xff0c;虽然没有潘金莲漂亮&#xff0c;但也是爆抱&#xff1a; 2、如何爆&#x…

案例:Web组件抽奖案例

文章目录 介绍相关概念相关权限约束与限制完整示例 代码结构解读H5小程序Web组件总结 介绍 本篇Codelab是基于ArkTS的声明式开发范式的样例&#xff0c;主要介绍了Web组件如何加载本地和云端H5小程序。所加载的页面是由HTMLCSSJavaScript实现的完整小应用。样例主要包含以下功…

【Harmony OS - 消息通知】

应用可以通过接口发送通知消息&#xff0c;提醒用户关注应用中的变化。用户可以在通知栏查看和操作通知内容&#xff0c;通常用于当应用处于后台时&#xff0c;发送&#xff0c;本文主要来介绍在Harmony OS中的三种消息通知。 基础通知 总体流程有三步&#xff1a; 导入noti…

Mac M1 Parallels CentOS7.9 Install Jenkins

官网: https://www.jenkins.io/ 一、Install & Check Java Env Oracle官网下载Java: https://www.oracle.com/cn/ # 拷贝到Jenkins服务器 scp Downloads/jdk-8u391-linux-aarch64.tar.gz root10.211.55.34:~# 解压 mkdir -p /opt/java && tar -zxvf jdk-8u391-li…

类名.this:内部类引用外部类实例

类名.this是啥意思&#xff1f; 今天在看尚硅谷的课程时里面讲了这么一句话&#xff1a; 集合在遍历时需要先创建一个容器&#xff0c;存放集合的数据&#xff0c;这样做浪费内存 想去验证下&#xff0c;就翻了翻ArrayList的迭代过程源码 在ArrayList的迭代器类Itr&#xff08;…

Vue过滤器详解

聚沙成塔每天进步一点点 本文内容 ⭐ 专栏简介基本用法多个过滤器的串联过滤器在指令中的应用全局过滤器 ⭐ 本期推荐 ⭐ 专栏简介 Vue学习之旅的奇妙世界 欢迎大家来到 Vue 技能树参考资料专栏&#xff01;创建这个专栏的初衷是为了帮助大家更好地应对 Vue.js 技能树的学习。每…

螺纹钢负公差轧制中的测径仪应用

1、负公差轧制意义 为了满足生产使用要求&#xff0c;并根据轧制水平&#xff0c;在产品标准冲规定钢材尺寸的波动范围&#xff0c;允许钢材的实际尺寸与公称尺之间有一定的偏差&#xff0c;这个偏差一般称公差&#xff0c;公差分正、负公差&#xff0c;钢材按负公差轧制时&…

selenium不自动关闭chrome,selenium hello world

selenium不自动关闭chrome 用visual studio的话&#xff0c;右键&#xff0c;在终端运行。 from selenium import webdriveroptions webdriver.ChromeOptions() options.add_experimental_option("detach", True) driver webdriver.Chrome(optionsoptions) url …

详细分析Java中的分布式任务调度框架 XXL-Job

目录 前言1. 基本知识2. Demo3. 实战 前言 可视化任务调度 可视化配置 1. 基本知识 在Java中&#xff0c;分布式任务调度框架 XXL-Job 是一个开源的分布式任务调度平台&#xff0c;用于实现分布式系统中的定时任务调度和分布式任务执行。 下面是关于XXL-Job的一些概念、功…