【Lazy ORM 框架学习】

Gitee

点赞关注不迷路 项目地址

快速入门

模块所属层级描述快照版本正式版本
wu-database-lazy-lambdalambda针对不同数据源MavenMaven
wu-database-lazy-orm-coreorm 核心orm核心处理MavenMaven
wu-database-lazy-sqlsql核心处理成处理sql解析、sql执行、sql映射MavenMaven
wu-elasticsearch-starterESESMavenMaven
wu-hbase-starterhbasehbaseMavenMaven
wu-database-lazy-datasource-starter数据源处理数据源处理MavenMaven

简介

特性
  • 强大的CRUD操作:内置通过注入 LazyLambdaStream 对象即可实现表单的大部分CRUD操作
  • 支持Lambda形式的调用: 通过Lambda表达式,方便的编写各类查询条件
  • 内置分页查询:通过构造分页对象查询数据统计分页总数
  • 支持多种数据库:支持MySQL
支持数据库

任何能使用 LazyLambdaStream进行CRUD,并且支持标准SQL的数据库,具体支持情况如下

  • MySQL
框架架构

在这里插入图片描述

代码托管

Gitee
|Github

参与贡献

欢迎各位同学一起参与完善wu-framework-lazy-orm-spring-starter

  • 贡献代码:代码地址wu-framework-lazy-orm-spring-starter,欢迎提交Issue或者Pull Requests
教程、案例、使用者名单
  • 暂无
版本功能
  • Lazy-ORM 是一款针对懒人快速开发的ORM框架

  • 支持实体类反射数据进行数据库CRUD操作

  • 新增灵性数据插入更新(自动过滤空值)

  • 新增配置导出数据忽略指定字段
    spring.datasource.ignore-exported-fields: - id

  • 新增配置声明导出数据中的特殊字符
    spring.datasource.special-fields: - ASC

  • 新增@LazyScan自动扫描实体创建表

  • 新增自动填充表数据

  • 新增创建表方法

  • 新增更新表字段方法

  • 修复数据插入布尔类型、数字类型字段 字符串更改为->原始数据类型

  • 新增逆向工程功能生成对应的Java class 支持mybatis 适配

  • 使用Spring 进行事物管理

  • 修复数据为null 时执行sql 数据为 “null” 问题

  • 新增自动过滤null字段的upsert接口

  • 新增字段自动关联转译

    • 注解方法入参数通过数据库转译@LazyTableArgsTranslation
    • 注解方法出参数转译@LazyTableTranslation
    • 通过一个字段管理其他表的一条数据@LazyTableTranslationOneField
    • 通过一个字段管理其他表的数据@LazyTableTranslationOneToManyField

快速开始

我们将通过一个简单的 Demo 来阐述 wu-framework-lazy-orm-spring-starter 的强大功能,在此之前,我们假设您已经:

  • 拥有 Java 开发环境以及相应 IDE
  • 熟悉 Spring Boot
  • 熟悉 Maven

现有一张 User 表,其表结构如下:

idnameannual_salaryemail
1吴小二18test1@lazy.com
2吴三20test2@lazy.com
3吴小四28test3@lazy.com
4吴小五21test4@lazy.com
5吴小六24test5@lazy.com

其对应的数据库 Schema 脚本如下:

DROP TABLE IF EXISTS user;CREATE TABLE user
(id            BIGINT(20) NOT NULL COMMENT '主键ID',name          VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',annual_salary INT(11) NULL DEFAULT NULL COMMENT '年薪',email         VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',PRIMARY KEY (id)
);

其对应的数据库 Data 脚本如下:

DELETE
FROM user;INSERT INTO user (id, name, annual_salary, email)
VALUES (1, '吴小二', 18, 'test1@lazy.com'),(2, '吴三', 20, 'test2@lazy.com'),(3, '吴小四', 28, 'test3@lazy.com'),(4, '吴小五', 21, 'test4@lazy.com'),(5, '吴小六', 24, 'test5@lazy.com');
初始化工程

创建一个空的 Spring Boot 工程(工程将以 MySQL 作为默认数据库进行演示)

添加依赖

引入 Spring Boot Starter 父工程:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.7</version><relativePath/>
</parent>

引入 spring-boot-starter、spring-boot-starter-test、wu-framework-lazy-orm-spring-starter、mysql 依赖

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--懒人依赖--><dependency><groupId>top.wu2020</groupId><artifactId>wu-framework-lazy-orm-spring-starter</artifactId><version>1.2.5-JDK17-SNAPSHOT</version></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>
</dependencies>
配置

