wu-database-lazy-starter
快速入门
简介
特性
- 强大的CRUD操作:内置通过注入 LazyLambdaStream 对象即可实现表单的大部分CRUD操作
 - 支持Lambda形式的调用: 通过Lambda表达式,方便的编写各类查询条件
 - 内置分页查询:通过构造分页对象查询数据统计分页总数
 - 支持多种数据库:支持MySQL
 
支持数据库
任何能使用 LazyLambdaStream进行CRUD,并且支持标准SQL的数据库,具体支持情况如下
- MySQL
 
框架架构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ld6IYcWW-1651417423066)(img.png)]
代码托管
Gitee|Github
参与贡献
欢迎各位同学一起参与完善wu-database-lazy-starter
- 贡献代码:代码地址wu-database-lazy-starter,欢迎提交Issue或者Pull Requests
 
教程、案例、使用者名单
- 暂无
 
版本功能
-  
Lazy-DB 是一款针对懒人快速开发的ORM框架
 -  
支持实体类反射数据进行数据库CRUD操作
 -  
新增灵性数据插入更新(自动过滤空值)
 -  
新增配置导出数据忽略指定字段
spring.datasource.ignore-exported-fields: - id -  
新增配置声明导出数据中的特殊字符
spring.datasource.special-fields: - ASC -  
新增@LazyScan自动扫描实体创建表
 -  
新增自动填充表数据
 -  
新增创建表方法
 -  
新增更新表字段方法
 -  
修复数据插入布尔类型、数字类型字段 字符串更改为->原始数据类型
 -  
新增逆向工程功能生成对应的Java class 支持mybatis 适配
 -  
使用Spring 进行事物管理
 -  
修复数据为null 时执行sql 数据为 “null” 问题
 -  
新增自动过滤null字段的upsert接口
 
快速开始
我们将通过一个简单的 Demo 来阐述 wu-database-lazy-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-database-lazy-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-database-lazy-starter</artifactId>
        <version>1.0.8-JDK1.8</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 ------"));
        Collection<User> userList = lazyLambdaStream.select(LazyWrappers.<User>lambdaWrapper()).collection();
        Assert.assertEquals(5, userList.size());
        userList.forEach(System.out::println);
    }
}
 
小结
通过以上几个简单的步骤,我们就实现了 User 表的 CRUD 功能,甚至连 XML 文件都不用编写!
安装
全新的 wu-database-lazy-starter 1.0.8-JDK1.8 版本基于 JDK8,提供了 lambda 形式的调用,所以安装集成 MP3.0 要求如下:
- JDK 8+
 - Maven or Gradle
 
Spring Boot
Maven:
    <dependency>
        <groupId>top.wu2020</groupId>
        <artifactId>wu-database-lazy-starter</artifactId>
        <version>1.0.8-JDK1.8</version>
    </dependency>
 
