[SSM]MyBatisPlus进阶

三、进阶篇

3.1映射

3.1.1自动映射规则

  • 表名和实体类名映射 -> 表名user 实体类名User
  • 字段名和实体类属性名映射 -> 字段名name 实体类属性名name
  • 字段名下划线命名方式和实体类属性驼峰命名方式映射 -> 字段名 user_email 实体类属性名 userEmail

开启驼峰命名

mybatis-plus.configuration.map-underscore-to-camel-case=true

3.1.2表映射

  • 通过@TableName()注解指定映射的数据库表名,就会按照指定的表名进行映射
  • 如:此时将数据库的表名改为t_user,要完成表名和实体类名的映射,需要将实体类名也要指定为t_user
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("t_user")
public class User {private Long id;private String name;private Integer age;private String email;
}
  • 如果有很多实体类,对应到数据库表中的很多表,我们不需要每个依次配置,只需要配置一个全局的设置,他都会给每个实体类名前面添加指定的前缀。
#表映射全局配置
mybatis-plus.global-config.db-config.table-prefix=t_

3.1.3字段映射

  • 什么场景下会改变字段映射呢?

场景一

  • 当数据库字段和表实体类的属性不一致时,我们可以使用@TableField()注解改变字段和属性的映射,让注解中的名称和表字段保持一致。

  • 如:此时数据库字段的名称我们改为username,在根据实体类的属性拼接SQL的使用,就会使用@TableField()中指定的名称username进行拼接,完成查询

    @TableField("username")private String name;
  • 此时的SQL语句是这样的
SELECT id,username AS name,email FROM t_user

场景二

  • 数据库字段和表实体类的属性一致,框架在拼接SQL语句的时候,会使用属性名称直接拼接SQL语句,例如:
SELECT  id,username AS name,age,email,desc  FROM t_user
  • 这条语句直接进行查询的时候,会出现错误:

Error querying database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘desc FROM t_user’ at line 1

  • 原因是desc属于关键字,不能直接用于SQL查询,要解决这个问题,就需要将desc字段加上符号,将他变为非关键字,才能完成查询。这个问题的根本也是改变生成的SQL语句的字段名称,也就是我们需要通过@TableField()改变实体类的属性名称,将desc变为desc,就可以解决这个问题
@TableField("`desc`")
private String desc;

3.1.4字段失效

  • 当数据库中有字段不希望被查询,我们可以通过@Table(select=false)来隐藏这个字段,拿在拼接SQL语句的时候,就不会拼接这个字段。
  • 如:如果不想显示年龄信息,那么可以在age属性上添加这个注解来隐藏这个字段
@TableField(select = false)
private Integer age;
  • 通过查询生成的SQL语句,发现并没有拼接age字段

3.1.5视图属性

  • 在实际开发中,有些字段不需要数据库存储,但是却需要展示,需要展示也就是意味着实体类中需要存在这个字段,我们称这些实体类中存在但是数据库中不存在这个字段,叫做视图字段。

  • 我们可以通过@TableField(exist=false)来去掉这个字段,不让他作为查询字段。

@TableField(exist = false)
private Integer online;
  • 通过查询生成的SQL语句,发现并没有online字段

3.2条件构造器

3.3等值查询

3.3.1eq

  • 使用QueryWrapper对象,构建查询条件
@Test
void eq() {//1.创建条件查询对象QueryWrapper<User> queryWrapper = new QueryWrapper<>();//2.设置查询条件,指定查询的字段和匹配的值queryWrapper.eq("username","Jack");//3.进行条件查询User user = userMapper.selectOne(queryWrapper);System.out.println(user);
}
  • 测试效果

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 如果我们每次都是自己进行字段名称的编写,有可能会出现名称写错的情况,怎么避免这种情况呢,我们可以使用LambdaQueryWrapper对象,在构建字段时,使用方法引用的方式来选择字段,这样做可以避免字段拼写错误。
@Test
void eq2() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.eq(User::getName,"Jack");User user = userMapper.selectOne(lambdaQueryWrapper);System.out.println(user);
}
  • 我们的构建条件是从哪里来的?应该是从客户端通过请求发送过来的,由服务器接收的。在网站中一般都会有多个条件入口,用户可以选择一个或多个条件进行查询,那这个时候在请求时,我们不能确定所有的条件都是有值的,部分条件可能用户没有传值,那么该条件就为null。
  • 那么null的条件,我们是不需要进行查询条件拼接的,否则就会出现如下情况,将为null的条件进行拼接,筛选后无法查询出结果。
