【Lazy ORM 框架学习】
Gitee
点赞关注不迷路 项目地址
快速入门
模块 | 所属层级 | 描述 | 快照版本 | 正式版本 |
---|---|---|---|---|
wu-database-lazy-lambda | lambda | 针对不同数据源 | ![]() | ![]() |
wu-database-lazy-orm-core | orm 核心 | orm核心处理 | ![]() | ![]() |
wu-database-lazy-sql | sql核心处理成 | 处理sql解析、sql执行、sql映射 | ![]() | ![]() |
wu-elasticsearch-starter | ES | ES | ![]() | ![]() |
wu-hbase-starter | hbase | hbase | ![]() | ![]() |
wu-database-lazy-datasource-starter | 数据源处理 | 数据源处理 | ![]() | ![]() |
简介
特性
- 强大的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 表,其表结构如下:
id | name | annual_salary | |
---|---|---|---|
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 |
其对应的数据库 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;
}
属性 | 类型 | 必须指定 | 默认值 | 描述 |
---|---|---|---|---|
tableName | String | 否 | “” | 表名 |
schema | String | 否 | “” | schema |
comment | String | 否 | “” | 表注释 |
perfectTable | boolean | 否 | “false” | 完善表 |
smartFillField | boolean | 否 | false | 智能填充bean属性 针对数据源 如mysql查询结果、http请求结果中包含的数据字段不再当前对象中 |
@LazyTableFieldId
@LazyTable(tableName = "sys_user")
public class User {@LazyTableFieldIdprivate Long id;private String name;private Integer annualSalary;private String email;
}
属性 | 类型 | 必须指定 | 默认值 | 描述 |
---|---|---|---|---|
value | String | 否 | “” | 字段名 |
name | String | 否 | “” | 字段名 |
comment | String | 否 | “” | 字段注释 |
type | String | 否 | “” | 字段了类型(varchar、int等) |
indexType | LayerField.LayerFieldType | 否 | LayerField.LayerFieldType.ID | 索引类型 |
idType | IdType | 否 | AUTOMATIC_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;
}
属性 | 类型 | 必须指定 | 默认值 | 描述 |
---|---|---|---|---|
value | String | 否 | “” | 字段名 |
name | String | 否 | “” | 字段名 |
comment | String | 否 | “” | 字段注释 |
columnType | String | 否 | “” | 字段了类型(varchar、int等) |
exist | boolean | 否 | true | 是否存在 |
indexType | LayerField.LayerFieldType | 否 | LayerField.LayerFieldType.ID | 索引类型 |
idType | IdType | 否 | AUTOMATIC_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);
参数说明
类型 | 参数名 | 描述 |
---|---|---|
T | t | 实体对象 |
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);
参数说明
类型 | 参数名 | 描述 |
---|---|---|
Page | lazyPage | 分页对象 |
Class | returnType | 返回数据类型 |
String | sql | 执行的sql语句 |
Object… | params | sql执行参数 |
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);
参数说明
类型 | 参数名 | 描述 |
---|---|---|
Class | t | 返回数据类型 |
String | sql | 执行的sql语句 |
Object… | params | sql执行参数 |
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);
参数说明
类型 | 参数名 | 描述 |
---|---|---|
Class | t | 返回数据类型 |
String | sql | 执行的sql语句 |
Object… | params | sql执行参数 |
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);
参数说明
类型 | 参数名 | 描述 |
---|---|---|
PersistenceRepository | persistenceRepository | 预执行SQL需要的属性 |
execute 案例
// 使用相当灵活、想咋玩就咋玩
executeOne
/*** 执行操作** @param persistenceRepository* @return*/
Object executeOne(PersistenceRepository persistenceRepository);
参数说明
类型 | 参数名 | 描述 |
---|---|---|
PersistenceRepository | persistenceRepository | 预执行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);
参数说明
类型 | 参数名 | 描述 |
---|---|---|
String | nameDatabase | 数据库名 默认当前连接数据 |
saveSoftSqlFile
/*** @param nameDatabase 数据库名 默认当前连接数据* System.getProperty("user.dir") 数据文件地址* @return 保存数据到本地数据* description 柔和形 数据库数据存储到sql文件(表存在不删除 数据使用upsert)* @author Jiawei Wu* @date 2021/1/31 6:40 下午**/
void saveSoftSqlFile(String nameDatabase);
参数说明
类型 | 参数名 | 描述 |
---|---|---|
String | nameDatabase | 数据库名 默认当前连接数据 |
saveUpsertSqlFile
/*** describe 导出增量式更新数据** @param nameDatabase 数据库名 默认当前连接数据* System.getProperty("user.dir") 数据文件地址* @return 保存数据到本地数据* @author Jia wei Wu* @date 2022/4/9 22:57**/
void saveUpsertSqlFile(String nameDatabase);
参数说明
类型 | 参数名 | 描述 |
---|---|---|
String | nameDatabase | 数据库名 默认当前连接数据 |
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);
参数说明
类型 | 参数名 | 描述 |
---|---|---|
String | schema | 数据库名 |
String | table | 表名 |
Long | num | 数量 |
stuffedAll
/*** 塞入所有数据** @param num*/
void stuffedAll(Long num);
参数说明
类型 | 参数名 | 描述 |
---|---|---|
Long | num | 存储数据数量 |
stuffedJava
/*** describe 根据表明创建出Java文件** @param schema 数据库* @param tableName 表名* @return* @author Jia wei Wu* @date 2022/1/23 12:23 上午**/
void stuffedJava(String schema, String tableName);
参数说明
类型 | 参数名 | 描述 |
---|---|---|
String | schema | 数据库 |
String | tableName | 表名 |
Gitee
点赞关注不迷路 项目地址
相关文章:

