Stream-Query Stream-Query
首页
  • 项目初衷与诞生
  • 介绍
  • 快速上手
  • 目录结构
  • core模块

    • Opp
    • Sf
    • Map
    • Steam
    • TreeHelper
    • HighlightHelper
    • ReflectHelper
    • BeanHelper
  • plugin模块

    • Database
    • One
    • Many
    • OneToOne
    • OneToMany
  • 安装

    • 通过Maven安装
    • 通过Gradle安装
    • 下载jar安装
    • 通过源码编译
  • 动态mapper

    • 指定package
    • 指定注解
    • 指定接口
    • 指定实体类
  • 团队成员
  • dromara
  • 社区周边
  • 成为开发成员
  • 项目问题

    • 最新版本依赖下载失败
    • 项目编译报错
    • 如何贡献代码
    • 如何贡献文档
    • 使用本项目需要的前置知识
  • 其他问题

    • 作者是在全职维护开源吗
    • 你们这是个什么团队啊
    • 和其他类似的开源项目有什么区别
赞助
  • 1-5-0-alpha
  • 1-6-0-alpha
  • 1-7-0-alpha
  • 1-8-0
  • 1-9-0
  • 1-9-1
  • 2.0.0-alpha+001
  • 2.0.0-alpha+002
  • 2.0.2
Source (opens new window)
首页
  • 项目初衷与诞生
  • 介绍
  • 快速上手
  • 目录结构
  • core模块

    • Opp
    • Sf
    • Map
    • Steam
    • TreeHelper
    • HighlightHelper
    • ReflectHelper
    • BeanHelper
  • plugin模块

    • Database
    • One
    • Many
    • OneToOne
    • OneToMany
  • 安装

    • 通过Maven安装
    • 通过Gradle安装
    • 下载jar安装
    • 通过源码编译
  • 动态mapper

    • 指定package
    • 指定注解
    • 指定接口
    • 指定实体类
  • 团队成员
  • dromara
  • 社区周边
  • 成为开发成员
  • 项目问题

    • 最新版本依赖下载失败
    • 项目编译报错
    • 如何贡献代码
    • 如何贡献文档
    • 使用本项目需要的前置知识
  • 其他问题

    • 作者是在全职维护开源吗
    • 你们这是个什么团队啊
    • 和其他类似的开源项目有什么区别
赞助
  • 1-5-0-alpha
  • 1-6-0-alpha
  • 1-7-0-alpha
  • 1-8-0
  • 1-9-0
  • 1-9-1
  • 2.0.0-alpha+001
  • 2.0.0-alpha+002
  • 2.0.2
Source (opens new window)
  • 指南

    • 快速上手
    • 模块介绍
    • 项目初衷与诞生
  • core

    • Opp
    • Sf
    • TreeHelper
    • LighHight
    • LambdaHelper
    • Steam
    • Maps
    • ReflectHelper
    • BeanHelper
  • plugin

    • DataBase
      • 测试用例地址
    • One
    • Many
    • OneToOne
    • OneToMany
    • QueryCondition
    • safe-mode
  • 配置

  • 指南
  • plugin
臧臧
2023-04-18
目录

DataBase

# insertFewSql

(批量插入)以几条sql方式插入(批量)需要实现IMapper

在不满足参数二的情况下为单条sql,如果满足则进行分批插入

参数一:要进行插入的集合

参数二:更新批次数量(选填,默认值为500)(可选)

// list ==> 模拟实体对象集合

Database.insertFewSql(list);
// 此时的批量插入执行的是
INSERT INTO user_info ( id,name,age,email,version,gmt_deleted ) VALUES ( default, ?, default, default, default, default ) , ( default, ?, ?, ?, default, default )

Database.insertFewSql(list, 1);// 当有一个值的时候就对其进行分批插入,而不是一次全插入    
// 此时的sql为    
INSERT INTO user_info ( id,name,age,email,version,gmt_deleted ) VALUES ( default, ?, default, default, default, default )

INSERT INTO user_info ( id,name,age,email,version,gmt_deleted ) VALUES ( default, ?, ?, ?, default, default )

# save

单值插入

参数:entity

UserInfo entity = new UserInfo();
entity.setName("ruben");
Database.save(entity);
// 此时执行sql为
INSERT INTO user_info ( name ) VALUES ( ? )

# saveBatch

mp的循环插入(此方法为单值循环插入)

// list ==> 模拟实体对象集合
Database.saveBatch(list);
// 此时执行sql为
INSERT INTO user_info ( name ) VALUES ( ? )