在 application.yml 配置文件中添加 mysql 数据库的相关配置:

# DataSource Config
spring:datasource:username: rootpassword: rooturl: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghaidriver-class-name: com.mysql.cj.jdbc.Driver

Spring Boot 启动类:


@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}
编码

编写实体类 User.java(此处使用了 Lombok 简化代码)


@Data
public class User {private Long id;private String name;private Integer annualSalary;private String email;
}
开始使用

添加测试类,进行功能测试:


@SpringBootTest
public class SampleTest {@AutowiredLazyLambdaStream lazyLambdaStream;@Testpublic void testSelect() {System.out.println(("----- selectAll method test ------"));// 等同于执行sql select * from sys_userCollection<User> userList = lazyLambdaStream.select(LazyWrappers.<User>lambdaWrapper()).collection();AssertFactory.assertEquals(5, userList.size());userList.forEach(System.out::println);}}
小结

通过以上几个简单的步骤,我们就实现了 User 表的 CRUD 功能,甚至连 XML 文件都不用编写!

安装

全新的 wu-framework-lazy-orm-spring-starter 1.2.5-JDK17-SNAPSHOT 版本基于 JDK17,提供了 lambda 形式的调用,所以安装集成
MP3.0 要求如下:

  • JDK 8+
  • Maven or Gradle
Spring Boot

Maven:

    <dependency><groupId>top.wu2020</groupId><artifactId>wu-framework-lazy-orm-spring-starter</artifactId><version>1.2.5-JDK17-SNAPSHOT</version></dependency>

配置

wu-framework-lazy-orm-spring-starter 的配置异常的简单,我们仅需要一些简单的配置即可使用
wu-framework-lazy-orm-spring-starter 的强大功能!

Spring Boot 工程

  • 配置yaml
# DataSource Config
spring:datasource:username: rootpassword: rooturl: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghaidriver-class-name: com.mysql.cj.jdbc.Driver

注解

::: tip 本文将介绍 wu-framework-lazy-orm-spring-starter 注解包相关类详解(更多详细描述可点击查看源码注释)
:::

