MyBatis-Plus-扩展操作(3)
3.扩展
代码生成
逻辑删除
枚举处理器
json处理器
配置加密
分页插件
3.1 代码生成
https://blog.csdn.net/weixin_41957626/article/details/132651552
下载下面的插件
红色的是刚刚生成的。
我觉得不如官方的那个好用,唯一的好处就是勾选的选项能够看的懂得。
3.2逻辑删除
不是真的删除是进行uupdate的操作,把对应的标志位设置为对应的标志就可以的
mp中可以采用全局的配置设置对应的逻辑删除的操作达到和原先逻辑删除一样的方式。
下面是全局的配置。
global-config:db-config:logic-delete-field: flag #全局删除的实体的字段名logic-delete-value: 1 #逻辑删除值logic-not-delete-value: 0 #逻辑未删除的值
说明所有的 表的都是基于下面的格式的。
可以在指定的表的字段上进行设置逻辑删除的字段需要进行单独的设置的。
在数据库中添加逻辑删除的字段。
测试对address的逻辑删除
@Testvoid tes61(){boolean flag= addressService.removeById(59L);System.out.println("删除的结果="+flag);}
删除的结果
JDBC Connection [HikariProxyConnection@118887511 wrapping com.mysql.cj.jdbc.ConnectionImpl@38ee7a9d] will not be managed by Spring
==> Preparing: UPDATE address SET deleted=1 WHERE id=? AND deleted=0
==> Parameters: 59(Long)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@39c96e48]
删除的结果=true
此时进行查询的时候查询不到
@Testvoid tes62(){Address address= addressService.getById(59L);System.out.println("address="+address);}
查询的结果
JDBC Connection [HikariProxyConnection@571251299 wrapping com.mysql.cj.jdbc.ConnectionImpl@55b5cd2b] will not be managed by Spring
==> Preparing: SELECT id,user_id,province,city,town,mobile,street,contact,is_default,notes,deleted FROM address WHERE id=? AND deleted=0
==> Parameters: 59(Long)
<== Total: 0
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@ebe067d]
address=null
此时我们进行逻辑删除的内容找不到了
数据库中的逻辑删除字段类型的设置
可以采用位的方式,也可以采用int的类型。
- 采用这两种方式的显示的方式是不一样的
采用int的类型
此时在idea中显示的就是0和1,在代码的设计上需要注意一个问题false需要和0进行对应,1需要和true进行对应。
采用位的类型也是相似的道理但是直接显示的时候是不同的。
采用位的时候需要进行转义。
@Testvoid tes63(){Address address= addressService.getById(60L);System.out.println("address="+address);}
==> Preparing: SELECT id,user_id,province,city,town,mobile,street,contact,is_default,notes,deleted FROM address WHERE id=? AND deleted=0
==> Parameters: 60(Long)
<== Columns: id, user_id, province, city, town, mobile, street, contact, is_default, notes, deleted
<== Row: 60, 1, 北京, 北京, 朝阳区, 13700221122, 修正大厦, Jack, 0, null, 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@205df5dc]
address=Address(id=60, userId=1, province=北京, city=北京, town=朝阳区, mobile=13700221122, street=修正大厦, contact=Jack, isDefault=false, notes=null, deleted=false)
3.3枚举处理器
像是状态的字段可以采用对应的状态转换器进行转换。
枚举类型是比常量更加标准的数据的类型。
/*** 使用状态(1正常 2冻结)*/private Integer status;
从枚举类中进行插入的时候需要时候不推荐间接调用的方式。有没有一种方式可以直接枚举类型的转换呢。
mp原先就帮我们定义好了对应的枚举类型的处理器。我们直接进行调用就可以了。
下面是原先类的属性和枚举类的对应的关系。
基本操作
- 定义一个枚举类
//用户状态信息
@AllArgsConstructor
@Getter
public enum UserStatus {NORMAL(1,"正常"),FREEZE(2,"冻结");@EnumValueprivate final int value;private final String desc;
}
- 配置mp设置一个枚举类型的处理器
mybatis-plus:configuration:default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
- 修改实体类
// private Integer status;private UserStatus status;
- 测试
@Test
void tes64(){User user=new User();user.setUsername("赵天");user.setPassword("123456");user.setPhone("102");JSONObject jsonObject=new JSONObject();//hutool中的jsonObject.set("age",20);jsonObject.set("intro","伏地魔");jsonObject.set("gender","female");user.setInfo(jsonObject.toString());user.setStatus(UserStatus.NORMAL);user.setBalance(2000);user.setCreateTime(DateTime.now());user.setUpdateTime(DateTime.now());boolean flag= userService.save(user);System.out.println("是否插入成功="+flag);
}
- 结果
JDBC Connection [HikariProxyConnection@1844349670 wrapping com.mysql.cj.jdbc.ConnectionImpl@5af64ce0] will not be managed by Spring
==> Preparing: INSERT INTO user ( username, password, phone, info, status, balance, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )
==> Parameters: 赵天(String), 123456(String), 102(String), {"age":20,"intro":"伏地魔","gender":"female"}(String), 1(Integer), 2000(Integer), 2023-09-03 16:55:18.777(Timestamp), 2023-09-03 16:55:18.778(Timestamp)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@345d053b]
是否插入成功=true
@Test
void tes65(){User user=userService.lambdaQuery().eq(User::getUsername,"赵天").one();System.out.println(user.toString());
}查询出来的结果
User(id=1674613593516396924, username=赵天, password=123456, phone=102, info={"age": 20, "intro": "伏地魔", "gender": "female"}, status=NORMAL, balance=2000, createTime=Sun Sep 03 16:55:19 CST 2023, updateTime=Sun Sep 03 16:55:19 CST 2023)
3.4JSON处理器
如何将json字符串转换成对应的类的对象
数据库info的字段类型就是json
这个不是全局的。mvc底层最长用的就是jackson的不是json的类型处理器。
- 原先采用的是下面的数据类型
private Object info;
- 现在需要改成下面的数据类型,并添加对应的类型处理器
@TableField(typeHandler = JacksonTypeHandler.class)private UserInfo info;
- 创建一个实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class UserInfo implements Serializable {private Integer age;private String intro;private String gender;
}
- 此时进行查询的操作
@Testvoid tes65(){User user=userService.lambdaQuery().eq(User::getUsername,"赵天").one();System.out.println(user.toString());}
- 结果:此时查询出来的info的值是null。
JDBC Connection [HikariProxyConnection@1451516720 wrapping com.mysql.cj.jdbc.ConnectionImpl@49f3ff41] will not be managed by Spring
==> Preparing: SELECT id,username,password,phone,info,status,balance,create_time,update_time FROM user WHERE (username = ?)
==> Parameters: 赵天(String)
<== Columns: id, username, password, phone, info, status, balance, create_time, update_time
<== Row: 1674613593516396924, 赵天, 123456, 102, <<BLOB>>, 1, 2000, 2023-09-03 16:55:19, 2023-09-03 16:55:19
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6d099323]
User(id=1674613593516396924, username=赵天, password=123456, phone=102, info=null, status=NORMAL, balance=2000, createTime=Sun Sep 03 16:55:19 CST 2023, updateTime=Sun Sep 03 16:55:19 CST 2023)
出现上面的原因是我们没有设置resultMap的值
最简单的解决的方式:设置自动映射。
@TableName(value ="user",autoResultMap = true)
此时查询的值就出现了。
JDBC Connection [HikariProxyConnection@998015174 wrapping com.mysql.cj.jdbc.ConnectionImpl@3b2e5c0d] will not be managed by Spring
==> Preparing: SELECT id,username,password,phone,info,status,balance,create_time,update_time FROM user WHERE (username = ?)
==> Parameters: 赵天(String)
<== Columns: id, username, password, phone, info, status, balance, create_time, update_time
<== Row: 1674613593516396924, 赵天, 123456, 102, <<BLOB>>, 1, 2000, 2023-09-03 16:55:19, 2023-09-03 16:55:19
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7c1447b5]
User(id=1674613593516396924, username=赵天, password=123456, phone=102, info=UserInfo(age=20, intro=伏地魔, gender=female), status=NORMAL, balance=2000, createTime=Sun Sep 03 16:55:19 CST 2023, updateTime=Sun Sep 03 16:55:19 CST 2023)
或者是采用自己指定的方式
@TableName(value ="user",resultMap = "BaseResultMap")
<resultMap id="BaseResultMap" type="com.lxz.demo.domain.User"><id property="id" column="id" jdbcType="BIGINT"/><result property="username" column="username" jdbcType="VARCHAR"/><result property="password" column="password" jdbcType="VARCHAR"/><result property="phone" column="phone" jdbcType="VARCHAR"/><result property="info" column="info" jdbcType="OTHER" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/><result property="status" column="status" jdbcType="INTEGER"/><result property="balance" column="balance" jdbcType="INTEGER"/><result property="createTime" column="create_time" jdbcType="TIMESTAMP"/><result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
</resultMap>
3.5配置加密
mp默认是提供一个aes算法的加密的工具,对配置中的敏感信息做加密处理
生成加密的账号和密码
@Testpublic void test1(){//生成16位随机aes密钥String randomKey= AES.generateRandomKey();System.out.println("randomKey="+randomKey);//利用密钥对用户名和密码进行加密String username=AES.encrypt("root",randomKey);System.out.println("username="+username);//利用密钥对密码加密String password=AES.encrypt("root",randomKey);System.out.println("password="+password);}
下面是生成的加密的账号和密码以及用于加密和解密的密钥:
randomKey=19cb291382b38782
username=ebMDrqWwkpNR9jkM+2x5Iw==
password=ebMDrqWwkpNR9jkM+2x5Iw==
将加密之后的配置到配置文件中
spring:datasource:url: jdbc:mysql://localhost:3306/mp?useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=trueusername: mpw:ebMDrqWwkpNR9jkM+2x5Iw== #加密password: mpw:ebMDrqWwkpNR9jkM+2x5Iw== #加密driver-class-name: com.mysql.cj.jdbc.Driver
启动的时候加上对应的启动的参数
- 要是单元测试的话就在下面设置上下面的内容
@SpringBootTest(args = "--mpw.key=19cb291382b38782")
- 不是单元测试的话需要设置下面的内容
测试代码
@Testvoid tes65(){User user=userService.lambdaQuery().eq(User::getUsername,"赵天").one();System.out.println(user.toString());}查询结果:
JDBC Connection [HikariProxyConnection@180949634 wrapping com.mysql.cj.jdbc.ConnectionImpl@7f79edee] will not be managed by Spring
==> Preparing: SELECT * FROM user WHERE (username = ?)
==> Parameters: 赵天(String)
<== Columns: id, username, password, phone, info, status, balance, create_time, update_time
<== Row: 1674613593516396924, 赵天, 123456, 102, <<BLOB>>, 1, 2000, 2023-09-03 16:55:19, 2023-09-03 16:55:19
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@568750b7]
User(id=1674613593516396924, username=赵天, password=123456, phone=102, info=UserInfo(age=20, intro=伏地魔, gender=female), status=NORMAL, balance=2000, createTime=Sun Sep 03 16:55:19 CST 2023, updateTime=Sun Sep 03 16:55:19 CST 2023)
说明解密的密码成功了。
4.插件功能
本质是拦截器功能
4.1分页插件
下面是常见的内容
编写配置类
@Configuration
//@MapperScan("com.lxz.demo.mapper")
public class MybatisPlusConfig {/*** 添加分页插件*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//如果配置多个插件,切记分页最后添加//interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); 如果有多数据源可以不配具体类型 否则都建议配上具体的DbTypereturn interceptor;}
}
测试简单的分页
@Testvoid tes65(){//分页参数Integer pageNum=1;Integer pageSize=10;//分页对象Page<User> page=new Page<User>(pageNum, pageSize);//排序page.addOrder(new OrderItem("username",false));//其他参数page=userService.page(page);Long count=page.getTotal();List<User> result=page.getRecords();System.out.println("count="+count);result.forEach(System.out::println);}
//排序 这个是升序page.addOrder(new OrderItem("username",true));
有查询条件的
page=userService.page(page,null);
4.2分页案例
接口内容:
补全实体:
- 请求参数
package com.lxz.demo.domain.vo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;
import java.util.List;//返回结果
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageVo<T> implements Serializable {private Long total;private Long pages;/** 采用泛型是最好的* */private List<T> list;}
- 返回参数
package com.lxz.demo.domain.vo;import com.lxz.demo.domain.UserInfo;
import com.lxz.demo.enums.UserStatus;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;//返回结果
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserVo implements Serializable {private Long id;private String username;private UserInfo info;private UserStatus status;private Long balance;}
- 接口类
@RestController
@RequestMapping("/users")
public class UserController {@Autowiredprivate UserService userService;@PostMapping("/page")public PageVo<UserVo> queryUserByPage(@RequestBody PageQuery query){return userService.queryUserByPage(query);}}
或者
区别在于注入的方式是不同的
@RestController
@RequestMapping("/users2")
@RequiredArgsConstructor
public class UserController2 {private final UserService userService;@PostMapping("/page")public PageVo<UserVo> queryUserByPage(@RequestBody PageQuery query){return userService.queryUserByPage(query);}
}
- 服务层
public interface UserService extends IService<User> {PageVo<UserVo> queryUserByPage(PageQuery query);
}
@Autowiredprivate UserMapper userMapper;@Overridepublic PageVo<UserVo> queryUserByPage(PageQuery query) {// mapper.selectPage() 都是可以的Page<User> page=Page.of(query.getPageNo(),query.getPageSize());if (!StrUtil.isBlank(query.getSortBy())){page.addOrder(new OrderItem(query.getSortBy(),query.getIsAsc()));}page=userMapper.selectPage(page,null);Long pages=page.getPages();Long total=page.getTotal();List<User> list=page.getRecords();PageVo pageVo=new PageVo();pageVo.setPages(pages);pageVo.setTotal(total);pageVo.setList(list);if (CollUtil.isEmpty(list)){//没有数据直接返回return new PageVo(page.getTotal(),page.getPages(), Collections.emptyList());}else {//转换Vo的方法List<UserVo> userVos= BeanUtil.copyToList(list,UserVo.class);return new PageVo(page.getTotal(),page.getPages(), userVos);}}
- 测试接口
localhost:8081/users/page{"pageNo":"1","pageSize":"5","sortBy":"username","isAsc":"false"
}
- 查询结果
{"total": 100005,"pages": 20001,"list": [{"id": 1674613593516396800,"username": "赵天","info": {"age": 20,"intro": "伏地魔","gender": "female"},"status": "NORMAL","balance": 2000},{"id": 1674613593516396800,"username": "赵六99999","info": {"age": 99999,"intro": "99999伏地魔","gender": "female"},"status": "NORMAL","balance": 2000},{"id": 1674613593516396800,"username": "赵六99998","info": {"age": 99998,"intro": "99998伏地魔","gender": "female"},"status": "NORMAL","balance": 2000},{"id": 1674613593516396800,"username": "赵六99997","info": {"age": 99997,"intro": "99997伏地魔","gender": "female"},"status": "NORMAL","balance": 2000},{"id": 1674613593516396800,"username": "赵六99996","info": {"age": 99996,"intro": "99996伏地魔","gender": "female"},"status": "NORMAL","balance": 2000}]
}
但是此时的枚举不是我们需要的类型
{"id": 2,"username": "Rose","info": {"age": 19,"intro": "青涩少女","gender": "female"},"status": "NORMAL","balance": 300},
在原先的枚举类上加上对应的 @JsonValue注解
//用户状态信息
@AllArgsConstructor
@Getter
public enum UserStatus {NORMAL(1,"正常"),FREEZE(2,"冻结");@EnumValueprivate final int value;@JsonValueprivate final String desc;
}
此时返回的内容就是下面的内容
此时把 @JsonValue注解加载desc上
{"id": 3,"username": "Hope","info": {"age": 25,"intro": "上进青年","gender": "male"},"status": "正常","balance": 99800},
要是在value上加上对应的注解的话返回的就是下面的格式的内容
//用户状态信息
@AllArgsConstructor
@Getter
public enum UserStatus {NORMAL(1,"正常"),FREEZE(2,"冻结");@EnumValue@JsonValueprivate final int value;
// @JsonValueprivate final String desc;
}
{"id": 1,"username": "Jack","info": {"age": 20,"intro": "佛系青年","gender": "male"},"status": 2,"balance": 0},
4.3简化4.2操作
封装分页
public<T> Page<T> getPage(String defaultSort, Boolean defaultIsAsc){//分页插件Page<T> p=new Page<T>(pageNo,pageSize);if (!StrUtil.isBlank(sortBy)){//排序条件p.addOrder(new OrderItem(sortBy,isAsc));}else { //可以不设置排序可以设置默认的排序//默认排序p.addOrder(new OrderItem(defaultSort,defaultIsAsc));}return p;}}
相关文章:
MyBatis-Plus-扩展操作(3)
3.扩展 代码生成 逻辑删除 枚举处理器 json处理器 配置加密 分页插件 3.1 代码生成 https://blog.csdn.net/weixin_41957626/article/details/132651552 下载下面的插件 红色的是刚刚生成的。 我觉得不如官方的那个好用,唯一的好处就是勾选的选项能够看的懂得。…...
react 中 antd 的 样式和 tailwind 样式冲突
问题原因:在使用 tailwindcss 时,会导入大量的 tailwindcss 默认属性,而默认样式中 button, [typebutton] 包含了 background-color: transparent; 从而导致 antd Button 按钮背景色变成透明。解决办法:禁止 tailwindcss 的默认属…...
获取该虚拟机的所有权失败,主机上的某个应用程序正在使用该虚拟机
点击“openstack-controller”虚机 打开出现如下错误,点击“获取所有权” 点击“取消” 这时候不要删除虚拟机,这种错误一般是由于虚拟机没有正常关闭引起的。 找到openstack-controller的虚拟磁盘文件及配置文件存放的位置,删除openstack-…...
2024届校招-Java开发笔试题-S4卷
有三种题型:单项选择题(10道)、不定项选择题(10道)、编程题(3道) 下面是一些回忆的题目: 1.哪种设计模式将对象的创建与使用分离,通过工厂类创建对象 答:工…...
数据分析面试题(2023.09.08)
数据分析流程 总体分为四层:需求层、数据层、分析层和结论层 一、统计学问题 1、贝叶斯公式复述并解释应用场景 公式:P(A|B) P(B|A)*P(A) / P(B)应用场景:如搜索query纠错,设A为正确的词,B为输入的词,那…...
jenkins 报错fatal:could not read Username for ‘XXX‘:No such device or address
#原因:机器做迁移,或者断电,遇到突发情况 #解决: 一.排查HOME和USER环境变量 可以在项目执行shell脚本的时候echo $HOME和USER 也可以在构建记录位置点击compare environment 对比两次构建的环境变量 二.查看指定节点的git凭证 查…...
LRU算法之我见
文章目录 一、LRU算法是什么?二、使用原理三、代码实现总结 一、LRU算法是什么? LRU算法又称最近最少使用算法,它是是大部分操作系统为最大化页面命中率而广泛采用的一种页面置换算法。是一种缓存淘汰策略,根据使用频率来淘汰无用…...
【第20例】华为 IPD 体系 | IPD 的底层思考逻辑(限制版)
目录 简介 更新情况 IPD体系 CSDN学院 专栏目录 作者简介 简介 最近随着华为 Mate 60 系列的爆火发布。 这家差不多沉寂了 4 年的企业再次映入大众的眼帘。 其实,华为手机业务发展的元年最早可以追溯...
spaCy库的实体链接踩坑,以及spaCy-entity-linker的knowledge_base下载问题
问题1. spacy Can’t find factory for ‘entityLinker’ 1)问题 写了一个实体链接类,代码如下: nlp spacy.load("en_core_web_md")class entieyLink:def __init__(self, doc, nlp):self.nlp nlpself.doc self.nlp(doc)# Che…...
【数据结构】红黑树的插入与验证
文章目录 一、基本概念1.时代背景2. 基本概念3.基本性质 二、实现原理1. 插入1.1变色1.2旋转变色①左旋②右旋③右左双旋④左右双旋 2.验证 源码总结 一、基本概念 1.时代背景 1972年鲁道夫拜尔(Rudolf Bayer)发明了一种数据结构,这是一种特殊的B树4阶情况。这些树…...
Pycharm----将Anaconda建立的环境导入
首先打开项目设置,点击添加 随后点击现有环境,点击三个。。。号进行添加 最后找到你Anaconda安装文件夹,envs找到你建立的环境名称,找到python.exe将它导入即可让现在的python环境为你建立的环境,同时还需要更改终端方…...
数字花园的指南针:微信小程序排名的提升之道
微信小程序,是一片数字花园,其中各种各样的小程序竞相绽放,散发出各自独特的芬芳。在这个花园中,排名优化就像是精心照料花朵的园丁,让我们一同走进这个数字花园,探寻如何提升微信小程序的排名优化…...
LRU与LFU的c++实现
LRU 是时间维度上最少使用 维持一个链表,最近使用的放在表头 淘汰表尾 LFU 是实际使用频率的最少使用 每一个对应的频率维持一个链表, 淘汰最低频率的最后一个 1. LRU LRU(Least Recently Used,最近最少使用)是一种常…...
什么是Docker和Docker-Compose?
Docker的构成 Docker仓库:https://hub.docker.com Docker自身组件 Docker Client:Docker的客户端 Docker Server:Docker daemon的主要组成部分,接受用户通过Docker Client发出的请求,并按照相应的路由规则实现路由分发…...
三.listview或tableviw显示
一.使用qt creator 转变类型 变形为listview或tableviw 二.导出ui文件为py文件 # from123.py 为导出 py文件 form.ui 为 qt creator创造的 ui 文件 pyuic5 -o x:\xxx\from123.py form.uifrom123.py listview # -*- coding: utf-8 -*-# Form implementation generated fro…...
【算法】一文带你从浅至深入门dp动态规划
文章目录 一、前言二、动态规划理论基础1、基本概念2、动态规划五部曲【✔】3、出错了如何排查? 三、实战演练🗡0x00 斐波那契数0x01 第N个泰波那契数0x02 爬楼梯0x03 三步问题0x04 使用最小花费爬楼梯⭐解法一解法二 0x05 解码方法* 四、总结与提炼 一、…...
超简单免费转换ape到flac
1. 安装最新版的ffmpeg 2. 安装cywin环境 3. 设置path到ffmpeg export PATH$PATH:"PATH/TO/FFMPEG/BIN" 4.到ape所在的目录,执行以下命令 find . -iname "*.ape" | while read line; do fb${line::-4}; fn"$fb.flac";echo ffm…...
JavaScript混淆加密
什么是JS混淆加密? JavaScript混淆加密是一种通过对源代码进行变换,使其变得难以理解和分析的技术。它的目标是增加攻击者破解代码的难度,同时保持代码的功能不受影响。混淆加密的目的是使代码难以逆向工程,从而防止攻击者窃取知…...
Java8特性-Lambda表达式
📕概述 在Java 8中引入了Lambda表达式作为一项重要的语言特性,可以堪称是一种语法糖。Lambda表达式使得以函数式编程的方式解决问题变得更加简洁和便捷。 Lambda表达式的语法如下: (parameters) -> expression (参数) -> {代码}其中&…...
通过Power Platform自定义D365CE业务需求 - 1. Microsoft Power Apps 简介
Microsoft Power Apps是一个趋势性的、无代码和无代码的商业应用程序开发平台,配有一套应用程序、服务和连接器。其数据平台为构建适合任何业务需求的自定义业务应用程序提供了快速开发环境。随着无代码、少代码应用程序开发的引入,任何人都可以快速构建低代码应用程序,并与…...
简易实现QT中的virtualkeyboard及问题总结
文章目录 前言:一、虚拟键盘的实现综合代码 二、为什么选用QWidget而不适用QDialog实现键盘三、从窗体a拉起窗体b后,窗体b闪退问题的探讨四、关闭主窗口时子窗口未关闭的问题 前言: 本文章主要包含四部分: 虚拟键盘的实现&#…...
景联文科技可为多模态语音翻译模型提供数据采集支持
8月22日Facebook的母公司Meta Platforms发布了一种能够翻译和转录数十种语言的人工智能模型——SeamlessM4T,可以在日常生活中或者商务交流中为用户提供更便捷的翻译和转录服务。 相较于传统的文本翻译,这项技术的最大区别在于它可以实现端到端的语音翻译…...
定时器分批请求数据
<!DOCTYPE html> <html><script>//需要分页的数组let arr [1,2,3,4,5,6,7,8,9,10]//分割数组,每页3条splitArr(arr,4)/*** 分割数组*/function splitArr(idList,size){//当前页数let num 1//共多少页let count Math.ceil(idList.length / siz…...
【华为OD机试python】报数游戏【2023 B卷|100分】
【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 100个人围成一圈,每个人有一个编码,编号从1开始到100。 他们从1开始依次报数,报到为M的人自动退出圈圈,然后下一个人接着从1开始报数, 直到剩余的人数小于M。 请问最后剩余的人在原先…...
【深度学习实战—6】:基于Pytorch的血细胞图像分类(通用型图像分类程序)
✨博客主页:米开朗琪罗~🎈 ✨博主爱好:羽毛球🏸 ✨年轻人要:Living for the moment(活在当下)!💪 🏆推荐专栏:【图像处理】【千锤百炼Python】【深…...
华清远见第六课程day4作业
仿照string类,完成myString 类 #include <iostream> #include <cstring>using namespace std;class myString{ private:char *str;int size; public:myString():size(10){str new char[size];strcpy(str,"");}myString(const char*s){size …...
【广州华锐互动】AR远程智慧巡检在化工行业中的应用
AR远程智慧巡检是一种基于增强现实技术的新型巡检方式,它可以利用虚拟信息和现实场景的结合,实现对设备、工艺流程等方面的实时监测和识别。在化工行业中,AR远程智慧巡检具有广泛的应用前景,可以提高生产效率和安全性。 一、设备巡…...
easyui-sidemenu 菜单 后台加载
前言 一个项目的功能较齐全,而齐全就预示着功能菜单比较长,但是现实中在不同的甲方使用中往往只需要摘取其中几项功能,所以就想到用配置菜单以满足其需求,且无需变更原始代码,查找一些资料总是似是而非或是誊抄别的什…...
Python总结上传图片到服务器并保存的两种方式
一、前言 图片保存到服务器的两种方法: 1、根据图片的 URL 将其保存到服务器的固定位置 2、根据 request.FILES.get("file") 方式从请求中获取上传的图片文件,并将其保存到服务器的固定位置 二、方法 1、图片的 URL 要根据图片的 URL 将…...
【ETH】以太坊合约智能合约逆向方案
技术角度了解区块链 区块链技术逆袭专栏 文章目录 区块链技术逆袭专栏获取合约代码逆向工具方案1方案2实操演示:获取合约代码 在反编译之前,你需要先知道如果获取编译后的字节码。 这里以 USDT 举例 eth.getCode(0xdAC17F958D2ee523a2206206994597C13D831ec7)字节码: 0x…...
江门站官网/写一篇推广商品的软文
生活中虽然有难过的事情,但是要微笑面对哦!下面是由出国留学网编辑为大家整理的“关于难过的作文400字”,仅供参考,欢迎大家阅读。关于难过的作文400字(一)星期六下午,我到妈妈的“第一时间”快餐店的办公室玩…...
外贸商城网站制作公司/百度新闻发布平台
最近项目开发中用到了android:launchMode"singleTask" 和 onNewIntent(Intent intent)两个特性,现总结一下经验: android:launchMode"singleTask" 配置在 Mainifest 中,它保证了栈中此Activity总是只有一个,无…...
沧州网站建设制作设计优化/石家庄新闻网头条新闻
chrome操作技巧: CtrlShiftI 开发人员工具CtrlShiftJ JavaScript 控制台CtrlShiftDel 清除浏览数据CtrlU 查看源代码ShiftEscape 查看任务管理器ctrlshiftB 可以悬挂或收起标签栏altF或者altE 可以打开您在chrome的设置菜单输入一个网址,然后按住Altenter键…...
广西南宁网站建设公司/模板网站哪个好
1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id603672744434 2)全套实验源码手册视频下载地址:http://www.openedv.com/thread-300792-1-1.html 3)…...
wap网站开发工具/企业网站营销的优缺点及案例
主板 华南x99 tf 650cpu E5 2666 V3 169 散热硅脂 3内存 三星 ECC DDR3 1866 8Gx4 345显卡 自带 映泰760 2G 400硬盘 固态 120g 2T 221.5电源 鑫谷GP750G金牌650W-全模组 334散热 华南金牌X79双路台式机电脑主板塔式CPU风扇静音四铜管散热器 67机箱 先马朱雀air 150...
苏州企业服务平台/合肥seo网站排名优化公司
能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解。 假如有如下的两个数组,如图所示: 5,6,1,4&a…...