【Lazy ORM 框架学习】
Gitee 点赞关注不迷路 项目地址 快速入门 模块所属层级描述快照版本正式版本wu-database-lazy-lambdalambda针对不同数据源wu-database-lazy-orm-coreorm 核心orm核心处理wu-database-lazy-sqlsql核心处理成处理sql解析、sql执行、sql映射wu-elasticsearch-starterESESwu-hb…...

安科瑞路灯安全用电云平台解决方案【电不起火、电不伤人】
背景介绍 近年来 ,随着城市规模的不断扩大 ,路灯事业蓬勃发展。但有的地方因为观念、技术、管理等方面不完善 ,由此引发了一系列安全问题。路灯点多面广 ,一旦漏电就极容易造成严重的人身安全事故。不仅给受害者家庭带来痛苦 &am…...

MYSQL——索引概念索引结构
索引 索引是帮助数据库高效获取数据的排好序的数据结构。 有无索引时,查询的区别 主要区别在于查询速度和系统资源的消耗。 查询速度: 在没有索引的情况下,数据库需要对表中的所有记录进行扫描,以找到符合查询条件的记录&#…...

Linux(CentOS7)配置系统服务以及开机自启动
目录 前言 两种方式 /etc/systemd/system/ 进入 /etc/systemd/system/ 文件夹 创建 nginx.service 文件 重新加载 systemd 配置文件 编辑 配置开机自启 /etc/init.d/ 进入 /etc/init.d/ 文件夹 创建 mysql 文件 编写脚本内容 添加/删除系统服务 配置开机自启 …...

0 决策树基础
目录 1 绪论 2 模型 3 决策树面试总结 1 绪论 决策树算法包括ID3、C4.5以及C5.0等,这些算法容易理解,适用各种数据,在解决各种问题时都有良好表现,尤其是以树模型为核心的各种集成算法,在各个行业和领域都有广泛的…...

Linux速览(2)——环境基础开发工具篇(其一)
本章我们来介绍一些linux的常用工具 目录 一. Linux 软件包管理器 yum 1.什么是软件包? 2. 查看软件包 3. 如何安装软件 4. 如何卸载软件 5.yum补充 6. 关于 rzsz 二. Linux编辑器-vim使用 1. vim的基本概念 2. vim的基本操作 3. vim正常模式命令集 4. vim末行模式…...

AWS SES发送邮件时常见的错误及解决方法?
AWS SES发送邮件如何做配置?使用AWS SES发信的限制? 在使用AWS SES发送邮件时,可能会遇到一些常见的错误。AokSend将介绍一些常见的AWS SES发送邮件错误及其相应的解决方法,帮助用户更好地利用AWS SES进行邮件发送。 AWS SES发送…...
视频基础学习三——视频帧率、码率与分辨率
文章目录 前言一、介绍1.定义2.三者之间的关系 总结 前言 在之前的文章中详细介绍了一些关于图像的色彩与格式,而视频其实就是由一张张图片进行展示呈现出来的。 我们会经常说一段视频的质量好不好,而什么是视频的质量呢?博主的个人理解就是…...