INSERT INTO user_info ( name, age, email ) VALUES ( ?, ?, ? )

# updateFewSql

(批量更新)以几条sql方式更新(批量)需要实现IMapper

在不满足参数二的情况下为单条sql,如果满足则进行分批更新

参数一:要进行更新的集合

参数二:更新批次数量(选填,默认值为500)(可选)

// list ==> 模拟实体对象集合

Database.updateFewSql(list);
// 此时批量更新执行的sql
UPDATE user_info SET name=case id when ? then ? when ? then ? end, age=case id when ? then age when ? then age end, email=case id when ? then email when ? then email end, version=case id when ? then version when ? then version end WHERE id IN ( ? , ? ) AND gmt_deleted='2001-01-01 00:00:00'

# updateById

根据 ID 选择修改

参数: entity

UserInfo entity = new UserInfo();

entity.setId(1L);
entity.setName("bee bee I'm a sheep");

Database.updateById(entity);
// 此时执行sql为
UPDATE user_info SET name=? WHERE id=? AND gmt_deleted='2001-01-01 00:00:00'

# update

根据 whereEntity 条件,更新记录

参数一: 要更新成的entity(可选)

参数二:实体对象封装操作类(!当不写入参数一时,需要设置sqlset)

Database.update(Wrappers.lambdaUpdate(UserInfo.class).eq(UserInfo::getId, 1L).set(UserInfo::getName, "be better");

UserInfo entity = new UserInfo();
entity.setId(1L);
entity.setName("be better");
Database.update(entity, Wrappers.lambdaQuery(UserInfo.class).eq(UserInfo::getId, 1L));
// 此时两个语句执行的sql是一样的 ,都是这条sql    
UPDATE user_info SET name=? WHERE gmt_deleted='2001-01-01 00:00:00' AND (id = ?)

# updateBatchById

mp的根据entity的id批量更新

参数一:要进行更新的集合

参数二:更新批次数量(选填,默认值为500)(可选)

# updateForceById

强制根据id修改,指定的字段不管是否为null也会修改

参数一: 实体对象

参数二: 可变长参数SFunction操作 (传入clmbda指定要修改字段)

UserInfo sheep = new UserInfo();

sheep.setId(1L);
sheep.setName("bee bee I'm a sheep");

Database.updateForceById(sheep, UserInfo::getName, UserInfo::getAge);
// 即使我们当前对象中没有age也会将数据库对应id的age更新为null

# remove

根据 whereEntity 条件,删除记录

参数:实体对象封装操作类(!当不写入参数一时,需要设置sqlset)

Database.remove(Wrappers.lambdaQuery(UserInfo.class).eq(UserInfo::getId, 1L));

// 将UserInfo所对应的表中的id为1的数据进行删除

# removeById

重载方法

单参数:实体对象(根据实体对象ID删除)

双参数:

  • 参数一: 主键ID

  • 参数二: 实体类的Class对象

UserInfo entity = new UserInfo();
entity.setId(1L);

Database.removeById(entity);
// 两句话做的是同样的事情
Database.removeById(1L, UserInfo.class);

# removeByIds

根据主键id批量删除

  • 参数一: 主键ID或实体列表

  • 参数二: 操作实体类的Class对象

Database.removeByIds(Arrays.asList(1L, 2L), UserInfo.class);

// 将UserInfo所对应的表中的主键id为1,2的数据删除

# removeByMap

根据map删除数据

Database.removeByMap(Collections.singletonMap("id", 1L), UserInfo.class);

// 将UserInfo所对应的表中的字段名为id值为1的数据删除

# saveOrUpdate

保存或更新

  • 参数一: 要保存的对象

  • 参数二: 实体对象封装操作类

如果两个参数的话会根据updateWrapper尝试修改,否继续执行saveOrUpdate(T)方法

此次修改主要是减少了此项业务代码的代码量(存在性验证之后的saveOrUpdate操作)

Database.saveOrUpdate(entity);

// 如果当前的对象中id为null直接插入,如果不为null,并且数据存在就更新,如果数据不存在就进行插入

# getOne

获取一条数据

  • 参数一: 根据的queryWrapper对象

  • 参数二: 如果得到多条数据是否抛出异常 (默认为true)(选填)

!如果有多条数据的话想要随机取一条应当在queryWrapper中加上限制条件 queryWrapper.last("LIMIT 1")

!!!加了限制条件会有sql注入风险

LambdaQueryWrapper<UserInfo> wrapper = Wrappers.lambdaQuery(UserInfo.class);
Database.getOne(wrapper.eq(UserInfo::getAge,20));  // 此时如果有多个年龄等于20岁的用户就会抛出异常
Database.getOne(wrapper, false);  // 这样就不会抛出异常  

# listByMap

查询(根据 columnMap 条件)

Map<String, Object> map = new HashMap<>();
map.put("id", 1L);

List<UserInfo> list = Database.listByMap(map, UserInfo.class);
// 得到UserInfo所对应表中id为1的所有数据封装到list中

# listByIds

根据ids得到所对应的所有数据集合

Database.listByIds(Arrays.asList(1L, 2L), UserInfo.class);

// 得到UserInfo所对应表中id为1还有2的数据封装到list中

# getMap

根据 Wrapper,查询一条记录,并且将其字段名为key,值为value封装到map中返回

Database.getMap(Wrappers.lambdaQuery(UserInfo.class).eq(UserInfo::getAge,20));

// 得到UserInfo所对应表中age为20的数据封装到map中

# list

重载方法

  • 当传入参数为entity的Class对象时,是查询所有

  • 当传入参数为queryWrapper时,根据条件查询列表

Database.list(Wrappers.lambdaQuery(UserInfo.class).eq(UserInfo::getAge,20));
// 得到UserInfo所对应表中age为20的数据封装到list中

Database.list(UserInfo.class);
// 得到UserInfo所对应表中所有数据封装到list中

# listMaps

重载方法

  • 当传入参数为entity的Class对象时,是查询所有数据将其单条数据封装成map之后再封装到list中

  • 当传入参数为queryWrapper时,根据条件查询列表将其单条数据封装成map之后再封装到list中

Database.listMaps(Wrappers.lambdaQuery(UserInfo.class).eq(UserInfo::getAge,20));
// 得到UserInfo所对应表中age为20的数据,将其单条数据封装成map之后再封装到list中

Database.listMaps(UserInfo.class);
// 得到UserInfo所对应表中所有数据,将其单条数据封装成map之后再封装到list中

# listObjs

重载方法

一个参数时

  • 当传入参数为entity的Class对象时,是查询所有封装到list中

两个参数时

  • 如果第一个参数为entity的Class对象时,是查询所有数据然后得到第二个参数传入的SFunction操作映射到list中
  • 如果第一个参数为queryWrapper时,根据条件查询列表然后得到第二个参数传入的SFunction操作映射到list中
Database.listObjs(UserInfo.class);
// 得到UserInfo所对应表中所有数据封装到list中

Database.listObjs(Wrappers.lambdaQuery(UserInfo.class).eq(UserInfo::getAge,20), UserInfo::getId);
// 得到UserInfo所对应表中所有age为20的数据将其所有的id封装到list中

Database.listObjs(UserInfo.class, UserInfo::getName);
// 得到UserInfo所对应表中所有数据将其所有的name封装到list中

# pageMaps

分页查询

重载方法:第一个参数都为分页对象

  • 第二个参数如果为entity的Class对象那么就进行无条件分页查询
  • 第二个参数如果为queryWrapper那么就进行条件分页查询

其中分页里的records不是实体对象而是其字段名和值封装成的map

Database.pageMaps(new Page<>(1, 1), UserInfo.class);
// 就是进行分页封装里边的records是map而已

# page

分页查询

重载方法:第一个参数都为分页对象

  • 第二个参数如果为entity的Class对象那么就进行无条件分页查询
  • 第二个参数如果为queryWrapper那么就进行条件分页查询

这个里边封装的是实体对象

Database.page(new Page<>(1, 1), UserInfo.class);
// 常规分页查询

Database.page(new Page<>(1, 1), Wrappers.lambdaQuery(UserInfo.class).eq(UserInfo::getAge,20));
// 根据条件分页查询

# getObj

根据 Wrapper,查询一条记录,并对其进行转换操作

参数一: 条件

参数二: 传入的SFunction操作

Database.getObj(Wrappers.lambdaQuery(UserInfo.class).eq(UserInfo::getId, 1L), UserInfo::getName);
// 得到UserInfo所对应表中id为1的数据,并进行映射操作

# 测试用例地址

DataBaseTest (opens new window)

上次更新: 2024/03/29, 09:17:32
BeanHelper
One

← BeanHelper One→

Theme by Vdoing | Copyright © 2023-2024 阿超 | Apache License, Version 2.0
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式