@Test
void isNull() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.eq(User::getName,null);User user = userMapper.selectOne(lambdaQueryWrapper);System.out.println(user);
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 我们要解决这个问题,可以先判断是否为空,根据判断结果选择是否拼接该字段。
@Test
void isNUll2() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();//String username="Jone";String username=null;lambdaQueryWrapper.eq(username!=null,User::getName,username);//User user = userMapper.selectOne(lambdaQueryWrapper);List<User> user = userMapper.selectList(lambdaQueryWrapper);System.out.println(user);
}

3.3.2allEq

  • 如何通过多个eq,构建多条件查询
@Test
void allEq1() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.eq(User::getName,"Tom");lambdaQueryWrapper.eq(User::getAge,28);User user = userMapper.selectOne(lambdaQueryWrapper);System.out.println(user);
}
  • 如果此时有多个条件需要同时判断,我们可以将这多个条件放入到Map集合中,更加的方便。
@Test
void allEq2() {//1.构建条件MapHashMap<String, Object> map = new HashMap<>();map.put("username","Tom");//map.put("age",28);map.put("age",null);//2.创建QueryWrapper对象QueryWrapper<User> queryWrapper = new QueryWrapper<>();//3.使用条件完成查询queryWrapper.allEq(map,false);User user = userMapper.selectOne(queryWrapper);System.out.println(user);
}
  • 参数params:表示传递的Map集合
  • 参数null2IsNull:表示对于为null的条件是否判断为isNull

3.3.3ne

  • 不等ne
@Test
void ne() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.ne(User::getName,"Tom");List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}

3.4范围查询

3.4.1gt

@Test
void gt() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.gt(User::getAge,20);List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}

3.4.2ge

@Test
void ge() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.ge(User::getAge,20);List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}

3.4.3lt

@Test
void lt() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.lt(User::getAge,20);List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}

3.4.4le

@Test
void le() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.le(User::getAge,20);List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}

3.4.5between

@Test
void between() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.between(User::getAge,20,28);List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}

3.4.6notBetween

@Test
void notBetween() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.notBetween(User::getAge,20,28);List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}

3.5模糊查询

@Test
void like() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.like(User::getName,"J");List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}@Test
void notLike() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.notLike(User::getName,"J");List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}@Test
void likeLeft() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.likeLeft(User::getName,"e");List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}@Test
void likeRight() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.likeRight(User::getName,"J");List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}

3.6判空查询

Test
void isNull() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.isNull(User::getDesc);List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}@Test
void isNotNull() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.isNotNull(User::getName);List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}

3.7包含查询

3.7.1in

@Test
void in() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.in(User::getAge, 18, 20, 21);List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}
@Test
void in2() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();ArrayList<Integer> list = new ArrayList<>();//Collections.addAll(list,18,20,21);list.add(18);list.add(20);list.add(21);lambdaQueryWrapper.in(User::getAge, list);List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}

3.7.2notIn

@Test
void notIn() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.notIn(User::getAge, 18, 20, 21);List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}
@Test
void notIn2() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();ArrayList<Integer> list = new ArrayList<>();Collections.addAll(list,18,20,21);lambdaQueryWrapper.notIn(User::getAge,list);List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}

3.7.3inSql

@Test
void inSql() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.inSql(User::getAge, "18,20,21");List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}
@Test
void inSql2() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.inSql(User::getAge, "select age from t_user where age>=20");List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}

3.7.4notInSql

@Test
void notInSql() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.notInSql(User::getAge, "18,20,21");List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}
@Test
void notInSql2() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.notInSql(User::getAge, "select age from t_user where age>20");List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}

3.8分组查询

@Test
void groupBy() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();//分组字段queryWrapper.groupBy("age");//查询字段queryWrapper.select("age,count(*) as field_count");List<User> users = userMapper.selectList(queryWrapper);System.out.println(users);
}

3.9聚合查询

@Test
void having() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();//分组字段queryWrapper.groupBy("age");//查询字段queryWrapper.select("age,count(*) as field_count");//聚合字段queryWrapper.having("field_count>1");List<User> users = userMapper.selectList(queryWrapper);System.out.println(users);
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.10排序查询

@Test
void orderByAsc() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.orderByAsc(User::getAge,User::getId);List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}

@Test
void orderByDesc() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.orderByDesc(User::getAge,User::getId);List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}
@Test
void orderBy() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();/*** oderBy:设置排序字段和排序的方式* 参数一:如果排序字段的值为null,是否还要作为排序字段参与排序* 参数二:是否升序排序* 参数三:排序字段*/lambdaQueryWrapper.orderBy(true, true, User::getAge);lambdaQueryWrapper.orderBy(true, false, User::getId);List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}

3.11func查询