Spring(详细介绍)
目录 一、简介 1、什么是Spring? 2、Spring框架的核心特性 3、优点 二、IOC容器 介绍 1、获取资源的传统方式 2、控制反转方式获取资源 3、DI 4、IOC容器在Spring中的实现 入门案例 1、创建Maven Module 2、引入依赖 3、创建HelloWorld类 4、在Spring的配…...

Kettle使用
1.准备工作 KETTLE-5.4.zip HANA环境192.168.xx.xx 用户名:system 密码:****** 端口号:30015 Oracle环境 192.168.xx.xx 用户名 HANA_TEST 密码 ****** 端口号:31001 配置java环境变量 因为本次数据转换测试为将HANA数据转换到Or…...
互联网摸鱼日报(2024-04-01)
互联网摸鱼日报(2024-04-01) 36氪新闻 「矽迪半导体」获数千万天使轮融资,提供高效功率半导体方案|硬氪首发 本周双碳大事:国资委即将发布央企ESG指导意见;上海发文推动建立产品碳足迹管理体系;隆基新硅片面世 数字…...

pnpm比npm、yarn好在哪里?
前言 pnpm对比npm/yarn的优点: 更快速的依赖下载更高效的利用磁盘空间更优秀的依赖管理 我们按照包管理工具的发展历史,从 npm2 开始讲起: npm2 使用早期的npm1/2安装依赖,node_modules文件会以递归的形式呈现,严格…...
大前端-postcss安装使用指南
PostCSS 是一款强大的 CSS 处理工具,可以用来自动添加浏览器前缀、代码合并、代码压缩等,提升代码的可读性,并支持使用最新的 CSS 语法。以下是一份简化的 PostCSS 安装使用指南: 一、安装 PostCSS 在你的项目目录中,…...

全局UI方法-弹窗三-文本滑动选择器弹窗(TextPickDialog)
1、描述 根据指定的选择范围创建文本选择器,展示在弹窗上。 2、接口 TextPickDialog(options?: TextPickDialogOptions) 3、TextPickDialogOptions 参数名称 参数类型 必填 参数描述 rang string[] | Resource 是 设置文本选择器的选择范围。 selected nu…...
LibreOffice 将word,excel,PowerPoint文件转换PDF
安装LibreOffice并将Word和Excel文件转换为PDF文件,并设置文件存放路径的步骤如下: 1. 安装LibreOffice 如果尚未安装LibreOffice,可以通过以下命令在Ubuntu上安装: sudo apt update sudo apt install libreoffice 2. 使用Li…...

鱼眼相机的测距流程及误差分析[像素坐标系到空间一点以及测距和误差分析]
由于最近在整理单目测距的内容,顺手也总结下鱼眼相机的测距流程和误差分析,如果有错误,还请不吝赐教。 参考链接: 鱼眼镜头的成像原理到畸变矫正(完整版) 相机模型总结(针孔、鱼眼、全景) 三维…...
谈谈Python中的列表、元组、字典和集合的主要区别和用法
谈谈Python中的列表、元组、字典和集合的主要区别和用法 Python是一种功能强大且易于学习的编程语言,它提供了多种数据结构来支持各种编程需求。其中,列表(list)、元组(tuple)、字典(dictionar…...
【WPF应用24】C#中的Image控件详解与应用示例
在C#应用程序开发中,图像显示是一个常见的需求。无论是创建图形界面还是处理图像数据,System.Windows.Controls.Image控件都是实现这一目标的重要工具。本文将详细介绍Image控件的功能、用法、优化技巧以及一些实际应用示例,帮助开发者更好地…...

CTF题型 php://filter特殊编码绕过小汇总
CTF题型 php://filter特殊编码绕过小汇总 文章目录 CTF题型 php://filter特殊编码绕过小汇总特殊编码base64编码string过滤器iconv字符集 例题1.[Newstarctf 2023 week2 include]2.[Ctfshow web 117] php://filter 是一个伪协议,它允许你读取经过过滤器处理的数据流…...

【嵌入式智能产品开发实战】(十二)—— 政安晨:通过ARM-Linux掌握基本技能【C语言程序的安装运行】
目录 程序的安装 程序安装的本质 在Linux下制作软件安装包 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 嵌入式智能产品开发实战 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...