mirror of
https://gitee.com/best_handsome/mybatis-plus-join
synced 2025-07-11 00:02:22 +08:00
优化代码
This commit is contained in:
parent
8495c7c153
commit
6a5983aad4
@ -1,5 +1,8 @@
|
|||||||
package com.github.yulichang.adapter.base.tookit;
|
package com.github.yulichang.adapter.base.tookit;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.MybatisPlusVersion;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 版本工具类
|
* 版本工具类
|
||||||
*
|
*
|
||||||
@ -8,8 +11,24 @@ package com.github.yulichang.adapter.base.tookit;
|
|||||||
*/
|
*/
|
||||||
public class VersionUtils {
|
public class VersionUtils {
|
||||||
|
|
||||||
|
public static String version = MybatisPlusVersion.getVersion();
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public static void setMybatisPlusVersion(String version) {
|
||||||
|
VersionUtils.version = version;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getVersion() {
|
||||||
|
if (version != null) {
|
||||||
|
return version;
|
||||||
|
} else {
|
||||||
|
throw ExceptionUtils.mpe("mybatis-plus version is blank, " +
|
||||||
|
"please add VersionUtils.setMybatisPlusVersion(?) code before running application");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static int compare(String v1, String v2) {
|
public static int compare(String v1, String v2) {
|
||||||
String[] v1s = v1.split("\\.");
|
String[] v1s = v1.split("-")[0].split("\\.");
|
||||||
String[] v2s = v2.split("\\.");
|
String[] v2s = v2.split("\\.");
|
||||||
|
|
||||||
String[] vs = v1s.length > v2s.length ? v2s : v1s;
|
String[] vs = v1s.length > v2s.length ? v2s : v1s;
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.github.yulichang.adapter.v33x;
|
package com.github.yulichang.adapter.v33x;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.MybatisPlusVersion;
|
|
||||||
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
|
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
|
||||||
import com.baomidou.mybatisplus.core.metadata.TableInfo;
|
import com.baomidou.mybatisplus.core.metadata.TableInfo;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
||||||
@ -28,7 +27,7 @@ import java.util.function.Supplier;
|
|||||||
*/
|
*/
|
||||||
public class Adapter33x implements IAdapter {
|
public class Adapter33x implements IAdapter {
|
||||||
|
|
||||||
private static final boolean is330 = VersionUtils.compare(MybatisPlusVersion.getVersion(), "3.3.0") == 0;
|
private static final boolean is330 = VersionUtils.compare(VersionUtils.getVersion(), "3.3.0") == 0;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean mpjHasLogic(TableInfo tableInfo) {
|
public boolean mpjHasLogic(TableInfo tableInfo) {
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.github.yulichang.adapter.v3431;
|
package com.github.yulichang.adapter.v3431;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.MybatisPlusVersion;
|
|
||||||
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
|
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
|
||||||
import com.baomidou.mybatisplus.core.metadata.TableInfo;
|
import com.baomidou.mybatisplus.core.metadata.TableInfo;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
||||||
@ -29,7 +28,7 @@ import java.util.stream.Collectors;
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class Adapter3431 implements IAdapter {
|
public class Adapter3431 implements IAdapter {
|
||||||
|
|
||||||
private static final boolean v = VersionUtils.compare(MybatisPlusVersion.getVersion(), "3.4.3") < 0;
|
private static final boolean v = VersionUtils.compare(VersionUtils.getVersion(), "3.4.3") < 0;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String mpjMapping(TableFieldInfo tableFieldInfo) {
|
public String mpjMapping(TableFieldInfo tableFieldInfo) {
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.github.yulichang.adapter;
|
package com.github.yulichang.adapter;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.MybatisPlusVersion;
|
|
||||||
import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
|
import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
|
||||||
import com.github.yulichang.adapter.base.IAdapter;
|
import com.github.yulichang.adapter.base.IAdapter;
|
||||||
import com.github.yulichang.adapter.base.tookit.VersionUtils;
|
import com.github.yulichang.adapter.base.tookit.VersionUtils;
|
||||||
@ -23,7 +22,7 @@ public class AdapterHelper {
|
|||||||
|
|
||||||
static {
|
static {
|
||||||
String lastAdapter = "3.5.8";
|
String lastAdapter = "3.5.8";
|
||||||
String version = Optional.ofNullable(MybatisPlusVersion.getVersion()).orElse(lastAdapter);
|
String version = Optional.ofNullable(VersionUtils.getVersion()).orElse(lastAdapter);
|
||||||
|
|
||||||
if (VersionUtils.compare(version, "3.5.6") >= 0) {
|
if (VersionUtils.compare(version, "3.5.6") >= 0) {
|
||||||
adapter = new Adapter();
|
adapter = new Adapter();
|
||||||
|
@ -0,0 +1,137 @@
|
|||||||
|
package com.github.yulichang.base;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||||
|
import com.github.yulichang.interfaces.MPJBaseJoin;
|
||||||
|
import com.github.yulichang.toolkit.Constant;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* join相关方法
|
||||||
|
*
|
||||||
|
* @author yulichang
|
||||||
|
*/
|
||||||
|
public interface JoinMapper<T> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据 Wrapper 条件,连表删除
|
||||||
|
*
|
||||||
|
* @param wrapper joinWrapper
|
||||||
|
*/
|
||||||
|
int deleteJoin(@Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据 whereEntity 条件,更新记录
|
||||||
|
*
|
||||||
|
* @param entity 实体对象 (set 条件值,可以为 null)
|
||||||
|
* @param wrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
|
||||||
|
*/
|
||||||
|
int updateJoin(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据 whereEntity 条件,更新记录 (null字段也会更新 !!!)
|
||||||
|
*
|
||||||
|
* @param entity 实体对象 (set 条件值,可以为 null)
|
||||||
|
* @param wrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
|
||||||
|
*/
|
||||||
|
int updateJoinAndNull(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据 Wrapper 条件,查询总记录数
|
||||||
|
*
|
||||||
|
* @param wrapper joinWrapper
|
||||||
|
*/
|
||||||
|
Long selectJoinCount(@Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 连表查询返回一条记录
|
||||||
|
*
|
||||||
|
* @param wrapper joinWrapper
|
||||||
|
* @return T
|
||||||
|
*/
|
||||||
|
default T selectJoinOne(@Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper) {
|
||||||
|
return selectJoinOne(null, wrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 连表查询返回一条记录
|
||||||
|
*
|
||||||
|
* @param wrapper joinWrapper
|
||||||
|
* @param clazz resultType
|
||||||
|
*/
|
||||||
|
<DTO> DTO selectJoinOne(@Param(Constant.CLAZZ) Class<DTO> clazz,
|
||||||
|
@Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 连表查询返回Map
|
||||||
|
*
|
||||||
|
* @param wrapper joinWrapper
|
||||||
|
*/
|
||||||
|
default Map<String, Object> selectJoinMap(@Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper) {
|
||||||
|
//noinspection unchecked
|
||||||
|
return selectJoinOne(Map.class, wrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 连表查询返回记录集合
|
||||||
|
*
|
||||||
|
* @param wrapper joinWrapper
|
||||||
|
* @return List<T>
|
||||||
|
*/
|
||||||
|
default List<T> selectJoinList(@Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper) {
|
||||||
|
return selectJoinList(null, wrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 连表查询返回记录集合
|
||||||
|
*
|
||||||
|
* @param wrapper joinWrapper
|
||||||
|
* @param clazz resultType
|
||||||
|
*/
|
||||||
|
<DTO> List<DTO> selectJoinList(@Param(Constant.CLAZZ) Class<DTO> clazz,
|
||||||
|
@Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 连表查询返回Map集合
|
||||||
|
*
|
||||||
|
* @param wrapper joinWrapper
|
||||||
|
*/
|
||||||
|
default List<Map<String, Object>> selectJoinMaps(@Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper) {
|
||||||
|
//noinspection unchecked
|
||||||
|
return (List<Map<String, Object>>) ((Object) selectJoinList(Map.class, wrapper));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 连表查询返回记录集合并分页
|
||||||
|
*
|
||||||
|
* @param wrapper joinWrapper
|
||||||
|
*/
|
||||||
|
default <P extends IPage<T>> P selectJoinPage(P page, @Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper) {
|
||||||
|
return selectJoinPage(page, null, wrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 连表查询返回记录集合并分页
|
||||||
|
*
|
||||||
|
* @param wrapper joinWrapper
|
||||||
|
* @param clazz resultType
|
||||||
|
* @param <DTO> 分页返回对象
|
||||||
|
*/
|
||||||
|
<DTO, P extends IPage<DTO>> P selectJoinPage(P page,
|
||||||
|
@Param(Constant.CLAZZ) Class<DTO> clazz,
|
||||||
|
@Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 连表查询返回Map集合并分页
|
||||||
|
*
|
||||||
|
* @param wrapper joinWrapper
|
||||||
|
*/
|
||||||
|
default <P extends IPage<Map<String, Object>>> P selectJoinMapsPage(P page,
|
||||||
|
@Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper) {
|
||||||
|
//noinspection unchecked,rawtypes
|
||||||
|
return (P) selectJoinPage((IPage) page, Map.class, wrapper);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,93 @@
|
|||||||
|
package com.github.yulichang.base;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
|
||||||
|
import com.github.yulichang.interfaces.MPJBaseJoin;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@SuppressWarnings({"unchecked", "unused"})
|
||||||
|
public interface JoinService<T> {
|
||||||
|
|
||||||
|
BaseMapper<T> getBaseMapper();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据 Wrapper 条件,连表删除
|
||||||
|
*
|
||||||
|
* @param wrapper joinWrapper
|
||||||
|
*/
|
||||||
|
default boolean deleteJoin(MPJBaseJoin<T> wrapper) {
|
||||||
|
return SqlHelper.retBool(((JoinMapper<T>) getBaseMapper()).deleteJoin(wrapper));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据 whereEntity 条件,更新记录
|
||||||
|
*
|
||||||
|
* @param entity 实体对象 (set 条件值,可以为 null)
|
||||||
|
* @param wrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
|
||||||
|
*/
|
||||||
|
default boolean updateJoin(T entity, MPJBaseJoin<T> wrapper) {
|
||||||
|
return SqlHelper.retBool(((JoinMapper<T>) getBaseMapper()).updateJoin(entity, wrapper));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据 whereEntity 条件,更新记录 (null字段也会更新 !!!)
|
||||||
|
*
|
||||||
|
* @param entity 实体对象 (set 条件值,可以为 null)
|
||||||
|
* @param wrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
|
||||||
|
*/
|
||||||
|
default boolean updateJoinAndNull(T entity, MPJBaseJoin<T> wrapper) {
|
||||||
|
return SqlHelper.retBool(((JoinMapper<T>) getBaseMapper()).updateJoinAndNull(entity, wrapper));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据 Wrapper 条件,查询总记录数
|
||||||
|
*/
|
||||||
|
default Long selectJoinCount(MPJBaseJoin<T> wrapper) {
|
||||||
|
return ((JoinMapper<T>) getBaseMapper()).selectJoinCount(wrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 连接查询返回一条记录
|
||||||
|
*/
|
||||||
|
default <DTO> DTO selectJoinOne(Class<DTO> clazz, MPJBaseJoin<T> wrapper) {
|
||||||
|
return ((JoinMapper<T>) getBaseMapper()).selectJoinOne(clazz, wrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 连接查询返回集合
|
||||||
|
*/
|
||||||
|
default <DTO> List<DTO> selectJoinList(Class<DTO> clazz, MPJBaseJoin<T> wrapper) {
|
||||||
|
return ((JoinMapper<T>) getBaseMapper()).selectJoinList(clazz, wrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 连接查询返回集合并分页
|
||||||
|
*/
|
||||||
|
default <DTO, P extends IPage<DTO>> P selectJoinListPage(P page, Class<DTO> clazz, MPJBaseJoin<T> wrapper) {
|
||||||
|
return ((JoinMapper<T>) getBaseMapper()).selectJoinPage(page, clazz, wrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 连接查询返回Map
|
||||||
|
*/
|
||||||
|
default Map<String, Object> selectJoinMap(MPJBaseJoin<T> wrapper) {
|
||||||
|
return ((JoinMapper<T>) getBaseMapper()).selectJoinMap(wrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 连接查询返回Map集合
|
||||||
|
*/
|
||||||
|
default List<Map<String, Object>> selectJoinMaps(MPJBaseJoin<T> wrapper) {
|
||||||
|
return ((JoinMapper<T>) getBaseMapper()).selectJoinMaps(wrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 连接查询返回Map集合并分页
|
||||||
|
*/
|
||||||
|
default <P extends IPage<Map<String, Object>>> P selectJoinMapsPage(P page, MPJBaseJoin<T> wrapper) {
|
||||||
|
return ((JoinMapper<T>) getBaseMapper()).selectJoinMapsPage(page, wrapper);
|
||||||
|
}
|
||||||
|
}
|
@ -1,137 +1,11 @@
|
|||||||
package com.github.yulichang.base;
|
package com.github.yulichang.base;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
|
||||||
import com.github.yulichang.interfaces.MPJBaseJoin;
|
|
||||||
import com.github.yulichang.toolkit.Constant;
|
|
||||||
import org.apache.ibatis.annotations.Param;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author yulichang
|
* @author yulichang
|
||||||
* @see BaseMapper
|
* @see BaseMapper
|
||||||
*/
|
*/
|
||||||
public interface MPJBaseMapper<T> extends BaseMapper<T> {
|
public interface MPJBaseMapper<T> extends BaseMapper<T>, JoinMapper<T> {
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据 Wrapper 条件,连表删除
|
|
||||||
*
|
|
||||||
* @param wrapper joinWrapper
|
|
||||||
*/
|
|
||||||
int deleteJoin(@Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据 whereEntity 条件,更新记录
|
|
||||||
*
|
|
||||||
* @param entity 实体对象 (set 条件值,可以为 null)
|
|
||||||
* @param wrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
|
|
||||||
*/
|
|
||||||
int updateJoin(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据 whereEntity 条件,更新记录 (null字段也会更新 !!!)
|
|
||||||
*
|
|
||||||
* @param entity 实体对象 (set 条件值,可以为 null)
|
|
||||||
* @param wrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
|
|
||||||
*/
|
|
||||||
int updateJoinAndNull(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据 Wrapper 条件,查询总记录数
|
|
||||||
*
|
|
||||||
* @param wrapper joinWrapper
|
|
||||||
*/
|
|
||||||
Long selectJoinCount(@Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 连表查询返回一条记录
|
|
||||||
*
|
|
||||||
* @param wrapper joinWrapper
|
|
||||||
* @return T
|
|
||||||
*/
|
|
||||||
default T selectJoinOne(@Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper) {
|
|
||||||
return selectJoinOne(null, wrapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 连表查询返回一条记录
|
|
||||||
*
|
|
||||||
* @param wrapper joinWrapper
|
|
||||||
* @param clazz resultType
|
|
||||||
*/
|
|
||||||
<DTO> DTO selectJoinOne(@Param(Constant.CLAZZ) Class<DTO> clazz,
|
|
||||||
@Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 连表查询返回Map
|
|
||||||
*
|
|
||||||
* @param wrapper joinWrapper
|
|
||||||
*/
|
|
||||||
default Map<String, Object> selectJoinMap(@Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper) {
|
|
||||||
//noinspection unchecked
|
|
||||||
return selectJoinOne(Map.class, wrapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 连表查询返回记录集合
|
|
||||||
*
|
|
||||||
* @param wrapper joinWrapper
|
|
||||||
* @return List<T>
|
|
||||||
*/
|
|
||||||
default List<T> selectJoinList(@Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper) {
|
|
||||||
return selectJoinList(null, wrapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 连表查询返回记录集合
|
|
||||||
*
|
|
||||||
* @param wrapper joinWrapper
|
|
||||||
* @param clazz resultType
|
|
||||||
*/
|
|
||||||
<DTO> List<DTO> selectJoinList(@Param(Constant.CLAZZ) Class<DTO> clazz,
|
|
||||||
@Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 连表查询返回Map集合
|
|
||||||
*
|
|
||||||
* @param wrapper joinWrapper
|
|
||||||
*/
|
|
||||||
default List<Map<String, Object>> selectJoinMaps(@Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper) {
|
|
||||||
//noinspection unchecked
|
|
||||||
return (List<Map<String, Object>>) ((Object) selectJoinList(Map.class, wrapper));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 连表查询返回记录集合并分页
|
|
||||||
*
|
|
||||||
* @param wrapper joinWrapper
|
|
||||||
*/
|
|
||||||
default <P extends IPage<T>> P selectJoinPage(P page, @Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper) {
|
|
||||||
return selectJoinPage(page, null, wrapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 连表查询返回记录集合并分页
|
|
||||||
*
|
|
||||||
* @param wrapper joinWrapper
|
|
||||||
* @param clazz resultType
|
|
||||||
* @param <DTO> 分页返回对象
|
|
||||||
*/
|
|
||||||
<DTO, P extends IPage<DTO>> P selectJoinPage(P page,
|
|
||||||
@Param(Constant.CLAZZ) Class<DTO> clazz,
|
|
||||||
@Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 连表查询返回Map集合并分页
|
|
||||||
*
|
|
||||||
* @param wrapper joinWrapper
|
|
||||||
*/
|
|
||||||
default <P extends IPage<Map<String, Object>>> P selectJoinMapsPage(P page,
|
|
||||||
@Param(Constants.WRAPPER) MPJBaseJoin<T> wrapper) {
|
|
||||||
//noinspection unchecked,rawtypes
|
|
||||||
return (P) selectJoinPage((IPage) page, Map.class, wrapper);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,6 @@
|
|||||||
package com.github.yulichang.base;
|
package com.github.yulichang.base;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
|
|
||||||
import com.github.yulichang.interfaces.MPJBaseJoin;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 基础service
|
* 基础service
|
||||||
@ -15,84 +9,6 @@ import java.util.Map;
|
|||||||
* @author yulichang
|
* @author yulichang
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings({"unused"})
|
@SuppressWarnings({"unused"})
|
||||||
public interface MPJBaseService<T> extends IService<T> {
|
public interface MPJBaseService<T> extends IService<T>, JoinService<T> {
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据 Wrapper 条件,连表删除
|
|
||||||
*
|
|
||||||
* @param wrapper joinWrapper
|
|
||||||
*/
|
|
||||||
default boolean deleteJoin(MPJBaseJoin<T> wrapper) {
|
|
||||||
return SqlHelper.retBool(((MPJBaseMapper<T>) getBaseMapper()).deleteJoin(wrapper));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据 whereEntity 条件,更新记录
|
|
||||||
*
|
|
||||||
* @param entity 实体对象 (set 条件值,可以为 null)
|
|
||||||
* @param wrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
|
|
||||||
*/
|
|
||||||
default boolean updateJoin(T entity, MPJBaseJoin<T> wrapper) {
|
|
||||||
return SqlHelper.retBool(((MPJBaseMapper<T>) getBaseMapper()).updateJoin(entity, wrapper));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据 whereEntity 条件,更新记录 (null字段也会更新 !!!)
|
|
||||||
*
|
|
||||||
* @param entity 实体对象 (set 条件值,可以为 null)
|
|
||||||
* @param wrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
|
|
||||||
*/
|
|
||||||
default boolean updateJoinAndNull(T entity, MPJBaseJoin<T> wrapper) {
|
|
||||||
return SqlHelper.retBool(((MPJBaseMapper<T>) getBaseMapper()).updateJoinAndNull(entity, wrapper));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据 Wrapper 条件,查询总记录数
|
|
||||||
*/
|
|
||||||
default Long selectJoinCount(MPJBaseJoin<T> wrapper) {
|
|
||||||
return ((MPJBaseMapper<T>) getBaseMapper()).selectJoinCount(wrapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 连接查询返回一条记录
|
|
||||||
*/
|
|
||||||
default <DTO> DTO selectJoinOne(Class<DTO> clazz, MPJBaseJoin<T> wrapper) {
|
|
||||||
return ((MPJBaseMapper<T>) getBaseMapper()).selectJoinOne(clazz, wrapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 连接查询返回集合
|
|
||||||
*/
|
|
||||||
default <DTO> List<DTO> selectJoinList(Class<DTO> clazz, MPJBaseJoin<T> wrapper) {
|
|
||||||
return ((MPJBaseMapper<T>) getBaseMapper()).selectJoinList(clazz, wrapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 连接查询返回集合并分页
|
|
||||||
*/
|
|
||||||
default <DTO, P extends IPage<DTO>> P selectJoinListPage(P page, Class<DTO> clazz, MPJBaseJoin<T> wrapper) {
|
|
||||||
return ((MPJBaseMapper<T>) getBaseMapper()).selectJoinPage(page, clazz, wrapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 连接查询返回Map
|
|
||||||
*/
|
|
||||||
default Map<String, Object> selectJoinMap(MPJBaseJoin<T> wrapper) {
|
|
||||||
return ((MPJBaseMapper<T>) getBaseMapper()).selectJoinMap(wrapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 连接查询返回Map集合
|
|
||||||
*/
|
|
||||||
default List<Map<String, Object>> selectJoinMaps(MPJBaseJoin<T> wrapper) {
|
|
||||||
return ((MPJBaseMapper<T>) getBaseMapper()).selectJoinMaps(wrapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 连接查询返回Map集合并分页
|
|
||||||
*/
|
|
||||||
default <P extends IPage<Map<String, Object>>> P selectJoinMapsPage(P page, MPJBaseJoin<T> wrapper) {
|
|
||||||
return ((MPJBaseMapper<T>) getBaseMapper()).selectJoinMapsPage(page, wrapper);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.github.yulichang.injector;
|
package com.github.yulichang.injector;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.MybatisPlusVersion;
|
|
||||||
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
|
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
|
||||||
import com.baomidou.mybatisplus.core.injector.AbstractSqlInjector;
|
import com.baomidou.mybatisplus.core.injector.AbstractSqlInjector;
|
||||||
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
|
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
|
||||||
@ -59,7 +58,7 @@ public class MPJSqlInjector extends DefaultSqlInjector {
|
|||||||
@Deprecated
|
@Deprecated
|
||||||
@SuppressWarnings({"unused", "DeprecatedIsStillUsed"})
|
@SuppressWarnings({"unused", "DeprecatedIsStillUsed"})
|
||||||
public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
|
public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
|
||||||
if (VersionUtils.compare(MybatisPlusVersion.getVersion(), "3.4.3.2") >= 0) {
|
if (VersionUtils.compare(VersionUtils.getVersion(), "3.4.3.2") >= 0) {
|
||||||
throw ExceptionUtils.mpe("DefaultSqlInjector 的 getMethodList(Class<?> mapperClass) 方法已在 3.4.3.2+ 改为" +
|
throw ExceptionUtils.mpe("DefaultSqlInjector 的 getMethodList(Class<?> mapperClass) 方法已在 3.4.3.2+ 改为" +
|
||||||
"getMethodList(Class<?> mapperClass, TableInfo tableInfo)\n");
|
"getMethodList(Class<?> mapperClass, TableInfo tableInfo)\n");
|
||||||
}
|
}
|
||||||
@ -128,7 +127,7 @@ public class MPJSqlInjector extends DefaultSqlInjector {
|
|||||||
|
|
||||||
private List<AbstractMethod> getJoinMethod() {
|
private List<AbstractMethod> getJoinMethod() {
|
||||||
List<AbstractMethod> list = new ArrayList<>();
|
List<AbstractMethod> list = new ArrayList<>();
|
||||||
if (VersionUtils.compare(MybatisPlusVersion.getVersion(), "3.5.0") >= 0) {
|
if (VersionUtils.compare(VersionUtils.getVersion(), "3.5.0") >= 0) {
|
||||||
list.add(new DeleteJoin(SqlMethod.DELETE_JOIN.getMethod()));
|
list.add(new DeleteJoin(SqlMethod.DELETE_JOIN.getMethod()));
|
||||||
list.add(new UpdateJoin(SqlMethod.UPDATE_JOIN.getMethod()));
|
list.add(new UpdateJoin(SqlMethod.UPDATE_JOIN.getMethod()));
|
||||||
list.add(new UpdateJoinAndNull(SqlMethod.UPDATE_JOIN_AND_NULL.getMethod()));
|
list.add(new UpdateJoinAndNull(SqlMethod.UPDATE_JOIN_AND_NULL.getMethod()));
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.github.yulichang.interceptor;
|
package com.github.yulichang.interceptor;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.MybatisPlusVersion;
|
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.core.metadata.TableInfo;
|
import com.baomidou.mybatisplus.core.metadata.TableInfo;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||||
@ -46,7 +45,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
|||||||
@Intercepts(@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}))
|
@Intercepts(@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}))
|
||||||
public class MPJInterceptor implements Interceptor {
|
public class MPJInterceptor implements Interceptor {
|
||||||
|
|
||||||
private static final boolean v = VersionUtils.compare(MybatisPlusVersion.getVersion(), "3.4.3.1") > 0;
|
private static final boolean v = VersionUtils.compare(VersionUtils.getVersion(), "3.4.3.1") > 0;
|
||||||
|
|
||||||
private static final List<ResultMapping> EMPTY_RESULT_MAPPING = new ArrayList<>(0);
|
private static final List<ResultMapping> EMPTY_RESULT_MAPPING = new ArrayList<>(0);
|
||||||
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.github.yulichang.query;
|
package com.github.yulichang.query;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.MybatisPlusVersion;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
|
import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.SharedString;
|
import com.baomidou.mybatisplus.core.conditions.SharedString;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.Query;
|
import com.baomidou.mybatisplus.core.conditions.query.Query;
|
||||||
@ -102,7 +101,7 @@ public class MPJQueryWrapper<T> extends AbstractWrapper<T, String, MPJQueryWrapp
|
|||||||
try {
|
try {
|
||||||
super.setEntityClass(clazz);
|
super.setEntityClass(clazz);
|
||||||
} catch (NoSuchMethodError error) {
|
} catch (NoSuchMethodError error) {
|
||||||
if (VersionUtils.compare(MybatisPlusVersion.getVersion(), "3.3.0") > 0) {
|
if (VersionUtils.compare(VersionUtils.getVersion(), "3.3.0") > 0) {
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package com.github.yulichang.toolkit;
|
package com.github.yulichang.toolkit;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Assert;
|
import com.baomidou.mybatisplus.core.toolkit.Assert;
|
||||||
import com.github.yulichang.base.MPJBaseMapper;
|
import com.github.yulichang.base.JoinMapper;
|
||||||
|
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
@ -13,11 +13,11 @@ import java.util.function.Function;
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public final class SqlHelper {
|
public final class SqlHelper {
|
||||||
|
|
||||||
public static <R, T> R exec(Class<T> entityClass, Function<MPJBaseMapper<T>, R> function) {
|
public static <R, T> R exec(Class<T> entityClass, Function<JoinMapper<T>, R> function) {
|
||||||
Assert.notNull(entityClass, "请使用 new MPJLambdaWrapper(主表.class) 或 JoinWrappers.lambda(主表.class) 构造方法");
|
Assert.notNull(entityClass, "请使用 new MPJLambdaWrapper(主表.class) 或 JoinWrappers.lambda(主表.class) 构造方法");
|
||||||
Object mapper = SpringContentUtils.getMapper(entityClass);
|
Object mapper = SpringContentUtils.getMapper(entityClass);
|
||||||
Assert.notNull(mapper, "mapper not init <%s>", entityClass.getSimpleName());
|
Assert.notNull(mapper, "mapper not init <%s>", entityClass.getSimpleName());
|
||||||
Assert.isTrue(mapper instanceof MPJBaseMapper, "mapper <%s> not extends MPJBaseMapper ", entityClass.getSimpleName());
|
Assert.isTrue(mapper instanceof JoinMapper, "mapper <%s> not extends MPJBaseMapper ", entityClass.getSimpleName());
|
||||||
return function.apply((MPJBaseMapper<T>) mapper);
|
return function.apply((JoinMapper<T>) mapper);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.github.yulichang.test.join;
|
package com.github.yulichang.test.join;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.MybatisPlusVersion;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||||
@ -86,38 +85,39 @@ class LambdaWrapperTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testJoin() {
|
void testJoin() {
|
||||||
ThreadLocalUtils.set("SELECT t.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" t.pid,\n" +
|
SELECT t.id,
|
||||||
" t.`name`,\n" +
|
t.pid,
|
||||||
" t.`json`,\n" +
|
t.`name`,
|
||||||
" t.sex,\n" +
|
t.`json`,
|
||||||
" t.head_img,\n" +
|
t.sex,
|
||||||
" t.create_time,\n" +
|
t.head_img,
|
||||||
" t.address_id,\n" +
|
t.create_time,
|
||||||
" t.address_id2,\n" +
|
t.address_id,
|
||||||
" t.del,\n" +
|
t.address_id2,
|
||||||
" t.create_by,\n" +
|
t.del,
|
||||||
" t.update_by,\n" +
|
t.create_by,
|
||||||
" t1.id AS joina_id,\n" +
|
t.update_by,
|
||||||
" t1.user_id,\n" +
|
t1.id AS joina_id,
|
||||||
" t1.area_id,\n" +
|
t1.user_id,
|
||||||
" t1.tel,\n" +
|
t1.area_id,
|
||||||
" t1.address,\n" +
|
t1.tel,
|
||||||
" t1.del AS joina_del,\n" +
|
t1.address,
|
||||||
" t2.id AS joinb_id,\n" +
|
t1.del AS joina_del,
|
||||||
" t2.province,\n" +
|
t2.id AS joinb_id,
|
||||||
" t2.city,\n" +
|
t2.province,
|
||||||
" t2.area,\n" +
|
t2.city,
|
||||||
" t2.postcode,\n" +
|
t2.area,
|
||||||
" t2.del AS joinb_del\n" +
|
t2.postcode,
|
||||||
"FROM `user` t\n" +
|
t2.del AS joinb_del
|
||||||
" LEFT JOIN address t1 ON (t1.user_id = t.id)\n" +
|
FROM `user` t
|
||||||
" LEFT JOIN area t2 ON (t2.id = t1.area_id)\n" +
|
LEFT JOIN address t1 ON (t1.user_id = t.id)
|
||||||
"WHERE t.del = false\n" +
|
LEFT JOIN area t2 ON (t2.id = t1.area_id)
|
||||||
" AND t1.del = false\n" +
|
WHERE t.del = false
|
||||||
" AND t2.del = false\n" +
|
AND t1.del = false
|
||||||
" AND (t.id <= ?)\n" +
|
AND t2.del = false
|
||||||
"ORDER BY t.id DESC");
|
AND (t.id <= ?)
|
||||||
|
ORDER BY t.id DESC""");
|
||||||
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
||||||
.selectAll(UserDO.class)
|
.selectAll(UserDO.class)
|
||||||
.selectCollection(AddressDO.class, UserDTO::getAddressList, addr -> addr
|
.selectCollection(AddressDO.class, UserDTO::getAddressList, addr -> addr
|
||||||
@ -139,25 +139,26 @@ class LambdaWrapperTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testJoinField() {
|
void testJoinField() {
|
||||||
ThreadLocalUtils.set("SELECT t.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" t.pid,\n" +
|
SELECT t.id,
|
||||||
" t.`name`,\n" +
|
t.pid,
|
||||||
" t.`json`,\n" +
|
t.`name`,
|
||||||
" t.sex,\n" +
|
t.`json`,
|
||||||
" t.head_img,\n" +
|
t.sex,
|
||||||
" t.create_time,\n" +
|
t.head_img,
|
||||||
" t.address_id,\n" +
|
t.create_time,
|
||||||
" t.address_id2,\n" +
|
t.address_id,
|
||||||
" t.del,\n" +
|
t.address_id2,
|
||||||
" t.create_by,\n" +
|
t.del,
|
||||||
" t.update_by,\n" +
|
t.create_by,
|
||||||
" t1.id AS joina_id\n" +
|
t.update_by,
|
||||||
"FROM `user` t\n" +
|
t1.id AS joina_id
|
||||||
" LEFT JOIN address t1 ON (t1.user_id = t.id)\n" +
|
FROM `user` t
|
||||||
"WHERE t.del = false\n" +
|
LEFT JOIN address t1 ON (t1.user_id = t.id)
|
||||||
" AND t1.del = false\n" +
|
WHERE t.del = false
|
||||||
" AND (t.id <= ?)\n" +
|
AND t1.del = false
|
||||||
"ORDER BY t.id DESC");
|
AND (t.id <= ?)
|
||||||
|
ORDER BY t.id DESC""");
|
||||||
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
||||||
.selectAll(UserDO.class)
|
.selectAll(UserDO.class)
|
||||||
|
|
||||||
@ -176,37 +177,38 @@ class LambdaWrapperTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testJoin1() {
|
void testJoin1() {
|
||||||
ThreadLocalUtils.set("SELECT t.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" t.pid,\n" +
|
SELECT t.id,
|
||||||
" t.`name`,\n" +
|
t.pid,
|
||||||
" t.`json`,\n" +
|
t.`name`,
|
||||||
" t.sex,\n" +
|
t.`json`,
|
||||||
" t.head_img,\n" +
|
t.sex,
|
||||||
" t.create_time,\n" +
|
t.head_img,
|
||||||
" t.address_id,\n" +
|
t.create_time,
|
||||||
" t.address_id2,\n" +
|
t.address_id,
|
||||||
" t.del,\n" +
|
t.address_id2,
|
||||||
" t.create_by,\n" +
|
t.del,
|
||||||
" t.update_by,\n" +
|
t.create_by,
|
||||||
" t1.id AS joina_id,\n" +
|
t.update_by,
|
||||||
" t1.user_id,\n" +
|
t1.id AS joina_id,
|
||||||
" t1.area_id,\n" +
|
t1.user_id,
|
||||||
" t1.tel,\n" +
|
t1.area_id,
|
||||||
" t1.address,\n" +
|
t1.tel,
|
||||||
" t1.del AS joina_del,\n" +
|
t1.address,
|
||||||
" t2.id AS joinb_id,\n" +
|
t1.del AS joina_del,
|
||||||
" t2.province,\n" +
|
t2.id AS joinb_id,
|
||||||
" t2.city,\n" +
|
t2.province,
|
||||||
" t2.area,\n" +
|
t2.city,
|
||||||
" t2.postcode,\n" +
|
t2.area,
|
||||||
" t2.del AS joinb_del\n" +
|
t2.postcode,
|
||||||
"FROM `user` t\n" +
|
t2.del AS joinb_del
|
||||||
" LEFT JOIN address t1 ON (t1.user_id = t.id)\n" +
|
FROM `user` t
|
||||||
" LEFT JOIN area t2 ON (t2.id = t1.area_id)\n" +
|
LEFT JOIN address t1 ON (t1.user_id = t.id)
|
||||||
"WHERE t.del = false\n" +
|
LEFT JOIN area t2 ON (t2.id = t1.area_id)
|
||||||
" AND t1.del = false\n" +
|
WHERE t.del = false
|
||||||
" AND t2.del = false\n" +
|
AND t1.del = false
|
||||||
"ORDER BY t.id DESC");
|
AND t2.del = false
|
||||||
|
ORDER BY t.id DESC""");
|
||||||
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
||||||
.selectAll(UserDO.class)
|
.selectAll(UserDO.class)
|
||||||
.selectCollection(AddressDO.class, UserDTO::getAddressList, addr -> addr
|
.selectCollection(AddressDO.class, UserDTO::getAddressList, addr -> addr
|
||||||
@ -225,13 +227,14 @@ class LambdaWrapperTest {
|
|||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
void testWrapper() {
|
void testWrapper() {
|
||||||
ThreadLocalUtils.set("SELECT t.id\n" +
|
ThreadLocalUtils.set("""
|
||||||
"FROM `user` t\n" +
|
SELECT t.id
|
||||||
" LEFT JOIN address t1 ON (t1.user_id = t.id)\n" +
|
FROM `user` t
|
||||||
" LEFT JOIN area t2 ON (t2.id = t1.area_id)\n" +
|
LEFT JOIN address t1 ON (t1.user_id = t.id)
|
||||||
"WHERE t.del = false\n" +
|
LEFT JOIN area t2 ON (t2.id = t1.area_id)
|
||||||
" AND t1.del = false\n" +
|
WHERE t.del = false
|
||||||
" AND t2.del = false");
|
AND t1.del = false
|
||||||
|
AND t2.del = false""");
|
||||||
//基本数据类型 和 String
|
//基本数据类型 和 String
|
||||||
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
||||||
.select(UserDO::getId)
|
.select(UserDO::getId)
|
||||||
@ -243,13 +246,14 @@ class LambdaWrapperTest {
|
|||||||
System.out.println(list);
|
System.out.println(list);
|
||||||
|
|
||||||
|
|
||||||
ThreadLocalUtils.set("SELECT t.create_time\n" +
|
ThreadLocalUtils.set("""
|
||||||
"FROM `user` t\n" +
|
SELECT t.create_time
|
||||||
" LEFT JOIN address t1 ON (t1.user_id = t.id)\n" +
|
FROM `user` t
|
||||||
" LEFT JOIN area t2 ON (t2.id = t1.area_id)\n" +
|
LEFT JOIN address t1 ON (t1.user_id = t.id)
|
||||||
"WHERE t.del = false\n" +
|
LEFT JOIN area t2 ON (t2.id = t1.area_id)
|
||||||
" AND t1.del = false\n" +
|
WHERE t.del = false
|
||||||
" AND t2.del = false");
|
AND t1.del = false
|
||||||
|
AND t2.del = false""");
|
||||||
//java.sql包下的类
|
//java.sql包下的类
|
||||||
MPJLambdaWrapper<UserDO> wrapper1 = new MPJLambdaWrapper<UserDO>()
|
MPJLambdaWrapper<UserDO> wrapper1 = new MPJLambdaWrapper<UserDO>()
|
||||||
.select(UserDO::getCreateTime)
|
.select(UserDO::getCreateTime)
|
||||||
@ -264,23 +268,24 @@ class LambdaWrapperTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testMSCache() {
|
void testMSCache() {
|
||||||
ThreadLocalUtils.set("SELECT t.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" t.pid,\n" +
|
SELECT t.id,
|
||||||
" t.`name`,\n" +
|
t.pid,
|
||||||
" t.`json`,\n" +
|
t.`name`,
|
||||||
" t.sex,\n" +
|
t.`json`,
|
||||||
" t.head_img,\n" +
|
t.sex,
|
||||||
" t.create_time,\n" +
|
t.head_img,
|
||||||
" t.address_id,\n" +
|
t.create_time,
|
||||||
" t.address_id2,\n" +
|
t.address_id,
|
||||||
" t.del,\n" +
|
t.address_id2,
|
||||||
" t.create_by,\n" +
|
t.del,
|
||||||
" t.update_by\n" +
|
t.create_by,
|
||||||
"FROM `user` t\n" +
|
t.update_by
|
||||||
"WHERE t.id = ?\n" +
|
FROM `user` t
|
||||||
" AND t.del = false\n" +
|
WHERE t.id = ?
|
||||||
" AND (t.id <= ?)\n" +
|
AND t.del = false
|
||||||
"ORDER BY t.id ASC, t.`name` ASC");
|
AND (t.id <= ?)
|
||||||
|
ORDER BY t.id ASC, t.`name` ASC""");
|
||||||
UserDO userDO = new UserDO();
|
UserDO userDO = new UserDO();
|
||||||
userDO.setId(1);
|
userDO.setId(1);
|
||||||
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<>(userDO)
|
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<>(userDO)
|
||||||
@ -297,21 +302,22 @@ class LambdaWrapperTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testTableAliasR() {
|
void testTableAliasR() {
|
||||||
ThreadLocalUtils.set("SELECT tt.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" tt.user_id,\n" +
|
SELECT tt.id,
|
||||||
" tt.create_by,\n" +
|
tt.user_id,
|
||||||
" tt.update_by,\n" +
|
tt.create_by,
|
||||||
" ua.`name` AS userName,\n" +
|
tt.update_by,
|
||||||
" ub.`name` AS createName,\n" +
|
ua.`name` AS userName,
|
||||||
" uc.`name` AS updateName\n" +
|
ub.`name` AS createName,
|
||||||
"FROM user_dto tt\n" +
|
uc.`name` AS updateName
|
||||||
" LEFT JOIN `user` ua ON (ua.id = tt.user_id)\n" +
|
FROM user_dto tt
|
||||||
" LEFT JOIN `user` ub ON (ub.id = tt.create_by)\n" +
|
LEFT JOIN `user` ua ON (ua.id = tt.user_id)
|
||||||
" LEFT JOIN `user` uc ON (uc.id = tt.update_by)\n" +
|
LEFT JOIN `user` ub ON (ub.id = tt.create_by)
|
||||||
"WHERE ua.del = false\n" +
|
LEFT JOIN `user` uc ON (uc.id = tt.update_by)
|
||||||
" AND ub.del = false\n" +
|
WHERE ua.del = false
|
||||||
" AND uc.del = false\n" +
|
AND ub.del = false
|
||||||
" AND (ua.id <= ? AND ub.id >= ?)");
|
AND uc.del = false
|
||||||
|
AND (ua.id <= ? AND ub.id >= ?)""");
|
||||||
MPJLambdaWrapper<UserDto> wrapper = new MPJLambdaWrapper<UserDto>("tt")
|
MPJLambdaWrapper<UserDto> wrapper = new MPJLambdaWrapper<UserDto>("tt")
|
||||||
.selectAll(UserDto.class)
|
.selectAll(UserDto.class)
|
||||||
.leftJoin(UserDO.class, "ua", UserDO::getId, UserDto::getUserId, ext -> ext
|
.leftJoin(UserDO.class, "ua", UserDO::getId, UserDto::getUserId, ext -> ext
|
||||||
@ -328,29 +334,30 @@ class LambdaWrapperTest {
|
|||||||
assert StringUtils.isNotBlank(userDtos.get(0).getUpdateName());
|
assert StringUtils.isNotBlank(userDtos.get(0).getUpdateName());
|
||||||
|
|
||||||
|
|
||||||
ThreadLocalUtils.set("SELECT tt.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" tt.pid,\n" +
|
SELECT tt.id,
|
||||||
" tt.`name`,\n" +
|
tt.pid,
|
||||||
" tt.`json`,\n" +
|
tt.`name`,
|
||||||
" tt.sex,\n" +
|
tt.`json`,
|
||||||
" tt.head_img,\n" +
|
tt.sex,
|
||||||
" tt.create_time,\n" +
|
tt.head_img,
|
||||||
" tt.address_id,\n" +
|
tt.create_time,
|
||||||
" tt.address_id2,\n" +
|
tt.address_id,
|
||||||
" tt.del,\n" +
|
tt.address_id2,
|
||||||
" tt.create_by,\n" +
|
tt.del,
|
||||||
" tt.update_by,\n" +
|
tt.create_by,
|
||||||
" ua.id,\n" +
|
tt.update_by,
|
||||||
" ub.head_img\n" +
|
ua.id,
|
||||||
"FROM `user` tt\n" +
|
ub.head_img
|
||||||
" LEFT JOIN `user` ua ON (ua.id = tt.pid)\n" +
|
FROM `user` tt
|
||||||
" LEFT JOIN `user` ub ON (ub.id = tt.create_by)\n" +
|
LEFT JOIN `user` ua ON (ua.id = tt.pid)
|
||||||
" LEFT JOIN `user` uc ON (uc.id = tt.update_by)\n" +
|
LEFT JOIN `user` ub ON (ub.id = tt.create_by)
|
||||||
"WHERE tt.del = false\n" +
|
LEFT JOIN `user` uc ON (uc.id = tt.update_by)
|
||||||
" AND ua.del = false\n" +
|
WHERE tt.del = false
|
||||||
" AND ub.del = false\n" +
|
AND ua.del = false
|
||||||
" AND uc.del = false\n" +
|
AND ub.del = false
|
||||||
" AND (ua.head_img = tt.`name` AND tt.id = ua.id)");
|
AND uc.del = false
|
||||||
|
AND (ua.head_img = tt.`name` AND tt.id = ua.id)""");
|
||||||
MPJLambdaWrapper<UserDO> w = new MPJLambdaWrapper<UserDO>("tt")
|
MPJLambdaWrapper<UserDO> w = new MPJLambdaWrapper<UserDO>("tt")
|
||||||
.selectAll(UserDO.class)
|
.selectAll(UserDO.class)
|
||||||
.leftJoin(UserDO.class, "ua", UserDO::getId, UserDO::getPid, ext -> ext
|
.leftJoin(UserDO.class, "ua", UserDO::getId, UserDO::getPid, ext -> ext
|
||||||
@ -369,34 +376,35 @@ class LambdaWrapperTest {
|
|||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
void testInner() {
|
void testInner() {
|
||||||
ThreadLocalUtils.set("SELECT t.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" t.pid,\n" +
|
SELECT t.id,
|
||||||
" t.`name`,\n" +
|
t.pid,
|
||||||
" t.`json`,\n" +
|
t.`name`,
|
||||||
" t.sex,\n" +
|
t.`json`,
|
||||||
" t.head_img,\n" +
|
t.sex,
|
||||||
" t.create_time,\n" +
|
t.head_img,
|
||||||
" t.address_id,\n" +
|
t.create_time,
|
||||||
" t.address_id2,\n" +
|
t.address_id,
|
||||||
" t.del,\n" +
|
t.address_id2,
|
||||||
" t.create_by,\n" +
|
t.del,
|
||||||
" t.update_by,\n" +
|
t.create_by,
|
||||||
" t1.id AS joina_id,\n" +
|
t.update_by,
|
||||||
" t1.pid AS joina_pid,\n" +
|
t1.id AS joina_id,
|
||||||
" t1.`name` AS joina_name,\n" +
|
t1.pid AS joina_pid,
|
||||||
" t1.`json` AS joina_json,\n" +
|
t1.`name` AS joina_name,
|
||||||
" t1.sex AS joina_sex,\n" +
|
t1.`json` AS joina_json,
|
||||||
" t1.head_img AS joina_head_img,\n" +
|
t1.sex AS joina_sex,
|
||||||
" t1.create_time AS joina_create_time,\n" +
|
t1.head_img AS joina_head_img,
|
||||||
" t1.address_id AS joina_address_id,\n" +
|
t1.create_time AS joina_create_time,
|
||||||
" t1.address_id2 AS joina_address_id2,\n" +
|
t1.address_id AS joina_address_id,
|
||||||
" t1.del AS joina_del,\n" +
|
t1.address_id2 AS joina_address_id2,
|
||||||
" t1.create_by AS joina_create_by,\n" +
|
t1.del AS joina_del,
|
||||||
" t1.update_by AS joina_update_by\n" +
|
t1.create_by AS joina_create_by,
|
||||||
"FROM `user` t\n" +
|
t1.update_by AS joina_update_by
|
||||||
" LEFT JOIN `user` t1 ON (t1.pid = t.id)\n" +
|
FROM `user` t
|
||||||
"WHERE t.del = false\n" +
|
LEFT JOIN `user` t1 ON (t1.pid = t.id)
|
||||||
" AND (t.id > ?)");
|
WHERE t.del = false
|
||||||
|
AND (t.id > ?)""");
|
||||||
//自连接
|
//自连接
|
||||||
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
||||||
.disableSubLogicDel()//关闭副表逻辑删除
|
.disableSubLogicDel()//关闭副表逻辑删除
|
||||||
@ -407,24 +415,25 @@ class LambdaWrapperTest {
|
|||||||
List<UserDO> list = userMapper.selectJoinList(UserDO.class, wrapper.clone());
|
List<UserDO> list = userMapper.selectJoinList(UserDO.class, wrapper.clone());
|
||||||
System.out.println(list);
|
System.out.println(list);
|
||||||
|
|
||||||
ThreadLocalUtils.set("SELECT t.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" t.pid,\n" +
|
SELECT t.id,
|
||||||
" t.`name`,\n" +
|
t.pid,
|
||||||
" t.`json`,\n" +
|
t.`name`,
|
||||||
" t.sex,\n" +
|
t.`json`,
|
||||||
" t.head_img,\n" +
|
t.sex,
|
||||||
" t.create_time,\n" +
|
t.head_img,
|
||||||
" t.address_id,\n" +
|
t.create_time,
|
||||||
" t.address_id2,\n" +
|
t.address_id,
|
||||||
" t.del,\n" +
|
t.address_id2,
|
||||||
" t.create_by,\n" +
|
t.del,
|
||||||
" t.update_by,\n" +
|
t.create_by,
|
||||||
" t1.`name` AS createName,\n" +
|
t.update_by,
|
||||||
" t2.`name` AS updateName\n" +
|
t1.`name` AS createName,
|
||||||
"FROM `user` t\n" +
|
t2.`name` AS updateName
|
||||||
" LEFT JOIN `user` t1 ON (t1.id = t.create_by)\n" +
|
FROM `user` t
|
||||||
" LEFT JOIN `user` t2 ON (t2.id = t.update_by)\n" +
|
LEFT JOIN `user` t1 ON (t1.id = t.create_by)
|
||||||
"WHERE (t2.id = t.update_by AND t.id = t1.id)");
|
LEFT JOIN `user` t2 ON (t2.id = t.update_by)
|
||||||
|
WHERE (t2.id = t.update_by AND t.id = t1.id)""");
|
||||||
//关联一张表多次
|
//关联一张表多次
|
||||||
MPJLambdaWrapper<UserDO> w = new MPJLambdaWrapper<UserDO>()
|
MPJLambdaWrapper<UserDO> w = new MPJLambdaWrapper<UserDO>()
|
||||||
.disableLogicDel()
|
.disableLogicDel()
|
||||||
@ -442,48 +451,49 @@ class LambdaWrapperTest {
|
|||||||
assert dos.get(0).getCreateName() != null && dos.get(0).getUpdateName() != null;
|
assert dos.get(0).getCreateName() != null && dos.get(0).getUpdateName() != null;
|
||||||
|
|
||||||
|
|
||||||
ThreadLocalUtils.set("SELECT t.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" t.pid,\n" +
|
SELECT t.id,
|
||||||
" t.`name`,\n" +
|
t.pid,
|
||||||
" t.`json`,\n" +
|
t.`name`,
|
||||||
" t.sex,\n" +
|
t.`json`,
|
||||||
" t.head_img,\n" +
|
t.sex,
|
||||||
" t.create_time,\n" +
|
t.head_img,
|
||||||
" t.address_id,\n" +
|
t.create_time,
|
||||||
" t.address_id2,\n" +
|
t.address_id,
|
||||||
" t.del,\n" +
|
t.address_id2,
|
||||||
" t.create_by,\n" +
|
t.del,
|
||||||
" t.update_by,\n" +
|
t.create_by,
|
||||||
" t1.`name` AS alias,\n" +
|
t.update_by,
|
||||||
" t1.id AS joina_id,\n" +
|
t1.`name` AS alias,
|
||||||
" t1.pid AS joina_pid,\n" +
|
t1.id AS joina_id,
|
||||||
" t1.`name` AS joina_name,\n" +
|
t1.pid AS joina_pid,
|
||||||
" t1.`json` AS joina_json,\n" +
|
t1.`name` AS joina_name,
|
||||||
" t1.sex AS joina_sex,\n" +
|
t1.`json` AS joina_json,
|
||||||
" t1.head_img AS joina_head_img,\n" +
|
t1.sex AS joina_sex,
|
||||||
" t1.create_time AS joina_create_time,\n" +
|
t1.head_img AS joina_head_img,
|
||||||
" t1.address_id AS joina_address_id,\n" +
|
t1.create_time AS joina_create_time,
|
||||||
" t1.address_id2 AS joina_address_id2,\n" +
|
t1.address_id AS joina_address_id,
|
||||||
" t1.del AS joina_del,\n" +
|
t1.address_id2 AS joina_address_id2,
|
||||||
" t1.create_by AS joina_create_by,\n" +
|
t1.del AS joina_del,
|
||||||
" t1.update_by AS joina_update_by,\n" +
|
t1.create_by AS joina_create_by,
|
||||||
" t2.id AS joinb_id,\n" +
|
t1.update_by AS joina_update_by,
|
||||||
" t2.pid AS joinb_pid,\n" +
|
t2.id AS joinb_id,
|
||||||
" t2.`name` AS joinb_name,\n" +
|
t2.pid AS joinb_pid,
|
||||||
" t2.`json` AS joinb_json,\n" +
|
t2.`name` AS joinb_name,
|
||||||
" t2.sex AS joinb_sex,\n" +
|
t2.`json` AS joinb_json,
|
||||||
" t2.head_img AS joinb_head_img,\n" +
|
t2.sex AS joinb_sex,
|
||||||
" t2.create_time AS joinb_create_time,\n" +
|
t2.head_img AS joinb_head_img,
|
||||||
" t2.address_id AS joinb_address_id,\n" +
|
t2.create_time AS joinb_create_time,
|
||||||
" t2.address_id2 AS joinb_address_id2,\n" +
|
t2.address_id AS joinb_address_id,
|
||||||
" t2.del AS joinb_del,\n" +
|
t2.address_id2 AS joinb_address_id2,
|
||||||
" t2.create_by AS joinb_create_by,\n" +
|
t2.del AS joinb_del,
|
||||||
" t2.update_by AS joinb_update_by\n" +
|
t2.create_by AS joinb_create_by,
|
||||||
"FROM `user` t\n" +
|
t2.update_by AS joinb_update_by
|
||||||
" LEFT JOIN `user` t1 ON (t1.pid = t.id)\n" +
|
FROM `user` t
|
||||||
" LEFT JOIN `user` t2 ON (t2.pid = t1.id)\n" +
|
LEFT JOIN `user` t1 ON (t1.pid = t.id)
|
||||||
"WHERE t.del = false\n" +
|
LEFT JOIN `user` t2 ON (t2.pid = t1.id)
|
||||||
" AND (t1.id <= ? AND t.id <= ?)");
|
WHERE t.del = false
|
||||||
|
AND (t1.id <= ? AND t.id <= ?)""");
|
||||||
MPJLambdaWrapper<UserDO> wrapper1 = new MPJLambdaWrapper<UserDO>()
|
MPJLambdaWrapper<UserDO> wrapper1 = new MPJLambdaWrapper<UserDO>()
|
||||||
.disableSubLogicDel()
|
.disableSubLogicDel()
|
||||||
.selectAll(UserDO.class)
|
.selectAll(UserDO.class)
|
||||||
@ -562,28 +572,29 @@ class LambdaWrapperTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testTableAlias() {
|
void testTableAlias() {
|
||||||
ThreadLocalUtils.set("SELECT t.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" t.pid,\n" +
|
SELECT t.id,
|
||||||
" t.`name`,\n" +
|
t.pid,
|
||||||
" t.`json`,\n" +
|
t.`name`,
|
||||||
" t.sex,\n" +
|
t.`json`,
|
||||||
" t.head_img,\n" +
|
t.sex,
|
||||||
" t.create_time,\n" +
|
t.head_img,
|
||||||
" t.address_id,\n" +
|
t.create_time,
|
||||||
" t.address_id2,\n" +
|
t.address_id,
|
||||||
" t.del,\n" +
|
t.address_id2,
|
||||||
" t.create_by,\n" +
|
t.del,
|
||||||
" t.update_by,\n" +
|
t.create_by,
|
||||||
" aa.id,\n" +
|
t.update_by,
|
||||||
" aa.user_id,\n" +
|
aa.id,
|
||||||
" aa.area_id,\n" +
|
aa.user_id,
|
||||||
" aa.tel,\n" +
|
aa.area_id,
|
||||||
" aa.address,\n" +
|
aa.tel,
|
||||||
" aa.del\n" +
|
aa.address,
|
||||||
"FROM `user` t\n" +
|
aa.del
|
||||||
" LEFT JOIN address aa ON (aa.user_id = t.id)\n" +
|
FROM `user` t
|
||||||
"WHERE t.del = false\n" +
|
LEFT JOIN address aa ON (aa.user_id = t.id)
|
||||||
" AND aa.del = false");
|
WHERE t.del = false
|
||||||
|
AND aa.del = false""");
|
||||||
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
||||||
// .disableLogicDel()//关闭主表逻辑删除
|
// .disableLogicDel()//关闭主表逻辑删除
|
||||||
.selectAll(UserDO.class)
|
.selectAll(UserDO.class)
|
||||||
@ -635,25 +646,26 @@ class LambdaWrapperTest {
|
|||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
void test3() {
|
void test3() {
|
||||||
ThreadLocalUtils.set("SELECT t.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" t.pid,\n" +
|
SELECT t.id,
|
||||||
" t.`name`,\n" +
|
t.pid,
|
||||||
" t.`json`,\n" +
|
t.`name`,
|
||||||
" t.sex,\n" +
|
t.`json`,
|
||||||
" t.head_img,\n" +
|
t.sex,
|
||||||
" t.create_time,\n" +
|
t.head_img,
|
||||||
" t.address_id,\n" +
|
t.create_time,
|
||||||
" t.address_id2,\n" +
|
t.address_id,
|
||||||
" t.del,\n" +
|
t.address_id2,
|
||||||
" t.create_by,\n" +
|
t.del,
|
||||||
" t.update_by,\n" +
|
t.create_by,
|
||||||
" t1.address\n" +
|
t.update_by,
|
||||||
"FROM `user` t\n" +
|
t1.address
|
||||||
" LEFT JOIN address t1 ON (t.id = t1.user_id AND t.id = t1.user_id)\n" +
|
FROM `user` t
|
||||||
"WHERE t.del = false\n" +
|
LEFT JOIN address t1 ON (t.id = t1.user_id AND t.id = t1.user_id)
|
||||||
" AND t1.del = false\n" +
|
WHERE t.del = false
|
||||||
" AND (t.id = ? AND (t.head_img = ? OR t1.user_id = ?) AND t.id = ?)\n" +
|
AND t1.del = false
|
||||||
"LIMIT ?",
|
AND (t.id = ? AND (t.head_img = ? OR t1.user_id = ?) AND t.id = ?)
|
||||||
|
LIMIT ?""",
|
||||||
"SELECT * FROM ( SELECT TMP.*, ROWNUM ROW_ID FROM ( SELECT t.id, t.pid, t.`name`, t.`json`, t.sex, t.head_img, " +
|
"SELECT * FROM ( SELECT TMP.*, ROWNUM ROW_ID FROM ( SELECT t.id, t.pid, t.`name`, t.`json`, t.sex, t.head_img, " +
|
||||||
"t.create_time, t.address_id, t.address_id2, t.del, t.create_by, t.update_by, t1.address FROM `user` t " +
|
"t.create_time, t.address_id, t.address_id2, t.del, t.create_by, t.update_by, t1.address FROM `user` t " +
|
||||||
"LEFT JOIN address t1 ON (t.id = t1.user_id AND t.id = t1.user_id) WHERE t.del = false AND t1.del = false AND " +
|
"LEFT JOIN address t1 ON (t.id = t1.user_id AND t.id = t1.user_id) WHERE t.del = false AND t1.del = false AND " +
|
||||||
@ -795,36 +807,38 @@ class LambdaWrapperTest {
|
|||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
void logicDelType() {
|
void logicDelType() {
|
||||||
ThreadLocalUtils.set("SELECT t.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" t.pid,\n" +
|
SELECT t.id,
|
||||||
" t.`name`,\n" +
|
t.pid,
|
||||||
" t.`json`,\n" +
|
t.`name`,
|
||||||
" t.sex,\n" +
|
t.`json`,
|
||||||
" t.head_img,\n" +
|
t.sex,
|
||||||
" t.create_time,\n" +
|
t.head_img,
|
||||||
" t.address_id,\n" +
|
t.create_time,
|
||||||
" t.address_id2,\n" +
|
t.address_id,
|
||||||
" t.del,\n" +
|
t.address_id2,
|
||||||
" t.create_by,\n" +
|
t.del,
|
||||||
" t.update_by,\n" +
|
t.create_by,
|
||||||
" t1.id AS joina_id,\n" +
|
t.update_by,
|
||||||
" t1.user_id,\n" +
|
t1.id AS joina_id,
|
||||||
" t1.area_id,\n" +
|
t1.user_id,
|
||||||
" t1.tel,\n" +
|
t1.area_id,
|
||||||
" t1.address,\n" +
|
t1.tel,
|
||||||
" t1.del AS joina_del,\n" +
|
t1.address,
|
||||||
" t2.id AS joinb_id,\n" +
|
t1.del AS joina_del,
|
||||||
" t2.province,\n" +
|
t2.id AS joinb_id,
|
||||||
" t2.city,\n" +
|
t2.province,
|
||||||
" t2.area,\n" +
|
t2.city,
|
||||||
" t2.postcode,\n" +
|
t2.area,
|
||||||
" t2.del AS joinb_del\n" +
|
t2.postcode,
|
||||||
"FROM `user` t\n" +
|
t2.del AS joinb_del
|
||||||
" LEFT JOIN address t1 ON (t1.user_id = t.id AND t1.del = false)\n" +
|
FROM `user` t
|
||||||
" LEFT JOIN area t2 ON (t2.id = t1.area_id AND t2.del = false)\n" +
|
LEFT JOIN address t1 ON (t1.user_id = t.id AND t1.del = false)
|
||||||
"WHERE t.del = false\n" +
|
LEFT JOIN area t2 ON (t2.id = t1.area_id AND t2.del = false)
|
||||||
" AND (t.id <= ?)\n" +
|
WHERE t.del = false
|
||||||
"ORDER BY t.id DESC\n");
|
AND (t.id <= ?)
|
||||||
|
ORDER BY t.id DESC
|
||||||
|
""");
|
||||||
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
||||||
.logicDelToOn()
|
.logicDelToOn()
|
||||||
.selectAll(UserDO.class)
|
.selectAll(UserDO.class)
|
||||||
@ -846,36 +860,38 @@ class LambdaWrapperTest {
|
|||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
void joinWrapper() {
|
void joinWrapper() {
|
||||||
ThreadLocalUtils.set("SELECT t.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" t.pid,\n" +
|
SELECT t.id,
|
||||||
" t.`name`,\n" +
|
t.pid,
|
||||||
" t.`json`,\n" +
|
t.`name`,
|
||||||
" t.sex,\n" +
|
t.`json`,
|
||||||
" t.head_img,\n" +
|
t.sex,
|
||||||
" t.create_time,\n" +
|
t.head_img,
|
||||||
" t.address_id,\n" +
|
t.create_time,
|
||||||
" t.address_id2,\n" +
|
t.address_id,
|
||||||
" t.del,\n" +
|
t.address_id2,
|
||||||
" t.create_by,\n" +
|
t.del,
|
||||||
" t.update_by,\n" +
|
t.create_by,
|
||||||
" t1.id AS joina_id,\n" +
|
t.update_by,
|
||||||
" t1.user_id,\n" +
|
t1.id AS joina_id,
|
||||||
" t1.area_id,\n" +
|
t1.user_id,
|
||||||
" t1.tel,\n" +
|
t1.area_id,
|
||||||
" t1.address,\n" +
|
t1.tel,
|
||||||
" t1.del AS joina_del,\n" +
|
t1.address,
|
||||||
" t2.id AS joinb_id,\n" +
|
t1.del AS joina_del,
|
||||||
" t2.province,\n" +
|
t2.id AS joinb_id,
|
||||||
" t2.city,\n" +
|
t2.province,
|
||||||
" t2.area,\n" +
|
t2.city,
|
||||||
" t2.postcode,\n" +
|
t2.area,
|
||||||
" t2.del AS joinb_del\n" +
|
t2.postcode,
|
||||||
"FROM `user` t\n" +
|
t2.del AS joinb_del
|
||||||
" LEFT JOIN address t1 ON (t1.user_id = t.id AND t1.del = false)\n" +
|
FROM `user` t
|
||||||
" LEFT JOIN area t2 ON (t2.id = t1.area_id AND t2.del = false)\n" +
|
LEFT JOIN address t1 ON (t1.user_id = t.id AND t1.del = false)
|
||||||
"WHERE t.del = false\n" +
|
LEFT JOIN area t2 ON (t2.id = t1.area_id AND t2.del = false)
|
||||||
" AND (t.id <= ?)\n" +
|
WHERE t.del = false
|
||||||
"ORDER BY t.id DESC\n");
|
AND (t.id <= ?)
|
||||||
|
ORDER BY t.id DESC
|
||||||
|
""");
|
||||||
MPJLambdaWrapper<UserDO> wrapper = JoinWrappers.lambda(UserDO.class)
|
MPJLambdaWrapper<UserDO> wrapper = JoinWrappers.lambda(UserDO.class)
|
||||||
.logicDelToOn()
|
.logicDelToOn()
|
||||||
.selectAll(UserDO.class)
|
.selectAll(UserDO.class)
|
||||||
@ -960,7 +976,7 @@ class LambdaWrapperTest {
|
|||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
void joinOrder() {
|
void joinOrder() {
|
||||||
if (VersionUtils.compare(MybatisPlusVersion.getVersion(), "3.4.3") >= 0) {
|
if (VersionUtils.compare(VersionUtils.getVersion(), "3.4.3") >= 0) {
|
||||||
ThreadLocalUtils.set("SELECT id,user_id,name FROM order_t t ORDER BY t.name DESC",
|
ThreadLocalUtils.set("SELECT id,user_id,name FROM order_t t ORDER BY t.name DESC",
|
||||||
"SELECT t.id, t.user_id, t.name FROM order_t t ORDER BY t.name DESC",
|
"SELECT t.id, t.user_id, t.name FROM order_t t ORDER BY t.name DESC",
|
||||||
"SELECT id,user_id,name FROM order_t t ORDER BY t.name desc");
|
"SELECT id,user_id,name FROM order_t t ORDER BY t.name desc");
|
||||||
@ -971,7 +987,7 @@ class LambdaWrapperTest {
|
|||||||
MPJLambdaWrapper<OrderDO> wrapper = JoinWrappers.lambda(OrderDO.class);
|
MPJLambdaWrapper<OrderDO> wrapper = JoinWrappers.lambda(OrderDO.class);
|
||||||
List<OrderDO> list = wrapper.clone().list();
|
List<OrderDO> list = wrapper.clone().list();
|
||||||
|
|
||||||
if (VersionUtils.compare(MybatisPlusVersion.getVersion(), "3.4.3") >= 0) {
|
if (VersionUtils.compare(VersionUtils.getVersion(), "3.4.3") >= 0) {
|
||||||
ThreadLocalUtils.set("SELECT t.id,t.user_id,t.name,t1.`name` AS userName FROM order_t t LEFT JOIN `user` t1 ON (t1.id = t.user_id) WHERE t1.del=false ORDER BY t.name DESC",
|
ThreadLocalUtils.set("SELECT t.id,t.user_id,t.name,t1.`name` AS userName FROM order_t t LEFT JOIN `user` t1 ON (t1.id = t.user_id) WHERE t1.del=false ORDER BY t.name DESC",
|
||||||
"SELECT t.id,t.user_id,t.name,t1.`name` AS userName FROM order_t t LEFT JOIN `user` t1 ON (t1.id = t.user_id) WHERE t1.del=false ORDER BY t.name desc");
|
"SELECT t.id,t.user_id,t.name,t1.`name` AS userName FROM order_t t LEFT JOIN `user` t1 ON (t1.id = t.user_id) WHERE t1.del=false ORDER BY t.name desc");
|
||||||
} else {
|
} else {
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.github.yulichang.test.join.apt;
|
package com.github.yulichang.test.join.apt;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.MybatisPlusVersion;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||||
@ -93,38 +92,39 @@ class AptWrapperTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testJoin() {
|
void testJoin() {
|
||||||
ThreadLocalUtils.set("SELECT t.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" t.pid,\n" +
|
SELECT t.id,
|
||||||
" t.`name`,\n" +
|
t.pid,
|
||||||
" t.`json`,\n" +
|
t.`name`,
|
||||||
" t.sex,\n" +
|
t.`json`,
|
||||||
" t.head_img,\n" +
|
t.sex,
|
||||||
" t.create_time,\n" +
|
t.head_img,
|
||||||
" t.address_id,\n" +
|
t.create_time,
|
||||||
" t.address_id2,\n" +
|
t.address_id,
|
||||||
" t.del,\n" +
|
t.address_id2,
|
||||||
" t.create_by,\n" +
|
t.del,
|
||||||
" t.update_by,\n" +
|
t.create_by,
|
||||||
" t1.id AS joina_id,\n" +
|
t.update_by,
|
||||||
" t1.user_id,\n" +
|
t1.id AS joina_id,
|
||||||
" t1.area_id,\n" +
|
t1.user_id,
|
||||||
" t1.tel,\n" +
|
t1.area_id,
|
||||||
" t1.address,\n" +
|
t1.tel,
|
||||||
" t1.del AS joina_del,\n" +
|
t1.address,
|
||||||
" t2.id AS joinb_id,\n" +
|
t1.del AS joina_del,
|
||||||
" t2.province,\n" +
|
t2.id AS joinb_id,
|
||||||
" t2.city,\n" +
|
t2.province,
|
||||||
" t2.area,\n" +
|
t2.city,
|
||||||
" t2.postcode,\n" +
|
t2.area,
|
||||||
" t2.del AS joinb_del\n" +
|
t2.postcode,
|
||||||
"FROM `user` t\n" +
|
t2.del AS joinb_del
|
||||||
" LEFT JOIN address t1 ON (t1.user_id = t.id)\n" +
|
FROM `user` t
|
||||||
" LEFT JOIN area t2 ON (t2.id = t1.area_id)\n" +
|
LEFT JOIN address t1 ON (t1.user_id = t.id)
|
||||||
"WHERE t.del = false\n" +
|
LEFT JOIN area t2 ON (t2.id = t1.area_id)
|
||||||
" AND t1.del = false\n" +
|
WHERE t.del = false
|
||||||
" AND t2.del = false\n" +
|
AND t1.del = false
|
||||||
" AND (t.id <= ?)\n" +
|
AND t2.del = false
|
||||||
"ORDER BY t.id DESC");
|
AND (t.id <= ?)
|
||||||
|
ORDER BY t.id DESC""");
|
||||||
|
|
||||||
UserDOCol u = USERDO;
|
UserDOCol u = USERDO;
|
||||||
AddressDOCol addr = ADDRESSDO;
|
AddressDOCol addr = ADDRESSDO;
|
||||||
@ -152,25 +152,26 @@ class AptWrapperTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testJoinField() {
|
void testJoinField() {
|
||||||
ThreadLocalUtils.set("SELECT t.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" t.pid,\n" +
|
SELECT t.id,
|
||||||
" t.`name`,\n" +
|
t.pid,
|
||||||
" t.`json`,\n" +
|
t.`name`,
|
||||||
" t.sex,\n" +
|
t.`json`,
|
||||||
" t.head_img,\n" +
|
t.sex,
|
||||||
" t.create_time,\n" +
|
t.head_img,
|
||||||
" t.address_id,\n" +
|
t.create_time,
|
||||||
" t.address_id2,\n" +
|
t.address_id,
|
||||||
" t.del,\n" +
|
t.address_id2,
|
||||||
" t.create_by,\n" +
|
t.del,
|
||||||
" t.update_by,\n" +
|
t.create_by,
|
||||||
" t1.id AS joina_id\n" +
|
t.update_by,
|
||||||
"FROM `user` t\n" +
|
t1.id AS joina_id
|
||||||
" LEFT JOIN address t1 ON (t1.user_id = t.id)\n" +
|
FROM `user` t
|
||||||
"WHERE t.del = false\n" +
|
LEFT JOIN address t1 ON (t1.user_id = t.id)
|
||||||
" AND t1.del = false\n" +
|
WHERE t.del = false
|
||||||
" AND (t.id <= ?)\n" +
|
AND t1.del = false
|
||||||
"ORDER BY t.id DESC");
|
AND (t.id <= ?)
|
||||||
|
ORDER BY t.id DESC""");
|
||||||
|
|
||||||
UserDOCol u = USERDO;
|
UserDOCol u = USERDO;
|
||||||
AddressDOCol addr = ADDRESSDO;
|
AddressDOCol addr = ADDRESSDO;
|
||||||
@ -192,37 +193,38 @@ class AptWrapperTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testJoin1() {
|
void testJoin1() {
|
||||||
ThreadLocalUtils.set("SELECT t.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" t.pid,\n" +
|
SELECT t.id,
|
||||||
" t.`name`,\n" +
|
t.pid,
|
||||||
" t.`json`,\n" +
|
t.`name`,
|
||||||
" t.sex,\n" +
|
t.`json`,
|
||||||
" t.head_img,\n" +
|
t.sex,
|
||||||
" t.create_time,\n" +
|
t.head_img,
|
||||||
" t.address_id,\n" +
|
t.create_time,
|
||||||
" t.address_id2,\n" +
|
t.address_id,
|
||||||
" t.del,\n" +
|
t.address_id2,
|
||||||
" t.create_by,\n" +
|
t.del,
|
||||||
" t.update_by,\n" +
|
t.create_by,
|
||||||
" t1.id AS joina_id,\n" +
|
t.update_by,
|
||||||
" t1.user_id,\n" +
|
t1.id AS joina_id,
|
||||||
" t1.area_id,\n" +
|
t1.user_id,
|
||||||
" t1.tel,\n" +
|
t1.area_id,
|
||||||
" t1.address,\n" +
|
t1.tel,
|
||||||
" t1.del AS joina_del,\n" +
|
t1.address,
|
||||||
" t2.id AS joinb_id,\n" +
|
t1.del AS joina_del,
|
||||||
" t2.province,\n" +
|
t2.id AS joinb_id,
|
||||||
" t2.city,\n" +
|
t2.province,
|
||||||
" t2.area,\n" +
|
t2.city,
|
||||||
" t2.postcode,\n" +
|
t2.area,
|
||||||
" t2.del AS joinb_del\n" +
|
t2.postcode,
|
||||||
"FROM `user` t\n" +
|
t2.del AS joinb_del
|
||||||
" LEFT JOIN address t1 ON (t1.user_id = t.id)\n" +
|
FROM `user` t
|
||||||
" LEFT JOIN area t2 ON (t2.id = t1.area_id)\n" +
|
LEFT JOIN address t1 ON (t1.user_id = t.id)
|
||||||
"WHERE t.del = false\n" +
|
LEFT JOIN area t2 ON (t2.id = t1.area_id)
|
||||||
" AND t1.del = false\n" +
|
WHERE t.del = false
|
||||||
" AND t2.del = false\n" +
|
AND t1.del = false
|
||||||
"ORDER BY t.id DESC");
|
AND t2.del = false
|
||||||
|
ORDER BY t.id DESC""");
|
||||||
|
|
||||||
UserDOCol u = USERDO;
|
UserDOCol u = USERDO;
|
||||||
AddressDOCol addr = ADDRESSDO;
|
AddressDOCol addr = ADDRESSDO;
|
||||||
@ -246,13 +248,14 @@ class AptWrapperTest {
|
|||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
void testWrapper() {
|
void testWrapper() {
|
||||||
ThreadLocalUtils.set("SELECT t.id\n" +
|
ThreadLocalUtils.set("""
|
||||||
"FROM `user` t\n" +
|
SELECT t.id
|
||||||
" LEFT JOIN address t1 ON (t1.user_id = t.id)\n" +
|
FROM `user` t
|
||||||
" LEFT JOIN area t2 ON (t2.id = t1.area_id)\n" +
|
LEFT JOIN address t1 ON (t1.user_id = t.id)
|
||||||
"WHERE t.del = false\n" +
|
LEFT JOIN area t2 ON (t2.id = t1.area_id)
|
||||||
" AND t1.del = false\n" +
|
WHERE t.del = false
|
||||||
" AND t2.del = false");
|
AND t1.del = false
|
||||||
|
AND t2.del = false""");
|
||||||
|
|
||||||
UserDOCol u = USERDO;
|
UserDOCol u = USERDO;
|
||||||
AddressDOCol addr = ADDRESSDO;
|
AddressDOCol addr = ADDRESSDO;
|
||||||
@ -269,13 +272,14 @@ class AptWrapperTest {
|
|||||||
System.out.println(list);
|
System.out.println(list);
|
||||||
|
|
||||||
|
|
||||||
ThreadLocalUtils.set("SELECT t.create_time\n" +
|
ThreadLocalUtils.set("""
|
||||||
"FROM `user` t\n" +
|
SELECT t.create_time
|
||||||
" LEFT JOIN address t1 ON (t1.user_id = t.id)\n" +
|
FROM `user` t
|
||||||
" LEFT JOIN area t2 ON (t2.id = t1.area_id)\n" +
|
LEFT JOIN address t1 ON (t1.user_id = t.id)
|
||||||
"WHERE t.del = false\n" +
|
LEFT JOIN area t2 ON (t2.id = t1.area_id)
|
||||||
" AND t1.del = false\n" +
|
WHERE t.del = false
|
||||||
" AND t2.del = false");
|
AND t1.del = false
|
||||||
|
AND t2.del = false""");
|
||||||
//java.sql包下的类
|
//java.sql包下的类
|
||||||
AptQueryWrapper<UserDO> wrapper1 = new AptQueryWrapper<>(u)
|
AptQueryWrapper<UserDO> wrapper1 = new AptQueryWrapper<>(u)
|
||||||
.select(u.createTime)
|
.select(u.createTime)
|
||||||
@ -290,23 +294,24 @@ class AptWrapperTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testMSCache() {
|
void testMSCache() {
|
||||||
ThreadLocalUtils.set("SELECT t.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" t.pid,\n" +
|
SELECT t.id,
|
||||||
" t.`name`,\n" +
|
t.pid,
|
||||||
" t.`json`,\n" +
|
t.`name`,
|
||||||
" t.sex,\n" +
|
t.`json`,
|
||||||
" t.head_img,\n" +
|
t.sex,
|
||||||
" t.create_time,\n" +
|
t.head_img,
|
||||||
" t.address_id,\n" +
|
t.create_time,
|
||||||
" t.address_id2,\n" +
|
t.address_id,
|
||||||
" t.del,\n" +
|
t.address_id2,
|
||||||
" t.create_by,\n" +
|
t.del,
|
||||||
" t.update_by\n" +
|
t.create_by,
|
||||||
"FROM `user` t\n" +
|
t.update_by
|
||||||
"WHERE t.id = ?\n" +
|
FROM `user` t
|
||||||
" AND t.del = false\n" +
|
WHERE t.id = ?
|
||||||
" AND (t.id <= ?)\n" +
|
AND t.del = false
|
||||||
"ORDER BY t.id ASC, t.`name` ASC");
|
AND (t.id <= ?)
|
||||||
|
ORDER BY t.id ASC, t.`name` ASC""");
|
||||||
|
|
||||||
UserDOCol u = USERDO;
|
UserDOCol u = USERDO;
|
||||||
AddressDOCol addr = ADDRESSDO;
|
AddressDOCol addr = ADDRESSDO;
|
||||||
@ -325,21 +330,22 @@ class AptWrapperTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testTableAliasR() {
|
void testTableAliasR() {
|
||||||
ThreadLocalUtils.set("SELECT tt.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" tt.user_id,\n" +
|
SELECT tt.id,
|
||||||
" tt.create_by,\n" +
|
tt.user_id,
|
||||||
" tt.update_by,\n" +
|
tt.create_by,
|
||||||
" ua.`name` AS userName,\n" +
|
tt.update_by,
|
||||||
" ub.`name` AS createName,\n" +
|
ua.`name` AS userName,
|
||||||
" uc.`name` AS updateName\n" +
|
ub.`name` AS createName,
|
||||||
"FROM user_dto tt\n" +
|
uc.`name` AS updateName
|
||||||
" LEFT JOIN `user` ua ON (ua.id = tt.user_id)\n" +
|
FROM user_dto tt
|
||||||
" LEFT JOIN `user` ub ON (ub.id = tt.create_by)\n" +
|
LEFT JOIN `user` ua ON (ua.id = tt.user_id)
|
||||||
" LEFT JOIN `user` uc ON (uc.id = tt.update_by)\n" +
|
LEFT JOIN `user` ub ON (ub.id = tt.create_by)
|
||||||
"WHERE ua.del = false\n" +
|
LEFT JOIN `user` uc ON (uc.id = tt.update_by)
|
||||||
" AND ub.del = false\n" +
|
WHERE ua.del = false
|
||||||
" AND uc.del = false\n" +
|
AND ub.del = false
|
||||||
" AND (ua.id <= ? AND ub.id >= ?)");
|
AND uc.del = false
|
||||||
|
AND (ua.id <= ? AND ub.id >= ?)""");
|
||||||
|
|
||||||
UserDtoCol tt = UserDtoCol.build("tt");
|
UserDtoCol tt = UserDtoCol.build("tt");
|
||||||
UserDOCol ua = UserDOCol.build("ua");
|
UserDOCol ua = UserDOCol.build("ua");
|
||||||
@ -363,29 +369,30 @@ class AptWrapperTest {
|
|||||||
assert StringUtils.isNotBlank(userDtos.get(0).getUpdateName());
|
assert StringUtils.isNotBlank(userDtos.get(0).getUpdateName());
|
||||||
|
|
||||||
|
|
||||||
ThreadLocalUtils.set("SELECT tt.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" tt.pid,\n" +
|
SELECT tt.id,
|
||||||
" tt.`name`,\n" +
|
tt.pid,
|
||||||
" tt.`json`,\n" +
|
tt.`name`,
|
||||||
" tt.sex,\n" +
|
tt.`json`,
|
||||||
" tt.head_img,\n" +
|
tt.sex,
|
||||||
" tt.create_time,\n" +
|
tt.head_img,
|
||||||
" tt.address_id,\n" +
|
tt.create_time,
|
||||||
" tt.address_id2,\n" +
|
tt.address_id,
|
||||||
" tt.del,\n" +
|
tt.address_id2,
|
||||||
" tt.create_by,\n" +
|
tt.del,
|
||||||
" tt.update_by,\n" +
|
tt.create_by,
|
||||||
" ua.id,\n" +
|
tt.update_by,
|
||||||
" ub.head_img\n" +
|
ua.id,
|
||||||
"FROM `user` tt\n" +
|
ub.head_img
|
||||||
" LEFT JOIN `user` ua ON (ua.id = tt.pid)\n" +
|
FROM `user` tt
|
||||||
" LEFT JOIN `user` ub ON (ub.id = tt.create_by)\n" +
|
LEFT JOIN `user` ua ON (ua.id = tt.pid)
|
||||||
" LEFT JOIN `user` uc ON (uc.id = tt.update_by)\n" +
|
LEFT JOIN `user` ub ON (ub.id = tt.create_by)
|
||||||
"WHERE tt.del = false\n" +
|
LEFT JOIN `user` uc ON (uc.id = tt.update_by)
|
||||||
" AND ua.del = false\n" +
|
WHERE tt.del = false
|
||||||
" AND ub.del = false\n" +
|
AND ua.del = false
|
||||||
" AND uc.del = false\n" +
|
AND ub.del = false
|
||||||
" AND (ua.head_img = tt.`name` AND tt.id = ua.id)");
|
AND uc.del = false
|
||||||
|
AND (ua.head_img = tt.`name` AND tt.id = ua.id)""");
|
||||||
|
|
||||||
UserDOCol ut = UserDOCol.build("tt");
|
UserDOCol ut = UserDOCol.build("tt");
|
||||||
UserDOCol ua1 = UserDOCol.build("ua");
|
UserDOCol ua1 = UserDOCol.build("ua");
|
||||||
@ -411,34 +418,35 @@ class AptWrapperTest {
|
|||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
void testInner() {
|
void testInner() {
|
||||||
ThreadLocalUtils.set("SELECT t.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" t.pid,\n" +
|
SELECT t.id,
|
||||||
" t.`name`,\n" +
|
t.pid,
|
||||||
" t.`json`,\n" +
|
t.`name`,
|
||||||
" t.sex,\n" +
|
t.`json`,
|
||||||
" t.head_img,\n" +
|
t.sex,
|
||||||
" t.create_time,\n" +
|
t.head_img,
|
||||||
" t.address_id,\n" +
|
t.create_time,
|
||||||
" t.address_id2,\n" +
|
t.address_id,
|
||||||
" t.del,\n" +
|
t.address_id2,
|
||||||
" t.create_by,\n" +
|
t.del,
|
||||||
" t.update_by,\n" +
|
t.create_by,
|
||||||
" t1.id AS joina_id,\n" +
|
t.update_by,
|
||||||
" t1.pid AS joina_pid,\n" +
|
t1.id AS joina_id,
|
||||||
" t1.`name` AS joina_name,\n" +
|
t1.pid AS joina_pid,
|
||||||
" t1.`json` AS joina_json,\n" +
|
t1.`name` AS joina_name,
|
||||||
" t1.sex AS joina_sex,\n" +
|
t1.`json` AS joina_json,
|
||||||
" t1.head_img AS joina_head_img,\n" +
|
t1.sex AS joina_sex,
|
||||||
" t1.create_time AS joina_create_time,\n" +
|
t1.head_img AS joina_head_img,
|
||||||
" t1.address_id AS joina_address_id,\n" +
|
t1.create_time AS joina_create_time,
|
||||||
" t1.address_id2 AS joina_address_id2,\n" +
|
t1.address_id AS joina_address_id,
|
||||||
" t1.del AS joina_del,\n" +
|
t1.address_id2 AS joina_address_id2,
|
||||||
" t1.create_by AS joina_create_by,\n" +
|
t1.del AS joina_del,
|
||||||
" t1.update_by AS joina_update_by\n" +
|
t1.create_by AS joina_create_by,
|
||||||
"FROM `user` t\n" +
|
t1.update_by AS joina_update_by
|
||||||
" LEFT JOIN `user` t1 ON (t1.pid = t.id)\n" +
|
FROM `user` t
|
||||||
"WHERE t.del = false\n" +
|
LEFT JOIN `user` t1 ON (t1.pid = t.id)
|
||||||
" AND (t.id > ?)");
|
WHERE t.del = false
|
||||||
|
AND (t.id > ?)""");
|
||||||
|
|
||||||
UserDOCol u = USERDO;
|
UserDOCol u = USERDO;
|
||||||
UserDOCol ua = UserDOCol.build();
|
UserDOCol ua = UserDOCol.build();
|
||||||
@ -453,24 +461,25 @@ class AptWrapperTest {
|
|||||||
List<UserDO> list = userMapper.selectJoinList(UserDO.class, wrapper);
|
List<UserDO> list = userMapper.selectJoinList(UserDO.class, wrapper);
|
||||||
System.out.println(list);
|
System.out.println(list);
|
||||||
|
|
||||||
ThreadLocalUtils.set("SELECT t.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" t.pid,\n" +
|
SELECT t.id,
|
||||||
" t.`name`,\n" +
|
t.pid,
|
||||||
" t.`json`,\n" +
|
t.`name`,
|
||||||
" t.sex,\n" +
|
t.`json`,
|
||||||
" t.head_img,\n" +
|
t.sex,
|
||||||
" t.create_time,\n" +
|
t.head_img,
|
||||||
" t.address_id,\n" +
|
t.create_time,
|
||||||
" t.address_id2,\n" +
|
t.address_id,
|
||||||
" t.del,\n" +
|
t.address_id2,
|
||||||
" t.create_by,\n" +
|
t.del,
|
||||||
" t.update_by,\n" +
|
t.create_by,
|
||||||
" t1.`name` AS createName,\n" +
|
t.update_by,
|
||||||
" t2.`name` AS updateName\n" +
|
t1.`name` AS createName,
|
||||||
"FROM `user` t\n" +
|
t2.`name` AS updateName
|
||||||
" LEFT JOIN `user` t1 ON (t1.id = t.create_by)\n" +
|
FROM `user` t
|
||||||
" LEFT JOIN `user` t2 ON (t2.id = t.update_by)\n" +
|
LEFT JOIN `user` t1 ON (t1.id = t.create_by)
|
||||||
"WHERE (t2.id = t.update_by AND t.id = t1.id)");
|
LEFT JOIN `user` t2 ON (t2.id = t.update_by)
|
||||||
|
WHERE (t2.id = t.update_by AND t.id = t1.id)""");
|
||||||
|
|
||||||
UserDOCol uu = UserDOCol.build();
|
UserDOCol uu = UserDOCol.build();
|
||||||
UserDOCol uua = UserDOCol.build();
|
UserDOCol uua = UserDOCol.build();
|
||||||
@ -491,48 +500,49 @@ class AptWrapperTest {
|
|||||||
assert dos.get(0).getCreateName() != null && dos.get(0).getUpdateName() != null;
|
assert dos.get(0).getCreateName() != null && dos.get(0).getUpdateName() != null;
|
||||||
|
|
||||||
|
|
||||||
ThreadLocalUtils.set("SELECT t.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" t.pid,\n" +
|
SELECT t.id,
|
||||||
" t.`name`,\n" +
|
t.pid,
|
||||||
" t.`json`,\n" +
|
t.`name`,
|
||||||
" t.sex,\n" +
|
t.`json`,
|
||||||
" t.head_img,\n" +
|
t.sex,
|
||||||
" t.create_time,\n" +
|
t.head_img,
|
||||||
" t.address_id,\n" +
|
t.create_time,
|
||||||
" t.address_id2,\n" +
|
t.address_id,
|
||||||
" t.del,\n" +
|
t.address_id2,
|
||||||
" t.create_by,\n" +
|
t.del,
|
||||||
" t.update_by,\n" +
|
t.create_by,
|
||||||
" t1.`name` AS alias,\n" +
|
t.update_by,
|
||||||
" t1.id AS joina_id,\n" +
|
t1.`name` AS alias,
|
||||||
" t1.pid AS joina_pid,\n" +
|
t1.id AS joina_id,
|
||||||
" t1.`name` AS joina_name,\n" +
|
t1.pid AS joina_pid,
|
||||||
" t1.`json` AS joina_json,\n" +
|
t1.`name` AS joina_name,
|
||||||
" t1.sex AS joina_sex,\n" +
|
t1.`json` AS joina_json,
|
||||||
" t1.head_img AS joina_head_img,\n" +
|
t1.sex AS joina_sex,
|
||||||
" t1.create_time AS joina_create_time,\n" +
|
t1.head_img AS joina_head_img,
|
||||||
" t1.address_id AS joina_address_id,\n" +
|
t1.create_time AS joina_create_time,
|
||||||
" t1.address_id2 AS joina_address_id2,\n" +
|
t1.address_id AS joina_address_id,
|
||||||
" t1.del AS joina_del,\n" +
|
t1.address_id2 AS joina_address_id2,
|
||||||
" t1.create_by AS joina_create_by,\n" +
|
t1.del AS joina_del,
|
||||||
" t1.update_by AS joina_update_by,\n" +
|
t1.create_by AS joina_create_by,
|
||||||
" t2.id AS joinb_id,\n" +
|
t1.update_by AS joina_update_by,
|
||||||
" t2.pid AS joinb_pid,\n" +
|
t2.id AS joinb_id,
|
||||||
" t2.`name` AS joinb_name,\n" +
|
t2.pid AS joinb_pid,
|
||||||
" t2.`json` AS joinb_json,\n" +
|
t2.`name` AS joinb_name,
|
||||||
" t2.sex AS joinb_sex,\n" +
|
t2.`json` AS joinb_json,
|
||||||
" t2.head_img AS joinb_head_img,\n" +
|
t2.sex AS joinb_sex,
|
||||||
" t2.create_time AS joinb_create_time,\n" +
|
t2.head_img AS joinb_head_img,
|
||||||
" t2.address_id AS joinb_address_id,\n" +
|
t2.create_time AS joinb_create_time,
|
||||||
" t2.address_id2 AS joinb_address_id2,\n" +
|
t2.address_id AS joinb_address_id,
|
||||||
" t2.del AS joinb_del,\n" +
|
t2.address_id2 AS joinb_address_id2,
|
||||||
" t2.create_by AS joinb_create_by,\n" +
|
t2.del AS joinb_del,
|
||||||
" t2.update_by AS joinb_update_by\n" +
|
t2.create_by AS joinb_create_by,
|
||||||
"FROM `user` t\n" +
|
t2.update_by AS joinb_update_by
|
||||||
" LEFT JOIN `user` t1 ON (t1.pid = t.id)\n" +
|
FROM `user` t
|
||||||
" LEFT JOIN `user` t2 ON (t2.pid = t1.id)\n" +
|
LEFT JOIN `user` t1 ON (t1.pid = t.id)
|
||||||
"WHERE t.del = false\n" +
|
LEFT JOIN `user` t2 ON (t2.pid = t1.id)
|
||||||
" AND (t1.id <= ? AND t.id <= ?)");
|
WHERE t.del = false
|
||||||
|
AND (t1.id <= ? AND t.id <= ?)""");
|
||||||
|
|
||||||
UserDOCol uuu = UserDOCol.build();
|
UserDOCol uuu = UserDOCol.build();
|
||||||
UserDOCol uuua = UserDOCol.build();
|
UserDOCol uuua = UserDOCol.build();
|
||||||
@ -628,28 +638,29 @@ class AptWrapperTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testTableAlias() {
|
void testTableAlias() {
|
||||||
ThreadLocalUtils.set("SELECT t.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" t.pid,\n" +
|
SELECT t.id,
|
||||||
" t.`name`,\n" +
|
t.pid,
|
||||||
" t.`json`,\n" +
|
t.`name`,
|
||||||
" t.sex,\n" +
|
t.`json`,
|
||||||
" t.head_img,\n" +
|
t.sex,
|
||||||
" t.create_time,\n" +
|
t.head_img,
|
||||||
" t.address_id,\n" +
|
t.create_time,
|
||||||
" t.address_id2,\n" +
|
t.address_id,
|
||||||
" t.del,\n" +
|
t.address_id2,
|
||||||
" t.create_by,\n" +
|
t.del,
|
||||||
" t.update_by,\n" +
|
t.create_by,
|
||||||
" aa.id,\n" +
|
t.update_by,
|
||||||
" aa.user_id,\n" +
|
aa.id,
|
||||||
" aa.area_id,\n" +
|
aa.user_id,
|
||||||
" aa.tel,\n" +
|
aa.area_id,
|
||||||
" aa.address,\n" +
|
aa.tel,
|
||||||
" aa.del\n" +
|
aa.address,
|
||||||
"FROM `user` t\n" +
|
aa.del
|
||||||
" LEFT JOIN address aa ON (aa.user_id = t.id)\n" +
|
FROM `user` t
|
||||||
"WHERE t.del = false\n" +
|
LEFT JOIN address aa ON (aa.user_id = t.id)
|
||||||
" AND aa.del = false");
|
WHERE t.del = false
|
||||||
|
AND aa.del = false""");
|
||||||
|
|
||||||
UserDOCol u = UserDOCol.build();
|
UserDOCol u = UserDOCol.build();
|
||||||
AddressDOCol addr = AddressDOCol.build("aa");
|
AddressDOCol addr = AddressDOCol.build("aa");
|
||||||
@ -711,25 +722,26 @@ class AptWrapperTest {
|
|||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
void test3() {
|
void test3() {
|
||||||
ThreadLocalUtils.set("SELECT t.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" t.pid,\n" +
|
SELECT t.id,
|
||||||
" t.`name`,\n" +
|
t.pid,
|
||||||
" t.`json`,\n" +
|
t.`name`,
|
||||||
" t.sex,\n" +
|
t.`json`,
|
||||||
" t.head_img,\n" +
|
t.sex,
|
||||||
" t.create_time,\n" +
|
t.head_img,
|
||||||
" t.address_id,\n" +
|
t.create_time,
|
||||||
" t.address_id2,\n" +
|
t.address_id,
|
||||||
" t.del,\n" +
|
t.address_id2,
|
||||||
" t.create_by,\n" +
|
t.del,
|
||||||
" t.update_by,\n" +
|
t.create_by,
|
||||||
" t1.address\n" +
|
t.update_by,
|
||||||
"FROM `user` t\n" +
|
t1.address
|
||||||
" LEFT JOIN address t1 ON (t.id = t1.user_id AND t.id = t1.user_id)\n" +
|
FROM `user` t
|
||||||
"WHERE t.del = false\n" +
|
LEFT JOIN address t1 ON (t.id = t1.user_id AND t.id = t1.user_id)
|
||||||
" AND t1.del = false\n" +
|
WHERE t.del = false
|
||||||
" AND (t.id = ? AND (t.head_img = ? OR t1.user_id = ?) AND t.id = ?)\n" +
|
AND t1.del = false
|
||||||
"LIMIT ?",
|
AND (t.id = ? AND (t.head_img = ? OR t1.user_id = ?) AND t.id = ?)
|
||||||
|
LIMIT ?""",
|
||||||
"SELECT * FROM ( SELECT TMP.*, ROWNUM ROW_ID FROM ( SELECT t.id, t.pid, t.`name`, t.`json`, t.sex, t.head_img, " +
|
"SELECT * FROM ( SELECT TMP.*, ROWNUM ROW_ID FROM ( SELECT t.id, t.pid, t.`name`, t.`json`, t.sex, t.head_img, " +
|
||||||
"t.create_time, t.address_id, t.address_id2, t.del, t.create_by, t.update_by, t1.address FROM `user` t " +
|
"t.create_time, t.address_id, t.address_id2, t.del, t.create_by, t.update_by, t1.address FROM `user` t " +
|
||||||
"LEFT JOIN address t1 ON (t.id = t1.user_id AND t.id = t1.user_id) WHERE t.del = false AND t1.del = false AND " +
|
"LEFT JOIN address t1 ON (t.id = t1.user_id AND t.id = t1.user_id) WHERE t.del = false AND t1.del = false AND " +
|
||||||
@ -895,36 +907,38 @@ class AptWrapperTest {
|
|||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
void logicDelType() {
|
void logicDelType() {
|
||||||
ThreadLocalUtils.set("SELECT t.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" t.pid,\n" +
|
SELECT t.id,
|
||||||
" t.`name`,\n" +
|
t.pid,
|
||||||
" t.`json`,\n" +
|
t.`name`,
|
||||||
" t.sex,\n" +
|
t.`json`,
|
||||||
" t.head_img,\n" +
|
t.sex,
|
||||||
" t.create_time,\n" +
|
t.head_img,
|
||||||
" t.address_id,\n" +
|
t.create_time,
|
||||||
" t.address_id2,\n" +
|
t.address_id,
|
||||||
" t.del,\n" +
|
t.address_id2,
|
||||||
" t.create_by,\n" +
|
t.del,
|
||||||
" t.update_by,\n" +
|
t.create_by,
|
||||||
" t1.id AS joina_id,\n" +
|
t.update_by,
|
||||||
" t1.user_id,\n" +
|
t1.id AS joina_id,
|
||||||
" t1.area_id,\n" +
|
t1.user_id,
|
||||||
" t1.tel,\n" +
|
t1.area_id,
|
||||||
" t1.address,\n" +
|
t1.tel,
|
||||||
" t1.del AS joina_del,\n" +
|
t1.address,
|
||||||
" t2.id AS joinb_id,\n" +
|
t1.del AS joina_del,
|
||||||
" t2.province,\n" +
|
t2.id AS joinb_id,
|
||||||
" t2.city,\n" +
|
t2.province,
|
||||||
" t2.area,\n" +
|
t2.city,
|
||||||
" t2.postcode,\n" +
|
t2.area,
|
||||||
" t2.del AS joinb_del\n" +
|
t2.postcode,
|
||||||
"FROM `user` t\n" +
|
t2.del AS joinb_del
|
||||||
" LEFT JOIN address t1 ON (t1.user_id = t.id AND t1.del = false)\n" +
|
FROM `user` t
|
||||||
" LEFT JOIN area t2 ON (t2.id = t1.area_id AND t2.del = false)\n" +
|
LEFT JOIN address t1 ON (t1.user_id = t.id AND t1.del = false)
|
||||||
"WHERE t.del = false\n" +
|
LEFT JOIN area t2 ON (t2.id = t1.area_id AND t2.del = false)
|
||||||
" AND (t.id <= ?)\n" +
|
WHERE t.del = false
|
||||||
"ORDER BY t.id DESC\n");
|
AND (t.id <= ?)
|
||||||
|
ORDER BY t.id DESC
|
||||||
|
""");
|
||||||
UserDOCol u = UserDOCol.build();
|
UserDOCol u = UserDOCol.build();
|
||||||
AddressDOCol addr = AddressDOCol.build();
|
AddressDOCol addr = AddressDOCol.build();
|
||||||
AreaDOCol ar = AreaDOCol.build();
|
AreaDOCol ar = AreaDOCol.build();
|
||||||
@ -948,36 +962,38 @@ class AptWrapperTest {
|
|||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
void joinWrapper() {
|
void joinWrapper() {
|
||||||
ThreadLocalUtils.set("SELECT t.id,\n" +
|
ThreadLocalUtils.set("""
|
||||||
" t.pid,\n" +
|
SELECT t.id,
|
||||||
" t.`name`,\n" +
|
t.pid,
|
||||||
" t.`json`,\n" +
|
t.`name`,
|
||||||
" t.sex,\n" +
|
t.`json`,
|
||||||
" t.head_img,\n" +
|
t.sex,
|
||||||
" t.create_time,\n" +
|
t.head_img,
|
||||||
" t.address_id,\n" +
|
t.create_time,
|
||||||
" t.address_id2,\n" +
|
t.address_id,
|
||||||
" t.del,\n" +
|
t.address_id2,
|
||||||
" t.create_by,\n" +
|
t.del,
|
||||||
" t.update_by,\n" +
|
t.create_by,
|
||||||
" t1.id AS joina_id,\n" +
|
t.update_by,
|
||||||
" t1.user_id,\n" +
|
t1.id AS joina_id,
|
||||||
" t1.area_id,\n" +
|
t1.user_id,
|
||||||
" t1.tel,\n" +
|
t1.area_id,
|
||||||
" t1.address,\n" +
|
t1.tel,
|
||||||
" t1.del AS joina_del,\n" +
|
t1.address,
|
||||||
" t2.id AS joinb_id,\n" +
|
t1.del AS joina_del,
|
||||||
" t2.province,\n" +
|
t2.id AS joinb_id,
|
||||||
" t2.city,\n" +
|
t2.province,
|
||||||
" t2.area,\n" +
|
t2.city,
|
||||||
" t2.postcode,\n" +
|
t2.area,
|
||||||
" t2.del AS joinb_del\n" +
|
t2.postcode,
|
||||||
"FROM `user` t\n" +
|
t2.del AS joinb_del
|
||||||
" LEFT JOIN address t1 ON (t1.user_id = t.id AND t1.del = false)\n" +
|
FROM `user` t
|
||||||
" LEFT JOIN area t2 ON (t2.id = t1.area_id AND t2.del = false)\n" +
|
LEFT JOIN address t1 ON (t1.user_id = t.id AND t1.del = false)
|
||||||
"WHERE t.del = false\n" +
|
LEFT JOIN area t2 ON (t2.id = t1.area_id AND t2.del = false)
|
||||||
" AND (t.id <= ?)\n" +
|
WHERE t.del = false
|
||||||
"ORDER BY t.id DESC\n");
|
AND (t.id <= ?)
|
||||||
|
ORDER BY t.id DESC
|
||||||
|
""");
|
||||||
UserDOCol u = UserDOCol.build();
|
UserDOCol u = UserDOCol.build();
|
||||||
AddressDOCol addr = AddressDOCol.build();
|
AddressDOCol addr = AddressDOCol.build();
|
||||||
AreaDOCol ar = AreaDOCol.build();
|
AreaDOCol ar = AreaDOCol.build();
|
||||||
@ -1077,7 +1093,7 @@ class AptWrapperTest {
|
|||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
void joinOrder() {
|
void joinOrder() {
|
||||||
if (VersionUtils.compare(MybatisPlusVersion.getVersion(), "3.4.3") >= 0) {
|
if (VersionUtils.compare(VersionUtils.getVersion(), "3.4.3") >= 0) {
|
||||||
ThreadLocalUtils.set("SELECT id,user_id,name FROM order_t t ORDER BY t.name DESC",
|
ThreadLocalUtils.set("SELECT id,user_id,name FROM order_t t ORDER BY t.name DESC",
|
||||||
"SELECT t.id, t.user_id, t.name FROM order_t t ORDER BY t.name DESC",
|
"SELECT t.id, t.user_id, t.name FROM order_t t ORDER BY t.name DESC",
|
||||||
"SELECT id,user_id,name FROM order_t t ORDER BY t.name desc");
|
"SELECT id,user_id,name FROM order_t t ORDER BY t.name desc");
|
||||||
@ -1089,7 +1105,7 @@ class AptWrapperTest {
|
|||||||
AptQueryWrapper<OrderDO> wrapper = AptWrappers.query(o);
|
AptQueryWrapper<OrderDO> wrapper = AptWrappers.query(o);
|
||||||
List<OrderDO> list = wrapper.list();
|
List<OrderDO> list = wrapper.list();
|
||||||
|
|
||||||
if (VersionUtils.compare(MybatisPlusVersion.getVersion(), "3.4.3") >= 0) {
|
if (VersionUtils.compare(VersionUtils.getVersion(), "3.4.3") >= 0) {
|
||||||
ThreadLocalUtils.set("SELECT t.id,t.user_id,t.name,t1.`name` AS userName FROM order_t t LEFT JOIN `user` t1 ON (t1.id = t.user_id) WHERE t1.del=false ORDER BY t.name DESC",
|
ThreadLocalUtils.set("SELECT t.id,t.user_id,t.name,t1.`name` AS userName FROM order_t t LEFT JOIN `user` t1 ON (t1.id = t.user_id) WHERE t1.del=false ORDER BY t.name DESC",
|
||||||
"SELECT t.id,t.user_id,t.name,t1.`name` AS userName FROM order_t t LEFT JOIN `user` t1 ON (t1.id = t.user_id) WHERE t1.del=false ORDER BY t.name desc");
|
"SELECT t.id,t.user_id,t.name,t1.`name` AS userName FROM order_t t LEFT JOIN `user` t1 ON (t1.id = t.user_id) WHERE t1.del=false ORDER BY t.name desc");
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user