@Testvoid func() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();//可能会根据不同的情况来选择进行拼接不同的查询条件/*lambdaQueryWrapper.func(new Consumer<LambdaQueryWrapper<User>>() {@Overridepublic void accept(LambdaQueryWrapper<User> userLambdaQueryWrapper) {if (true){userLambdaQueryWrapper.eq(User::getId,1);}else {userLambdaQueryWrapper.ne(User::getId,1);}}});*///使用lambda表达式lambdaQueryWrapper.func(i -> {if (true) {i.eq(User::getId, 1);} else {i.ne(User::getId, 1);}});List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);}

3.12逻辑查询

3.12.1and

  • 正常拼接默认就是and,例如
@Test
void and() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.gt(User::getAge,20).lt(User::getAge,30);List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}
@Test
void and2() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.eq(User::getName,"Jone").and(i->i.lt(User::getAge,20).or().gt(User::getAge,30));List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.12.2or

@Test
void or() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.lt(User::getAge, 20).or().gt(User::getAge, 30);List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}
@Test
void or2() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.likeRight(User::getName,"J").or(i->i.ge(User::getAge,20).le(User::getAge,30));List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.12.3nested

@Test
void nested() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.nested(i->i.eq(User::getName,"Tom").ne(User::getAge,23));List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.13自定义条件查询

@Test
void apply() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.apply("id=2");List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.14last查询

@Test
void last() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.last("limit 0,2");List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.15exists查询

3.15.1exists

@Test
void exists() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.exists("select id from t_user where age=18");List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}
  • select id from t_user where age=18语句能查询到结果,执行SELECT id,username AS name,age,email,desc FROM t_user语句,否则不执行。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.15.2notExists

@Test
void notExists() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.notExists("select id from t_user where age=18");List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}
  • 查询结果与exists相反。

3.16字段查询

@Test
void select() {LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.select(User::getId, User::getName);List<User> users = userMapper.selectList(lambdaQueryWrapper);System.out.println(users);
}

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

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

相关文章

设计模式之适配器与装饰器

目录 适配器模式 简介 角色 使用 优缺点 使用场景 装饰器模式 简介 优缺点 模式结构 使用 使用场景 适配器模式 简介 允许将不兼容的对象包装成一个适配器类&#xff0c;使得其他类可以通过适配器类与原始对象进行交互&#xff0c;从而提高兼容性 角色 目标角色…

vite+vue3+element-plus

vitevue3element-plus 1.开始 npm create vitelatest app -- --template vuenpm installlnpm run dev2.引入element-ui npm install element-plus修改main.js import ElementPlus from element-plus import element-plus/dist/index.css createApp(App).use(ElementPlus).m…

BlueStore BlueFS rocksdb 关联性梳理

Tag: ceph 12.2.4 BlueStore空间初始化 BlueStore磁盘空间管理 总述 OSD挂载目录基于文件系统管理&#xff0c;Slow、WAL、DB空间区域基于裸盘管理&#xff1b;Slow区域&#xff1a;此类空间主要用于存储对象数据&#xff0c;由BlueStore管理&#xff0c;其中分配于BlueFS空…

AI篇-chatgpt基本用法(文心一言也适用)

目录 &#xff08;1&#xff09;基本规则 &#xff08;2&#xff09;例子1-文章摘要 &#xff08;3&#xff09;例子2-代码生成 &#xff08;4&#xff09;文心一言链接 &#xff08;1&#xff09;基本规则 相比于搜索引擎&#xff0c;ChatGPT的优势在于其高效的想法关联和…

MyBatisPlus之DQL编程控制

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 MyBatisPlus之DQL编程控制 一、 条件查询方式&…

Spring项目配置

1.创建项目 2.修改编码格式为UTF-8 3.检查或配置代码⾃动补全功能 4.检查或配置⾃动导包 5.检查或配置Maven&#xff0c;可以⽤国内仓库镜像 6.idea识别Maven项⽬&#xff1a;在Notifications视图中会提⽰Load Maven Project&#xff0c;点击即可。 7.开启热部署 a.确认 pom.x…

EasyPOI处理excel、CSV导入导出

1 简介 使用POI在导出导出excel、导出csv、word时代码有点过于繁琐&#xff0c;好消息是近两年在开发市场上流行一种简化POI开发的类库&#xff1a;easyPOI。从名称上就能发现就是为了简化开发。 能干什么&#xff1f; Excel的快速导入导出,Excel模板导出,Word模板导出,可以…

无涯教程-JavaScript - SECOND函数

