文章目錄
- Hutool工具包Vo與entity轉換
- 多表分頁查詢
- 構造器:查詢
- 構造器:拼接
- 構造器:刪除操作
- 構造器:修改操作
- 查詢關鍵字
Hutool工具包Vo與entity轉換
BeanUtils:copyProperties(vo, entity),vo轉實體類。
LambdaQueryWrapper 構造不同類型的查詢條件,
orderByDesc 方法用于降序排序。
需要注意:
? 使用 LambdaQueryWrapper 時,實體類 和 **數據庫表 **之間映射關系。
實體類必須使用 @TableName 注解,指定表名。
多表分頁查詢
IPage<DeviceItemResp> devicePages = tDevicesMapper.selectJoinPage(userPage, DeviceItemResp.class,new MPJLambdaWrapper<TDevices>().select(TDevices::getSn) // 查詢出指定字段.select(TDevices::getName).selectAs(TDevices::getBlueContent, DeviceItemResp::getBluetooth).innerJoin(TuserDevice.class, TuserDevice::getDeviceSn, TDevices::getSn).eq(TuserDevice::getUserId, userId).orderByDesc(TDevices::getCreateDate));// new MPJLambdaWrapper<TDevices>():
// MPJLambdaWrapper 是一個條件構造器,用于構建查詢條件。
// new MPJLambdaWrapper<TDevices>() 創建了一個 TDevices 實體類的條件構造器對象。
// .selectAs() 方法用于指定查詢的字段,并將其作為另一個字段的別名。這里使用 TDevices::getBlueContent 方法引用來查詢 TDevices 實體類的 blueContent 字段,并將其作為 DeviceItemResp 類中的 bluetooth 字段的別名。/*** .selectAs() 方法用于指定查詢的字段,并將其作為另一個字段的別名。* 這里使用 TDevices::getBlueContent 方法引用來查詢 TDevices 實體類的 blueContent 字段,并將其作為 DeviceItemResp 類中的 bluetooth 字段的別名。** .innerJoin() 方法用于指定聯合查詢的表和關聯條件。這里使用 TuserDevice.class 表示聯合查詢的表是 TuserDevice,并通過 TuserDevice::getDeviceSn 和 TDevices::getSn 方法引用來指定關聯條件。** .eq() 方法指定查詢的相等條件,這里使用 TuserDevice::getUserId 方法引用來查詢 TuserDevice 表中的 userId 字段,并與變量 userId 進行相等比較。** .orderByDesc() 按照 createDate 字段進行降序排序。** 以上就是這段代碼的詳細解釋。它主要實現了一個聯合查詢,并通過條件構造器指定了查詢字段、關聯表和條件,并對結果進行了分頁和排序。*/
構造器:查詢
// 簡化構造器LambdaQueryWrapper<ThingInfoPO> lambdaQueryWrapper =Wrappers.lambdaQuery(類.class).eq(類::getCode, code);// 1、根據指定條件進行查詢一條記錄。
LambdaQueryWrapper<SaveDevice> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(SaveDevice::getDeviceUid, registerDTO.getDeviceUid());SaveDevice saveDevice = saveDeviceMapper.selectOne(queryWrapper);// 1.1 查詢指定名稱的用戶列表
List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getName, "John").orderByDesc(User::getAge));// 1.2 批量查詢LambdaQueryWrapper<PlantLabelConfigPo> queryWrapper =Wrappers.lambdaQuery(PlantLabelConfigPo.class).in(PlantLabelConfigPo::getId, listLabelId);// 1.3 查詢出指定字段,修改時間不在某個區間的值。
LocalDateTime now = LocalDateTime.now();LocalDateTime localDateTime = now.minusHours(1);Date oneHourBefore = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());this.listObjs(new LambdaQueryWrapper<DeviceDetailLowFrequency>().notBetween(DeviceDetailLowFrequency::getUpdateTime, oneHourBefore, new Date()).select(DeviceDetailLowFrequency::getSn), Object::toString);
構造器:拼接
// 1、構造器拼接SQL語句
LambdaQueryWrapper<ThingInfoPO> wrapper =buildThingInfoQuery(tenantId).eq(ThingInfoPO::getCode, thing.getCode());// 2、拼接構造條件
private LambdaQueryWrapper<ThingInfoPO> buildThingInfoQuery(@Nullable Long tenantId) {LambdaQueryWrapper<ThingInfoPO> wrapper = new QueryWrapper<ThingInfoPO>().lambda();if (tenantId != null) {wrapper.eq(ThingInfoPO::getTenantId, tenantId);}return wrapper;}
構造器:刪除操作
// 1、刪除所有名字為 Jack 的用戶記錄
int rows = userMapper.delete(new LambdaQueryWrapper<User>().eq(User::getName, "Jack"));// 2、批量刪除
LambdaQueryWrapper<PlantLabelInfoPo> wrapper = new QueryWrapper<PlantLabelInfoPo>().lambda();wrapper.in(PlantLabelInfoPo::getPlantLabelId, idList);plantLabelInfoDao.delete(wrapper);
構造器:修改操作
// 更新所有名字為 John 的用戶記錄,設置年齡為 30
int rows = userMapper.update(new User(), new LambdaQueryWrapper<User>().eq(User::getName, "John").set(User::getAge, 30));// 根據指定條件進行修改。
UpdateWrapper<SaveDevice> wrapper = new UpdateWrapper<>();wrapper.eq("device_uid", registerDTO.getDeviceUid());wrapper.set("psk", psk);
saveDeviceMapper.update(null, wrapper);// 更新多個字段.
LambdaUpdateWrapper<DeviceDetail> updateWrapper = new LambdaUpdateWrapper<>();updateWrapper.eq(DeviceDetail::getSn, req.getSn());deviceDetail.setUpdateBy(CurrentUser.getUser());deviceDetail.setUpdateTime(new Date());// 更新實體類中所有字段,會覆蓋數據庫字段。謹慎使用。
deviceDetailMapper.update(new DeviceDetail(), updateWrapper);
查詢關鍵字
查詢方式 | 說明 |
---|---|
setSqlSelect | 設置 SELECT 查詢字段 |
where | WHERE 語句,拼接 +?WHERE 條件 |
and | AND 語句,拼接 +?AND 字段=值 |
andNew | AND 語句,拼接 +?AND (字段=值) |
or | OR 語句,拼接 +?OR 字段=值 |
orNew | OR 語句,拼接 +?OR (字段=值) |
eq | 等于 = |
allEq | 基于 map 內容等于 = |
ne | 不等于 <> |
gt | 大于 > |
ge | 大于等于 >= |
lt | 小于 < |
le | 小于等于 <= |
like | 模糊查詢 LIKE |
notLike | 模糊查詢 NOT LIKE |
in | IN 查詢 |
notIn | NOT IN 查詢 |
isNull | NULL 值查詢 |
isNotNull | IS NOT NULL |
groupBy | 分組 GROUP BY |
having | HAVING 關鍵詞 |
orderBy | 排序 ORDER BY |
orderAsc | ASC 排序 ORDER BY |
orderDesc | DESC 排序 ORDER BY |
exists | EXISTS 條件語句 |
notExists | NOT EXISTS 條件語句 |
between | BETWEEN 條件語句 |
notBetween | NOT BETWEEN 條件語句 |
addFilter | 自由拼接 SQL |
last | 拼接在最后,例如:last(“LIMIT 1”) |
/*** 屏幕尺寸*/
@Max(message = "尺寸最大值不超過10", value = 10)
@Min(message = "尺寸最小值不低于4", value = 4)
private Integer screenSize;/*** 運行的系統平臺*/@EnumVale(value = {"system_linux", "system_android", "system_none"}, message = "運行的系統平臺不允許填入其他值")@NotBlank(message = "運行的系統平臺數據不為空")private String system;// 使用Sa-token實現單點登錄
QueryDSL僅僅是一個通用的查詢框架,專注于通過 JavaAPI 構建類型安全的 Sql 查詢,也可以說 QueryDSL 是基于各種 ORM 框架以及 Sql 之上的一個通用的查詢框架,QueryDSL 的查詢,類是于 SQL 查詢,很全面只不過一個是用 SQL 一個是用代碼來代替 SQL。