【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: root
    password: root
    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    driver-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 {

    @Autowired
    LazyLambdaStream lazyLambdaStream;

    @Test
    public void testSelect() {
        System.out.println(("----- selectAll method test ------"));
        // 等同于执行sql select * from sys_user
        Collection<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: root
    password: root
    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    driver-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 {

    @LazyTableFieldId
    private 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.accessors
      enable-lombok-data: false  # 不允许 lombok.data
      package-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 1
    DataBaseUser 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 1
    DataBaseUser 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.mfbz.cn/a/490443.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JAVA 8 新特性Stream API

一、Stream API 概念 Stream API ( java.util.stream) 把真正的函数式编程风格引入到Java中。这 是目前为止对Java类库最好的补充&#xff0c;因为Stream API可以极大提供Java程序员的生产力&#xff0c;让程序员写出高效率、干净、简洁的代码。 Stream 是 Java8 中处理集合…

docker搭建zabbixx ,智能服务器监控运维平台(运维工程师必备)

安装阿里的docker源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sudo yum makecache fast 安装系统需要的工具 yum install -y bind-utils net-tools wget unzip yum install -y yum-utils device-mapper-persisten…

学习笔记Day17:转录组上游分析-1

转录组上游分析-1 作业&#xff1a; 取出fastq文件中的所有序列ID&#xff08;第一行&#xff09; less SRR1039510_1.fastq.gz | awk {if(NR%41){print $0}}less SRR1039510_1.fastq.gz | paste - - - - | cut -f 1 取出fastq文件中的所有序列&#xff08;第二行&#xff09;…

鸿蒙OS应用示例:【数字滚动计时】

实现效果&#xff1a; 代码示例&#xff1a; RollingText.ets 组件封装 RollingText.ets 组件封装 /*** 滚动文字特效*/ Component export default struct RollingText {private num:numberprivate timerId: number -1State counter: number 0aboutToAppear() {this.timerId…

【蓝桥杯】填空题技巧|巧用编译器|用Python处理大数和字符|心算手数|思维题

目录 一、填空题 1.巧用编译器 2.巧用Excel 3. 用Python处理大数 4.用Python处理字符 5.心算手数 二、思维题 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击跳转到网站】 一、填空题 …

做功能测试多年,想进阶自动化技术 ,该如何学习自动化测试呢 ?

1.什么是自动化测试 &#xff1f; 即三个自动化 &#xff1a; 代码修改自动触发自动化运行 、自动执行测试用例 、自动生成测试结果并发送团队 。 对技术的要求就是&#xff1a;自动化测试框架 持续集成工具 2. 企业为什么要做自动化 &#xff1f; 从企业的需求来看 &…

速看!2024广州国际服务机器人产业博览会

2024广州国际服务机器人产业博览会 时间&#xff1a;2024年12月19-21日 地点&#xff1a;中国进出口商品交易会琶洲展馆 近年来我国服务机器人智能化、个性化水平快速提升&#xff0c;使其需求领域不断扩展&#xff0c;销售额不断增长。尤其是疫情带动服务机器人需求增长&am…

MCGS学习——弹框报警

弹框报警的制作流程 先绘制一个弹框窗口&#xff0c;在弹框窗口里绘制弹框标志&#xff0c;记得绘制完成之后点击合成单元&#xff0c;此外&#xff0c;打开报警信息按钮中是打开报警界面 绘制好之后&#xff0c;如果我们想让弹窗出现在我们想让他出现的位置&#xff0c;那我…

Stata 15 for Mac:数据统计分析新标杆,让研究更高效!

Stata 是一种统计分析软件&#xff0c;适用于数据管理、数据分析和绘图。Stata 15 for Mac 具有以下功能&#xff1a; 数据管理&#xff1a;Stata 提供强大的数据管理功能&#xff0c;用户可以轻松导入、清洗、整理和管理数据集。 统计分析&#xff1a;Stata 提供了广泛的统计…

常见端口及对应服务

6379 redis未授权 7001、7002 weblogic默认弱口令、反序列化 9200、9300 elasticsearch 参考乌云&#xff1a;多玩某服务器ElasticSearch命令执行漏洞 11211 memcache未授权访问 50000 SAP命令执行 50070、50030 hadoop默认端口未授权访问

C/C++ 语言中的 ​if...else if...else 语句

C/C 语言中的 ​if...else if...else 语句 1. if statement2. if...else statement3. if...else if...else statementReferences 1. if statement The syntax of the if statement is: if (condition) {// body of if statement }The code inside { } is the body of the if …

【LLM】大模型推理加速 KV-Cache

目录 模型推理过程KV Cache原理KV Cache的存储 模型推理过程 在了解KVCache之前&#xff0c;我们需要知道Transformer类大模型的推理过程。 对于LLM进行一次前向传播也就是生成一个token的过程可以被分解成以下步骤&#xff1a; 文本 T i n p u t T_{input} Tinput​经过Toke…

C++中的string容器容量操作

以string容器为例&#xff0c;有多个容量操作 string容器文档&#xff1a;string - C Reference (cplusplus.com) 1.求大小&#xff1a;size() 求容器大小使用 size()&#xff0c;string容器还可以使用 length() &#xff08;推荐使用siez()&#xff0c;因为string产生比ST…

国家中英文名称、国家代码(地区代码)、国家域名、经纬度

因为要做世界地图对世界国家的标点&#xff0c;搜索使用到了世界各个国家的地理位置信息&#xff0c;此处做备份与学习。资源地址&#xff08;免费&#xff09; export default {"阿尔巴尼亚": {"m_longitude": "19.809","m_latitude&quo…

MyBatis是纸老虎吗?(七)

在上篇文章中&#xff0c;我们对照手动编写jdbc的开发流程&#xff0c;对MyBatis进行了梳理。通过这次梳理我们发现了一些之前文章中从未见过的新知识&#xff0c;譬如BoundSql等。本节我想继续MyBatis这个主题&#xff0c;并探索一下MyBatis中的缓存机制。在正式开始梳理前&am…

应急响应实战笔记04Windows实战篇(2)

第2篇&#xff1a;蠕虫病毒 0x00 前言 ​ 蠕虫病毒是一种十分古老的计算机病毒&#xff0c;它是一种自包含的程序&#xff08;或是一套程序&#xff09;&#xff0c;通常通过网络途径传播&#xff0c;每入侵到一台新的计算机&#xff0c;它就在这台计算机上复制自己&#xff…

MATLAB 自定义生成平面点云(可指定方向,添加噪声)(48)

MATLAB 自定义生成平面点云(可指定方向,添加噪声)(48) 一、算法介绍二、算法步骤三、算法实现1.代码2.效果一、算法介绍 通过这里的平面生成方法,可以生成模拟平面的点云数据,并可以人为设置平面方向,平面大小,并添加噪声来探索不同类型的平面数据。这种方法可以用于…

【Web世界探险家】HTML5 探索与实践

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &…

C语言(结构体,联合体,枚举的讲解)

这期我们来讲解结构体&#xff0c;联合体&#xff0c;以及枚举的讲解&#xff0c;首先我们从概念开始一步一步的了解。 1&#xff0c;结构体 1.1概念 C 语言中的结构体是一种用户自定义的数据类型&#xff0c;它允许你将不同类型的变量组合在一起&#xff0c;从而形成一个新…

《剑指 Offer》专项突破版 - 面试题 93 : 最长斐波那契数列(C++ 实现)

题目链接&#xff1a;最长斐波那契数列 题目&#xff1a; 输入一个没有重复数字的单调递增的数组&#xff0c;数组中至少有 3 个数字&#xff0c;请问数组中最长的斐波那契数列的长度是多少&#xff1f;例如&#xff0c;如果输入的数组是 [1, 2, 3, 4, 5, 6, 7, 8]&#xff0…