描述 SECOND函数返回时间值的秒数。第二个数字以0(零)到59之间的整数形式给出。 语法 SECOND (serial_number)争论 Argument描述Required/OptionalSerial_number 您想找到包含秒数的时间。 时间可以输入为- 引号内的文本字符串(如" 6:45 PM") 十进制数(如0.7812…

LCD驱动电路IC简述

Panel 模块驱动图示 1.Panel内部驱动 2.驱动原理框图 2.1.1 TCON(Timing Controller):时序控制器。主要功能为数据的转换及时序控制信号生成。 2.2.2 Gate控制信号工作时序 OE1 &#xff08;output enable&#xff09;:输出控制使能信号。OE2&#xff08;Multi Level Gate)&…

数字化新零售平台系统提供商,门店商品信息智慧管理-亿发进销存

传统的批发零售业务模式正面临着市场需求变化的冲击。用户日益注重个性化、便捷性和体验感&#xff0c;新兴的新零售模式迅速崛起&#xff0c;改变了传统的零售格局。如何在保持传统业务的基础上&#xff0c;变革发展&#xff0c;成为了业界亟需解决的问题。 在这一背景下&…

AP51656 LED车灯电源驱动IC 兼容替代PT4115 PT4205 PWM和线性调光

产品描述 AP51656是一款连续电感电流导通模式的降压恒流源 用于驱动一颗或多颗串联LED 输入电压范围从 5V 到 60V&#xff0c;输出电流 可达 1.5A 。根据不同的输入电压和 外部器件&#xff0c; 可以驱动高达数十瓦的 LED。 内置功率开关&#xff0c;采用高端电流采样设置 …

Docker的数据管理(持久化存储)

文章目录 一、概述二、数据卷三、数据卷容器四、端口映射五、容器互联&#xff08;使用centos镜像&#xff09;总结 一、概述 管理 Docker 容器中数据主要有两种方式&#xff1a;数据卷&#xff08;Data Volumes&#xff09;和数据卷容器&#xff08;DataVolumes Containers&a…

Spark 环境安装与案例演示

Spark 环境安装 一、准备工作 1、hadoop成功安装 2、防火墙关闭 二、解压安装 1、上传 spark 安装包到/tools 目录&#xff0c;进入 tools 下&#xff0c;执行如下命令&#xff1a; tar -zxvf spark-2.1.0-bin-hadoop2.7.tgz -C /training/由于 Spark 的脚本命令和 Hadoop…

Astro建站教程:安装nodejs,npm下载Astro,安装扩展

下载Nodejs LTS版&#xff1a;https://nodejs.org/en 安装步骤全默认即可&#xff0c;安装路径可以根据自己的爱好更改在桌面右键打开cmd或powershell&#xff0c;输入node -v和npm -v测试是否安装成功 浏览器打开https://docs.astro.build/en/install/auto/ 复制里面的npm cre…

OB Cloud助力泡泡玛特打造新一代分布式抽盒机系统

作为中国潮玩行业的领先者&#xff0c;泡泡玛特凭借 MOLLY、DIMOO、SKULLPANDA 等爆款 IP&#xff0c;以及线上线下全渠道营销收获了千万年轻人的喜爱&#xff0c;会员数达到 2600 多万。2022 年&#xff0c;泡泡玛特实现 46.2 亿元营收&#xff0c;其中线上渠道营收占比 41.8%…

找redis大key工具rdb_bigkeys

github官网 https://github.com/weiyanwei412/rdb_bigkeys 在centos下安装go [roothadoop102 rdb_bigkeys-master]# wget https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz [roothadoop102 rdb_bigkeys-master]# tar -zxf go1.13.5.linux-amd64.tar.gz -C /usr/local将g…

【开发问题系列】CSV转Excel

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

element+vue table表格全部数据和已选数据联动

1.组件TableChoose <template><div class"tableChooseBox"><div class"tableRow"><div class"tableCard"><div class"tableHeadTip">全部{{ labelTitle }}</div><slot name"body" …

Sentry 是一个开源的错误监控和日志聚合平台-- 通过docker-compose 安装Sentry

概述 Sentry 是一个开源的错误监控和日志聚合平台&#xff0c;用于帮助开发团队实时监控和调试应用程序中的错误和异常。它可以捕获应用程序中的错误和异常&#xff0c;并提供详细的错误报告&#xff0c;包括错误堆栈跟踪、环境信息、用户信息等。这些报告可以帮助开发团队快速…

CVE-2023-28303(截图修复)

在做羊城杯的misc的时候发现了一个图片&#xff0c;典型的图片高度不对&#xff0c;修改之后对图片的高度进行不断修改尝试&#xff0c;发现图片很大&#xff0c;但是内容没有出现&#xff0c; 从这里指知道存在feld文件x 截出zip文件内容&#xff0c;把04 03 改为03 04 这里的…