配置
wu-database-lazy-starter 的配置异常的简单,我们仅需要一些简单的配置即可使用 wu-database-lazy-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-database-lazy-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 {
    
    @LazyTableFieldId
    private 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-database-lazy-starter 测试所需相关配置。
示例工程
源码:👉 wu-database-lazy-starter-simple(opens new window)
使用教程
添加测试依赖
Maven:
<dependency>
    <groupId>top.wu2020</groupId>
    <artifactId>wu-database-lazy-starter</artifactId>
    <version>1.0.8-JDK1.8</version>
</dependency>
 
Gradle:
compile group: 'top.wu2020', name: 'wu-database-lazy-starter', version: '1.0.8-JDK1.8'
 
编写测试用例
    @Autowired
    private LazyOperation lazyOperation;
    /**
     * 用户信息简单插入
     */
    @ApiOperation("用户信息简单插入")
    @PostMapping("/lazy/upsert")
    public void lazyUpsert() {
        SysUser sysUser = new SysUser();
        sysUser.setUsername("小来");
        sysUser.setPassword("1234");
        sysUser.setId(1L);
        lazyOperation.upsert(sysUser);
    }
 
核心功能
代码生成器
快速开始
安装
<dependency>
    <groupId>top.wu2020</groupId>
    <artifactId>wu-database-lazy-starter</artifactId>
    <version>1.0.8-JDK1.8</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: com.wu.lazy  # 包名
      enable-swagger: false  # 不允许 swagger
 
使用
启动Spring-boot的启动类即可
CRUD 接口
upsert
    /**
     * 批量更新或插入
     *
     * @param objects
     * @param <T>
     */
    <T> void upsert(Object... objects);
 
参数说明
| 类型 | 参数名 | 描述 | 
|---|---|---|
| Object… | objects | 任意实体对象 | 
insert
    /**
     * 插入 单个/list
     *
     * @param t
     * @param <T>
     */
    <T> void insert(T t);
 
参数说明
| 类型 | 参数名 | 描述 | 
|---|---|---|
| T | t | 实体对象 | 
smartUpsert
  /**
     * 更新或者插入单个 去除空值、对比表
     * 多个数据性能会慢,不经常使用
     */
    Object smartUpsert(Object... t);
 
参数说明
| 类型 | 参数名 | 描述 | 
|---|---|---|
| Object… | t | 任意实体对象 | 
upsertRemoveNull
  /**
     * 更新或者插入单个执行 去除空值
     * 多个数据性能会慢,不经常使用
     */
    Object upsertRemoveNull(Object... t);
 
参数说明
| 类型 | 参数名 | 描述 | 
|---|---|---|
| Object… | t | 任意实体对象 | 
page
    /**
     * 分页查询
     *
     * @param <T>
     * @return
     */
    <T> Page<T> page(@NonNull Page page, @NonNull Class returnType, String sql, Object... params);
 
参数说明
| 类型 | 参数名 | 描述 | 
|---|---|---|
| Page | page | 分页对象 | 
| Class | returnType | 返回数据类型 | 
| String | sql | 执行的sql语句 | 
| Object… | params | sql执行参数 | 
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执行参数 | 
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执行参数 | 
perfect
      /**
     * describe 完善表
     *
     * @param entityClasss class 对象数组
     * @return
     * @author Jia wei Wu
     * @date 2022/1/2 5:05 下午
     **/
    <T> T perfect(@NonNull Class... entityClasss);
 
参数说明
| 类型 | 参数名 | 描述 | 
|---|---|---|
| Class… | entityClasss | 实体对象 | 
createTable
    /**
     * describe 创建表
     *
     * @param
     * @return
     * @author Jia wei Wu
     * @date 2022/1/2 7:48 下午
     **/
    <T> T createTable(@NonNull Class... entityClasss);
 
参数说明
| 类型 | 参数名 | 描述 | 
|---|---|---|
| Class… | entityClasss | 实体对象 | 
updateTable
    /**
     * describe 更新表
     *
     * @param
     * @return
     * @author Jia wei Wu
     * @date 2022/1/2 7:48 下午
     **/
    <T> T updateTable(@NonNull Class... entityClasss);
 
参数说明
| 类型 | 参数名 | 描述 | 
|---|---|---|
| Class… | entityClasss | 实体对象 | 
execute
    /**
     * 执行操作
     *
     * @param persistenceRepository
     * @return
     */
    List<Object> execute(PersistenceRepository persistenceRepository);
 
参数说明
| 类型 | 参数名 | 描述 | 
|---|---|---|
| PersistenceRepository | persistenceRepository | 预执行SQL需要的属性 | 
executeOne
    /**
     * 执行操作
     *
     * @param persistenceRepository
     * @return
     */
    Object executeOne(PersistenceRepository persistenceRepository);
 
参数说明
| 类型 | 参数名 | 描述 | 
|---|---|---|
| PersistenceRepository | persistenceRepository | 预执行SQL需要的属性 | 
聪明懒人的操作接口
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 | 表名 | 