  • 描述
  • 使用位置对象
@LazyTable

@LazyTable(tableName = "sys_user")
public class User {private Long id;private String name;private Integer annualSalary;private String email;
}
属性类型必须指定默认值描述
tableNameString“”表名
schemaString“”schema
commentString“”表注释
perfectTableboolean“false”完善表
smartFillFieldbooleanfalse智能填充bean属性 针对数据源 如mysql查询结果、http请求结果中包含的数据字段不再当前对象中
@LazyTableFieldId

@LazyTable(tableName = "sys_user")
public class User {@LazyTableFieldIdprivate Long id;private String name;private Integer annualSalary;private String email;
}
属性类型必须指定默认值描述
valueString“”字段名
nameString“”字段名
commentString“”字段注释
typeString“”字段了类型(varchar、int等)
indexTypeLayerField.LayerFieldTypeLayerField.LayerFieldType.ID索引类型
idTypeIdTypeAUTOMATIC_ID主键自增类型
LayerFieldType
描述
FIELD_TYPE字段类型
ID数据库 ID
UNIQUE唯一性索引
AUTOMATIC自动的
IdType
描述
AUTOMATIC_ID主键ID 默认自增
INPUT_ID输入主键
@LazyTableField

@LazyTable(tableName = "sys_user")
public class User {private Long id;private String name;@LazyTableField("salary")private Integer annualSalary;private String email;
}
属性类型必须指定默认值描述
valueString“”字段名
nameString“”字段名
commentString“”字段注释
columnTypeString“”字段了类型(varchar、int等)
existbooleantrue是否存在
indexTypeLayerField.LayerFieldTypeLayerField.LayerFieldType.ID索引类型
idTypeIdTypeAUTOMATIC_ID主键自增类型

快速测试

自动导入 wu-framework-lazy-orm-spring-starter 测试所需相关配置。

示例工程


源码:👉 wu-framework-lazy-orm-spring-starter-simple(opens new window)

使用教程


添加测试依赖

Maven:

<dependency><groupId>top.wu2020</groupId><artifactId>wu-framework-lazy-orm-spring-starter</artifactId><version>1.2.5-JDK17-SNAPSHOT</version>
</dependency>

Gradle:

compile group: 'top.wu2020', name: 'wu-framework-lazy-orm-spring-starter', version: '1.2.5-JDK17-SNAPSHOT'

编写测试用例


@Autowired
private LazyOperation lazySqlOperation;/*** 用户信息简单插入*/
@ApiOperation("用户信息简单插入")
@PostMapping("/lazy/upsert")
public void lazyUpsert() {SysUser sysUser = new SysUser();sysUser.setUsername("小来");sysUser.setPassword("1234");sysUser.setId(1L);// 同执行sql insert into sys_user (user_name,password,id) values("小来","1234","1") ON DUPLICATE KEY UPDATE user_name=values (user_name),password=values (password),id=values (id)lazySqlOperation.upsert(sysUser);
}

核心功能

代码生成器

快速开始

安装
<dependency><groupId>top.wu2020</groupId><artifactId>wu-framework-lazy-orm-spring-starter</artifactId><version>1.2.5-JDK17-SNAPSHOT</version>
</dependency>

::: tip 直接使用maven引入项目,通过配置文件加载生成代码
:::

配置文件
spring:lazy:enable-reverse-engineering: true  # 允许逆向工程reverse-engineering:enable-lazy: false   # 不允许lazy系列注解enable-lombok-accessors: false # 不允许 lombok.accessorsenable-lombok-data: false  # 不允许 lombok.datapackage-name: org.wu.lazy  # 包名enable-swagger: false  # 不允许 swagger
使用

启动Spring-boot的启动类即可

成品

在这里插入图片描述

CRUD 接口

upsert
    /*** 批量更新或插入** @param objects* @param <T>*/
<T> void upsert(Object... objects);
参数说明
类型参数名描述
Object…objects任意实体对象
upsert 案例
    public static void main(String[] args) {LazyLambdaStream lazyLambdaStream = LazyLambdaStreamFactory.createLazyLambdaStream("127.0.0.1",3306,"acw","root","wujiawei");DataBaseUser dataBaseUser = new DataBaseUser();dataBaseUser.setUsername("username");dataBaseUser.setAddress("地址");dataBaseUser.setAge(18);// 同执行SQL: insert into user (id,username,birthday,sex,age,age_type,address_id) VALUES (null,'username',null,null,18,null,null)  ON DUPLICATE KEY UPDATE //id=values (id),username=values (username),birthday=values (birthday),sex=values (sex),age=values (age),age_type=values (age_type),address_id=values (address_id)lazyLambdaStream.upsert(dataBaseUser);}
insert
    /*** 插入 单个/list** @param t* @param <T>*/
<T> void insert(T t);
参数说明
类型参数名描述
Tt实体对象
insert 案例
    public static void main(String[] args) {LazyLambdaStream lazyLambdaStream = LazyLambdaStreamFactory.createLazyLambdaStream("127.0.0.1",3306,"acw","root","wujiawei");DataBaseUser dataBaseUser = new DataBaseUser();dataBaseUser.setUsername("username");dataBaseUser.setAddress("地址");dataBaseUser.setAge(18);// 同执行SQL: INSERT INTO user(username,birthday,sex,age,age_type,address_id)values(null,'username',null,null,'18',null,null)lazyLambdaStream.insert(dataBaseUser);}
upsertRemoveNull
  /*** 更新或者插入单个执行 去除空值* 多个数据性能会慢,不经常使用*/
Object upsertRemoveNull(Object... t);
参数说明
类型参数名描述
Object…t任意实体对象
upsertRemoveNull 案例
    public static void main(String[] args) {LazyLambdaStream lazyLambdaStream = LazyLambdaStreamFactory.createLazyLambdaStream("127.0.0.1",3306,"acw","root","wujiawei");Address address = new Address();address.setId(1L);address.setLongitude(1.2d);//  执行SQL: insert into address (id,latitude,longitude) VALUES (1,'0.0','1.2')  ON DUPLICATE KEY UPDATE // id=values (id),latitude=values (latitude),longitude=values (longitude)lazyLambdaStream.upsertRemoveNull(address);List<Address> addresses = new ArrayList<>();for (int i = 0; i < 10; i++) {Address addressa = new Address();address.setId(1L);address.setLongitude(1.2d);addresses.add(addressa);}// 执行SQL: insert into address (id,name,latitude,longitude) VALUES (null,null,'0.0','0.0'),(null,null,'0.0','0.0'),(null,null,'0.0','0.0'),(null,null,'0.0','0.0'),(null,null,'0.0','0.0'),(null,null,'0.0','0.0'),(null,null,'0.0','0.0'),(null,null,'0.0','0.0'),(null,null,'0.0','0.0'),(null,null,'0.0','0.0')  ON DUPLICATE KEY UPDATE// id=values (id),name=values (name),latitude=values (latitude),longitude=values (longitude)lazyLambdaStream.upsert(addresses);}
lazyPage
    /*** 分页查询** @param <T>* @return*/
<T> Page<T> lazyPage(@NonNull Page lazyPage, @NonNull Class returnType, String sql, Object... params);
参数说明
类型参数名描述
PagelazyPage分页对象
ClassreturnType返回数据类型
Stringsql执行的sql语句
Object…paramssql执行参数
lazyPage 案例
    public static void main(String[] args) {LazyLambdaStream lazyLambdaStream = LazyLambdaStreamFactory.createLazyLambdaStream("127.0.0.1",3306,"acw","root","wujiawei");//  执行SQL: select user.* from user where  user.age  >  18  and  user.sex  =  '男'Page<DataBaseUser> dataBaseUserLazyPage = lazyLambdaStream.selectPage(LazyWrappers.<DataBaseUser>lambdaWrapper().gt(DataBaseUser::getAge, 18).eq(DataBaseUser::getSex, "男"),new Page<>(1, 10));System.out.println(dataBaseUserLazyPage);
}
executeSQL

/*** @param sql* @param t* @param params* @param <T>* @return*/
<T> List<T> executeSQL(String sql, Class t, Object... params);
参数说明
类型参数名描述
Classt返回数据类型
Stringsql执行的sql语句
Object…paramssql执行参数
executeSQL 案例
    public static void main(String[] args) {LazyLambdaStream lazyLambdaStream = LazyLambdaStreamFactory.createLazyLambdaStream("127.0.0.1",3306,"acw","root","wujiawei");//  执行SQL: select user.* from user where  user.age  >  18  and  user.sex  =  '男'List<DataBaseUser> dataBaseUsers = lazyLambdaStream.executeSQL("select user.* from user where  user.age  >  %s  and  user.sex  =  '%s'", DataBaseUser.class, 18, "男");System.out.println(dataBaseUsers);
}
executeSQLForBean
      /*** description 执行SQL 返回指定类型** @param* @return* @exception/throws* @author Jiawei Wu* @date 2020/12/29 下午1:44*/
<T> T executeSQLForBean(String sql, Class<?> t, Object... params);
参数说明
类型参数名描述
Classt返回数据类型
Stringsql执行的sql语句
Object…paramssql执行参数
executeSQLForBean 案例
    public static void main(String[] args) {LazyLambdaStream lazyLambdaStream = LazyLambdaStreamFactory.createLazyLambdaStream("127.0.0.1",3306,"acw","root","wujiawei");//  执行SQL: select user.* from user where  user.age  >  18  and  user.sex  =  '男' limit 1DataBaseUser dataBaseUser = lazyLambdaStream.executeSQLForBean("select user.* from user where  user.age  >  %s  and  user.sex  =  '%s' limit 1",DataBaseUser.class,18,"男");System.out.println(dataBaseUser);
}
perfect
 /*** describe 完善表** @param entityClasses class 对象数组* @return* @author Jia wei Wu* @date 2022/1/2 5:05 下午**/
<T> T perfect(@NonNull Class... entityClasses);
参数说明
类型参数名描述
Class…entityClasses实体对象
perfect 案例
    public static void main(String[] args) {LazyLambdaStream lazyLambdaStream = LazyLambdaStreamFactory.createLazyLambdaStream("127.0.0.1",3306,"acw","root","wujiawei");LazyDatabaseJsonMessage.lazyDataSourceType = DataSourceType.MySQL;// 完善表结构lazyLambdaStream.perfect(Address.class);}
createTable
    /*** describe 创建表** @param* @return* @author Jia wei Wu* @date 2022/1/2 7:48 下午**/
<T> T createTable(@NonNull Class<?>... entityClasses);
参数说明
类型参数名描述
Class…entityClasses实体对象
createTable 案例
    public static void main(String[] args) {LazyLambdaStream lazyLambdaStream = LazyLambdaStreamFactory.createLazyLambdaStream("127.0.0.1",3306,"acw","root","wujiawei");LazyDatabaseJsonMessage.lazyDataSourceType = DataSourceType.MySQL;// 创建表lazyLambdaStream.createTable(Address.class);}
updateTable
    /*** describe 更新表** @param* @return* @author Jia wei Wu* @date 2022/1/2 7:48 下午**/
<T> T updateTable(@NonNull Class<?>... entityClasses);
参数说明
类型参数名描述
Class…entityClasses实体对象
updateTable 案例
    public static void main(String[] args) {LazyLambdaStream lazyLambdaStream = LazyLambdaStreamFactory.createLazyLambdaStream("127.0.0.1",3306,"acw","root","wujiawei");LazyDatabaseJsonMessage.lazyDataSourceType = DataSourceType.MySQL;// 更新表lazyLambdaStream.updateTable(Address.class);}
execute
    /*** 执行操作** @param persistenceRepository* @return*/
List<Object> execute(PersistenceRepository persistenceRepository);
参数说明
类型参数名描述
PersistenceRepositorypersistenceRepository预执行SQL需要的属性
execute 案例
// 使用相当灵活、想咋玩就咋玩
executeOne
    /*** 执行操作** @param persistenceRepository* @return*/
Object executeOne(PersistenceRepository persistenceRepository);
参数说明
类型参数名描述
PersistenceRepositorypersistenceRepository预执行SQL需要的属性
executeOne 案例
        public static void main(String[] args) {LazyLambdaStream lazyLambdaStream = LazyLambdaStreamFactory.createLazyLambdaStream("127.0.0.1",3306,"acw","root","wujiawei");PersistenceRepository persistenceRepository = PersistenceRepositoryFactory.create();persistenceRepository.setQueryString("select user.* from user where  user.age  >  18  and  user.sex  =  '男' limit 1");persistenceRepository.setExecutionType(LambdaTableType.SELECT);persistenceRepository.setResultClass(DataBaseUser.class);//  执行SQL: select user.* from user where  user.age  >  18  and  user.sex  =  '男' limit 1DataBaseUser dataBaseUser = (DataBaseUser) lazyLambdaStream.executeOne(persistenceRepository);System.out.println(dataBaseUser);
}

聪明懒人的操作接口

saveSqlFile
    /*** @param nameDatabase 数据库名 默认当前连接数据*                     System.getProperty("user.dir") 数据文件地址* @return 保存数据到本地数据* description 数据库数据存储到sql文件(删除表后、创建表 数据使用upsert)* @author Jiawei Wu* @date 2021/1/31 6:40 下午**/
void saveSqlFile(String nameDatabase);
参数说明
类型参数名描述
StringnameDatabase数据库名 默认当前连接数据
saveSoftSqlFile
    /*** @param nameDatabase 数据库名 默认当前连接数据*                     System.getProperty("user.dir") 数据文件地址* @return 保存数据到本地数据* description 柔和形 数据库数据存储到sql文件(表存在不删除 数据使用upsert)* @author Jiawei Wu* @date 2021/1/31 6:40 下午**/
void saveSoftSqlFile(String nameDatabase);
参数说明
类型参数名描述
StringnameDatabase数据库名 默认当前连接数据
saveUpsertSqlFile
    /*** describe  导出增量式更新数据** @param nameDatabase 数据库名 默认当前连接数据*                     System.getProperty("user.dir") 数据文件地址* @return 保存数据到本地数据* @author Jia wei Wu* @date 2022/4/9 22:57**/
void saveUpsertSqlFile(String nameDatabase);
参数说明
类型参数名描述
StringnameDatabase数据库名 默认当前连接数据
stuffed
    /*** 自动填充数据* SELECT* ** FROM* information_schema.COLUMNS* WHERE* TABLE_SCHEMA = 'lazy'* AND TABLE_NAME = 'sys_user';** @param schema 数据库* @param table  表* @param num    数量*/
void stuffed(String schema, String table, Long num);/*** 自动填充数据* SELECT* ** FROM* information_schema.COLUMNS* WHERE* TABLE_SCHEMA = 'lazy'* AND TABLE_NAME = 'sys_user';** @param table class 对应数据库结构的class* @param num   数量*/
void stuffed(Class table, Long num);
参数说明
类型参数名描述
Stringschema数据库名
Stringtable表名
Longnum数量
stuffedAll
    /*** 塞入所有数据** @param num*/
void stuffedAll(Long num);
参数说明
类型参数名描述
Longnum存储数据数量
stuffedJava
    /*** describe 根据表明创建出Java文件** @param schema    数据库* @param tableName 表名* @return* @author Jia wei Wu* @date 2022/1/23 12:23 上午**/
void stuffedJava(String schema, String tableName);
参数说明
类型参数名描述
Stringschema数据库
StringtableName表名
Gitee

点赞关注不迷路 项目地址

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

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

相关文章

[图像处理] MFC载入图片并进行二值化处理和灰度处理及其效果显示

文章目录 工程效果重要代码完整代码参考 工程效果 载入图片&#xff0c;并在左侧显示原始图片、二值化图片和灰度图片。 双击左侧的图片控件&#xff0c;可以在右侧的大控件中&#xff0c;显示双击的图片。 初始画面&#xff1a; 载入图片&#xff1a; 双击左侧的第二个控件…

设计模式学习笔记 - 设计模式与范式 -行为型:2.观察者模式(下):实现一个异步非阻塞的EventBus框架

概述 《1.观察者模式&#xff08;上&#xff09;》我们学习了观察者模式的原理、实现、应用场景&#xff0c;重点节介绍了不同应用场景下&#xff0c;几种不同的实现方式&#xff0c;包括&#xff1a;同步阻塞、异步非阻塞、进程内、进程间的实现方式。 同步阻塞最经典的实现…

Android进阶学习:移动端开发重点学习的十点,不能再得过且过的写业务代码了

最近有朋友问我&#xff1a;“安卓开发是不是没人要了&#xff0c;除了画 UI 别的都不会怎么办&#xff1f;” 考虑到这可能是很多人共同的疑问&#xff0c;决定简单写一下。 说了很多遍了&#xff0c;**不是安卓开发没人要了&#xff0c;是初级安卓没人要了。**现在还在大量…

ES的RestClient相关操作

ES的RestClient相关操作 Elasticsearch使用Java操作。 本文仅介绍CURD索引库和文档&#xff01;&#xff01;&#xff01; Elasticsearch基础&#xff1a;https://blog.csdn.net/weixin_46533577/article/details/137207222 Elasticsearch Clients官网&#xff1a;https://ww…

C#,按类型删除指定文件的工具软件

点击下载本文软件&#xff08;积分&#xff09;&#xff1a; https://download.csdn.net/download/beijinghorn/89059141https://download.csdn.net/download/beijinghorn/89059141 下载审核通过之前&#xff0c;请从百度网盘下载&#xff08;无积分&#xff09;&#xff1a;…

【Linux 10】环境变量

文章目录 &#x1f308; Ⅰ 命令行参数⭐ 1. main 函数的参数⭐ 2. main 函数参数的意义⭐ 3. 查看 argv 数组的内容⭐ 4. 命令行参数结论⭐ 5. 为什么要有命令行参数⭐ 6. 命令行参数传递由谁执行 &#x1f308; Ⅱ 环境变量基本概念⭐ 1. 常见环境变量 &#x1f308; Ⅲ 查看…

鸿蒙OS开发实战:【网络管理HTTP数据请求】

一、场景介绍 应用通过HTTP发起一个数据请求&#xff0c;支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。 二、 接口说明 HTTP数据请求功能主要由http模块提供。 使用该功能需要申请ohos.permission.INTERNET权限。 涉及的接口如下表&#xff0c;…

Unix中的进程和线程-1

目录 1.如何创建一个进程 2.如何终止进程 2.2遗言函数 3.进程资源的回收 4.孤儿进程和僵尸进程 孤儿进程 (Orphan Process)&#xff1a; 僵尸进程 (Zombie Process)&#xff1a; 代码示例&#xff1a; 5. 进程映像的更新 在Linux中&#xff0c;进程和线程是操作系统进行工作调…

保研线性代数机器学习基础复习2

1.什么是群&#xff08;Group&#xff09;&#xff1f; 对于一个集合 G 以及集合上的操作 &#xff0c;如果G G-> G&#xff0c;那么称&#xff08;G&#xff0c;&#xff09;为一个群&#xff0c;并且满足如下性质&#xff1a; 封闭性&#xff1a;结合性&#xff1a;中性…

从零开始的软件开发实战:互联网医院APP搭建详解

今天&#xff0c;笔者将以“从零开始的软件开发实战&#xff1a;互联网医院APP搭建详解”为主题&#xff0c;深入探讨互联网医院APP的开发过程和关键技术。 第一步&#xff1a;需求分析和规划 互联网医院APP的主要功能包括在线挂号、医生预约、医疗咨询、健康档案管理等。我们…

金融衍生品市场

金融衍生品市场 衍生金融品的作用衍生金融工具远期合约期货合约期权 衍生金融品的作用 套期保值&#xff08;Hedging&#xff09; 组合多头头寸(long position)与空头头寸(short position)例&#xff1a;股票与股指期货 投机 衍生金融工具 远期合约 定义&#xff1a;在将来…

论文笔记 - :MonoLSS: Learnable Sample Selection For Monocular 3D Detection

论文笔记✍MonoLSS: Learnable Sample Selection For Monocular 3D Detection &#x1f4dc; Abstract &#x1f528; 主流做法限制 &#xff1a; 以前的工作以启发式的方式使用特征来学习 3D 属性&#xff0c;没有考虑到不适当的特征可能会产生不利影响。 &#x1f528; 本…

Optimizer神经网络中各种优化器介绍

1. SGD 1.1 batch-GD 每次更新使用全部的样本&#xff0c;注意会对所有的样本取均值&#xff0c;这样每次更新的速度慢。计算量大。 1.2 SGD 每次随机取一个样本。这样更新速度更快。SGD算法在于每次只去拟合一个训练样本&#xff0c;这使得在梯度下降过程中不需去用所有训…

css3之3D转换transform

css3之3D转换 一.特点二.坐标系三.3D移动&#xff08;translate3d)1.概念2.透视&#xff08;perpective)(近大远小&#xff09;&#xff08;写在父盒子上&#xff09; 四.3D旋转&#xff08;rotate3d)1.概念2.左手准则3.呈现&#xff08;transfrom-style)&#xff08;写父级盒子…

智能革命:ChatGPT3.5与GPT4.0的融合,携手DALL·E 3和Midjourney开启艺术新纪元

迷图网(kk.zlrxjh.top)是一个融合了顶尖人工智能技术的多功能助手&#xff0c;集成了ChatGPT3.5、GPT4.0、DALLE 3和Midjourney等多种智能系统&#xff0c;为用户提供了丰富的体验。以下是对这些技术的概述&#xff1a; ChatGPT3.5是由OpenAI开发的一个自然语言处理模型&#x…

KeepAlived使用介绍

目录 1、Introduce 2、基本使用 &#xff08;1&#xff09;安装 &#xff08;2&#xff09;配置文件 &#xff08;3&#xff09;使用教程 1、Introduce keepalived是一个用于实现高可用性和负载均衡的开源软件。它提供了一种轻量级的方式来管理多个服务器&#xff0c;并确保…

使用Detours进行HOOK

文章目录 Detours介绍Detours配置Detours进行Sleep Hook Detours介绍 Detours是微软研究院开发的一款软件工具&#xff0c;用于Windows平台上的应用程序重定向和修改。 它可以在运行时修改应用程序的执行路径&#xff0c;允许开发人员注入自定义代码来改变应用程序的 行为&…

数据分析之Tebleau 的度量名称和度量值

度量名称 包含所有的维度 度量值 包含所有的度量 度量名称包含上面所有的维度&#xff0c;度量值包含上面所有的度量 当同时创建两个或两个以上度量或维度时&#xff0c;会自动创建度量名称和度量值 拖入省份为行(这会是还没有值的) 可以直接将销售金额拖到数值这里 或者将销售…

鸿蒙OS开发实例:【ArkTS类库多线程I/O密集型任务开发】

使用异步并发可以解决单次I/O任务阻塞的问题&#xff0c;但是如果遇到I/O密集型任务&#xff0c;同样会阻塞线程中其它任务的执行&#xff0c;这时需要使用多线程并发能力来进行解决。 I/O密集型任务的性能重点通常不在于CPU的处理能力&#xff0c;而在于I/O操作的速度和效率。…

上位机图像处理和嵌入式模块部署(qmacvisual寻找圆和寻找直线)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面有几篇文章&#xff0c;我们谈到过直线拟合、圆拟合和椭圆拟合。当时&#xff0c;我们的做法是&#xff0c;先找到了轮廓&#xff0c;接着找到…