docs 优化mybatis注释

2.X
AprilWind 8 months ago
parent a8414344f5
commit 075a41cdb0

@ -3,9 +3,10 @@ package org.dromara.common.mybatis.annotation;
import java.lang.annotation.*;
/**
*
*
*
* <p>
*
* </p>
*
* @author Lion Li
* @version 3.5.0
@ -16,12 +17,16 @@ import java.lang.annotation.*;
public @interface DataColumn {
/**
*
* "deptName"
*
* @return
*/
String[] key() default "deptName";
/**
*
* "dept_id"
*
* @return
*/
String[] value() default "dept_id";

@ -3,7 +3,7 @@ package org.dromara.common.mybatis.annotation;
import java.lang.annotation.*;
/**
*
*
*
* @author Lion Li
* @version 3.5.0
@ -13,6 +13,11 @@ import java.lang.annotation.*;
@Documented
public @interface DataPermission {
/**
*
*
* @return
*/
DataColumn[] value();
}

@ -17,7 +17,6 @@ import java.util.Map;
*
* @author Lion Li
*/
@Data
public class BaseEntity implements Serializable {

@ -34,20 +34,42 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
Log log = LogFactory.getLog(BaseMapperPlus.class);
/**
* V Class
* <p>
* 使 BaseMapperPlus V Class
*
* @return V Class
*/
default Class<V> currentVoClass() {
return (Class<V>) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseMapperPlus.class, 1);
}
/**
* T Class
* <p>
* 使 BaseMapperPlus T Class
*
* @return T Class
*/
default Class<T> currentModelClass() {
return (Class<T>) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseMapperPlus.class, 0);
}
/**
* 使
*
* @return
*/
default List<T> selectList() {
return this.selectList(new QueryWrapper<>());
}
/**
*
*
*
* @param entityList
* @return
*/
default boolean insertBatch(Collection<T> entityList) {
Db.saveBatch(entityList);
@ -56,7 +78,10 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
}
/**
*
* ID
*
* @param entityList
* @return
*/
default boolean updateBatchById(Collection<T> entityList) {
Db.updateBatchById(entityList);
@ -65,7 +90,10 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
}
/**
*
*
*
* @param entityList
* @return
*/
default boolean insertOrUpdateBatch(Collection<T> entityList) {
Db.saveOrUpdateBatch(entityList);
@ -74,7 +102,11 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
}
/**
* ()
*
*
* @param entityList
* @param batchSize
* @return
*/
default boolean insertBatch(Collection<T> entityList, int batchSize) {
Db.saveBatch(entityList, batchSize);
@ -83,7 +115,11 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
}
/**
* ()
* ID
*
* @param entityList
* @param batchSize
* @return
*/
default boolean updateBatchById(Collection<T> entityList, int batchSize) {
Db.updateBatchById(entityList, batchSize);
@ -92,7 +128,11 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
}
/**
* ()
*
*
* @param entityList
* @param batchSize
* @return
*/
default boolean insertOrUpdateBatch(Collection<T> entityList, int batchSize) {
Db.saveOrUpdateBatch(entityList, batchSize);
@ -100,12 +140,23 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
return true;
}
/**
* IDVO
*
* @param id ID
* @return VO
*/
default V selectVoById(Serializable id) {
return selectVoById(id, this.currentVoClass());
}
/**
* ID
* IDVOVO
*
* @param id ID
* @param voClass VOClass
* @param <C> VO
* @return VOVO
*/
default <C> C selectVoById(Serializable id, Class<C> voClass) {
T obj = this.selectById(id);
@ -115,12 +166,23 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
return MapstructUtils.convert(obj, voClass);
}
/**
* IDVO
*
* @param idList ID
* @return VO
*/
default List<V> selectVoBatchIds(Collection<? extends Serializable> idList) {
return selectVoBatchIds(idList, this.currentVoClass());
}
/**
* ID
* IDVO
*
* @param idList ID
* @param voClass VOClass
* @param <C> VO
* @return VOVO
*/
default <C> List<C> selectVoBatchIds(Collection<? extends Serializable> idList, Class<C> voClass) {
List<T> list = this.selectBatchIds(idList);
@ -130,12 +192,23 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
return MapstructUtils.convert(list, voClass);
}
/**
* MapVO
*
* @param map Map
* @return VO
*/
default List<V> selectVoByMap(Map<String, Object> map) {
return selectVoByMap(map, this.currentVoClass());
}
/**
* columnMap
* MapVO
*
* @param map Map
* @param voClass VOClass
* @param <C> VO
* @return VOVO
*/
default <C> List<C> selectVoByMap(Map<String, Object> map, Class<C> voClass) {
List<T> list = this.selectByMap(map);
@ -145,16 +218,34 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
return MapstructUtils.convert(list, voClass);
}
/**
* VO
*
* @param wrapper Wrapper
* @return VO
*/
default V selectVoOne(Wrapper<T> wrapper) {
return selectVoOne(wrapper, this.currentVoClass());
}
/**
* VO
*
* @param wrapper Wrapper
* @param throwEx
* @return VO
*/
default V selectVoOne(Wrapper<T> wrapper, boolean throwEx) {
return selectVoOne(wrapper, this.currentVoClass(), throwEx);
}
/**
* entity
* VOVO
*
* @param wrapper Wrapper
* @param voClass VOClass
* @param <C> VO
* @return VOVO
*/
default <C> C selectVoOne(Wrapper<T> wrapper, Class<C> voClass) {
T obj = this.selectOne(wrapper);
@ -165,7 +256,13 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
}
/**
* entity
* VO
*
* @param wrapper Wrapper
* @param voClass VOClass
* @param throwEx
* @param <C> VO
* @return VOVO
*/
default <C> C selectVoOne(Wrapper<T> wrapper, Class<C> voClass, boolean throwEx) {
T obj = this.selectOne(wrapper, throwEx);
@ -175,16 +272,32 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
return MapstructUtils.convert(obj, voClass);
}
/**
* VO
*
* @return VO
*/
default List<V> selectVoList() {
return selectVoList(new QueryWrapper<>(), this.currentVoClass());
}
/**
* VO
*
* @param wrapper Wrapper
* @return VO
*/
default List<V> selectVoList(Wrapper<T> wrapper) {
return selectVoList(wrapper, this.currentVoClass());
}
/**
* entity
* VO
*
* @param wrapper Wrapper
* @param voClass VOClass
* @param <C> VO
* @return VOVO
*/
default <C> List<C> selectVoList(Wrapper<T> wrapper, Class<C> voClass) {
List<T> list = this.selectList(wrapper);
@ -194,15 +307,31 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
return MapstructUtils.convert(list, voClass);
}
/**
* VO
*
* @param page
* @param wrapper Wrapper
* @return VO
*/
default <P extends IPage<V>> P selectVoPage(IPage<T> page, Wrapper<T> wrapper) {
return selectVoPage(page, wrapper, this.currentVoClass());
}
/**
* VO
* VO
*
* @param page
* @param wrapper Wrapper
* @param voClass VOClass
* @param <C> VO
* @param <P> VO
* @return VOVO
*/
default <C, P extends IPage<C>> P selectVoPage(IPage<T> page, Wrapper<T> wrapper, Class<C> voClass) {
// 根据条件分页查询实体对象列表
List<T> list = this.selectList(page, wrapper);
// 创建一个新的VO对象分页列表并设置分页信息
IPage<C> voPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
if (CollUtil.isEmpty(list)) {
return (P) voPage;
@ -211,6 +340,14 @@ public interface BaseMapperPlus<T, V> extends BaseMapper<T> {
return (P) voPage;
}
/**
*
*
* @param wrapper Wrapper
* @param mapper
* @param <C>
* @return
*/
default <C> List<C> selectObjs(Wrapper<T> wrapper, Function<? super Object, C> mapper) {
return this.selectObjs(wrapper).stream().filter(Objects::nonNull).map(mapper).collect(Collectors.toList());
}

@ -20,7 +20,6 @@ import java.util.List;
*
* @author Lion Li
*/
@Data
@NoArgsConstructor
public class PageQuery implements Serializable {
@ -58,6 +57,9 @@ public class PageQuery implements Serializable {
*/
public static final int DEFAULT_PAGE_SIZE = Integer.MAX_VALUE;
/**
*
*/
public <T> Page<T> build() {
Integer pageNum = ObjectUtil.defaultIfNull(getPageNum(), DEFAULT_PAGE_NUM);
Integer pageSize = ObjectUtil.defaultIfNull(getPageSize(), DEFAULT_PAGE_SIZE);

@ -14,7 +14,6 @@ import java.util.List;
*
* @author Lion Li
*/
@Data
@NoArgsConstructor
public class TableDataInfo<T> implements Serializable {
@ -53,6 +52,9 @@ public class TableDataInfo<T> implements Serializable {
this.total = total;
}
/**
*
*/
public static <T> TableDataInfo<T> build(IPage<T> page) {
TableDataInfo<T> rspData = new TableDataInfo<>();
rspData.setCode(HttpStatus.HTTP_OK);
@ -62,6 +64,9 @@ public class TableDataInfo<T> implements Serializable {
return rspData;
}
/**
*
*/
public static <T> TableDataInfo<T> build(List<T> list) {
TableDataInfo<T> rspData = new TableDataInfo<>();
rspData.setCode(HttpStatus.HTTP_OK);
@ -71,6 +76,9 @@ public class TableDataInfo<T> implements Serializable {
return rspData;
}
/**
*
*/
public static <T> TableDataInfo<T> build() {
TableDataInfo<T> rspData = new TableDataInfo<>();
rspData.setCode(HttpStatus.HTTP_OK);

@ -1,8 +1,8 @@
package org.dromara.common.mybatis.enums;
import org.dromara.common.core.utils.StringUtils;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.dromara.common.core.utils.StringUtils;
/**
*
@ -33,8 +33,17 @@ public enum DataBaseType {
*/
SQL_SERVER("Microsoft SQL Server");
/**
*
*/
private final String type;
/**
*
*
* @param databaseProductName
* @return null
*/
public static DataBaseType find(String databaseProductName) {
if (StringUtils.isBlank(databaseProductName)) {
return null;

@ -1,19 +1,23 @@
package org.dromara.common.mybatis.enums;
import org.dromara.common.core.utils.StringUtils;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.helper.DataPermissionHelper;
import org.dromara.common.mybatis.service.SysDataScopeService;
import org.dromara.system.api.model.LoginUser;
/**
*
* <p>
* spel
*
* <p>
* user LoginUser
* 使 {@link DataPermissionHelper}
* sdss SysDataScopeService
* sdss
* 使 SpEL SQL
*
* - {@code user}: {@link LoginUser}
*
* - {@code sdss}: {@link SysDataScopeService}
* {@link DataPermissionHelper}
* {@link SysDataScopeService}
* </p>
*
* @author Lion Li
* @version 3.5.0
@ -29,36 +33,50 @@ public enum DataScopeType {
/**
*
* 使 SpEL `#{#deptName} IN ( #{@sdss.getRoleCustom( #user.roleId )} )`
* 使 SQL `1 = 0`
*/
CUSTOM("2", " #{#deptName} IN ( #{@sdss.getRoleCustom( #user.roleId )} ) ", " 1 = 0 "),
/**
*
* 使 SpEL `#{#deptName} = #{#user.deptId}`
* 使 SQL `1 = 0`
*/
DEPT("3", " #{#deptName} = #{#user.deptId} ", " 1 = 0 "),
/**
*
* 使 SpEL `#{#deptName} IN ( #{@sdss.getDeptAndChild( #user.deptId )}`
* 使 SQL `1 = 0`
*/
DEPT_AND_CHILD("4", " #{#deptName} IN ( #{@sdss.getDeptAndChild( #user.deptId )} )", " 1 = 0 "),
/**
*
* 使 SpEL `#{#userName} = #{#user.userId}`
* 使 SQL `1 = 0`
*/
SELF("5", " #{#userName} = #{#user.userId} ", " 1 = 0 ");
private final String code;
/**
* spel
* SpEL SQL
*/
private final String sqlTemplate;
/**
* sqlTemplate
* {@code sqlTemplate} 使 SQL
*/
private final String elseSql;
/**
*
*
* @param code
* @return null
*/
public static DataScopeType findCode(String code) {
if (StringUtils.isBlank(code)) {
return null;

@ -20,22 +20,28 @@ import java.util.Date;
@Slf4j
public class InjectionMetaObjectHandler implements MetaObjectHandler {
/**
*
*
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
try {
if (ObjectUtil.isNotNull(metaObject)
&& metaObject.getOriginalObject() instanceof BaseEntity baseEntity) {
if (ObjectUtil.isNotNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity baseEntity) {
// 获取当前时间作为创建时间和更新时间,如果创建时间不为空,则使用创建时间,否则使用当前时间
Date current = ObjectUtil.isNotNull(baseEntity.getCreateTime())
? baseEntity.getCreateTime() : new Date();
baseEntity.setCreateTime(current);
baseEntity.setUpdateTime(current);
// 如果创建人为空,则填充当前登录用户的信息
if (ObjectUtil.isNull(baseEntity.getCreateBy())) {
LoginUser loginUser = getLoginUser();
if (ObjectUtil.isNotNull(loginUser)) {
Long userId = loginUser.getUserId();
// 当前已登录 且 创建人为空 则填充
// 填充创建人、更新人和创建部门信息
baseEntity.setCreateBy(userId);
// 当前已登录 且 更新人为空 则填充
baseEntity.setUpdateBy(userId);
baseEntity.setCreateDept(ObjectUtil.isNotNull(baseEntity.getCreateDept())
? baseEntity.getCreateDept() : loginUser.getDeptId());
@ -47,15 +53,20 @@ public class InjectionMetaObjectHandler implements MetaObjectHandler {
}
}
/**
*
*
* @param metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
try {
if (ObjectUtil.isNotNull(metaObject)
&& metaObject.getOriginalObject() instanceof BaseEntity baseEntity) {
if (ObjectUtil.isNotNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity baseEntity) {
// 获取当前时间作为更新时间,无论原始对象中的更新时间是否为空都填充
Date current = new Date();
// 更新时间填充(不管为不为空)
baseEntity.setUpdateTime(current);
// 当前已登录 更新人填充(不管为不为空)
// 获取当前登录用户的ID并填充更新人信息
Long userId = LoginHelper.getUserId();
if (ObjectUtil.isNotNull(userId)) {
baseEntity.setUpdateBy(userId);
@ -67,7 +78,9 @@ public class InjectionMetaObjectHandler implements MetaObjectHandler {
}
/**
*
*
*
* @return null
*/
private LoginUser getLoginUser() {
LoginUser loginUser;

@ -1,15 +1,14 @@
package org.dromara.common.mybatis.handler;
import org.dromara.common.core.domain.R;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.utils.StringUtils;
import org.mybatis.spring.MyBatisSystemException;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import jakarta.servlet.http.HttpServletRequest;
/**
* Mybatis
*

@ -68,13 +68,27 @@ public class PlusDataPermissionHandler {
*/
private final BeanResolver beanResolver = new BeanFactoryResolver(SpringUtils.getBeanFactory());
/**
* Mapper
*
* @param mapperPackage Mapper
*/
public PlusDataPermissionHandler(String mapperPackage) {
scanMapperClasses(mapperPackage);
}
/**
* SQL
*
* @param where
* @param mappedStatementId Mapper ID
* @param isSelect
* @return SQL
*/
public Expression getSqlSegment(Expression where, String mappedStatementId, boolean isSelect) {
// 获取数据权限配置
DataPermission dataPermission = getDataPermission(mappedStatementId);
// 获取当前登录用户信息
LoginUser currentUser = DataPermissionHelper.getVariable("user");
if (ObjectUtil.isNull(currentUser)) {
currentUser = LoginHelper.getLoginUser();
@ -84,6 +98,7 @@ public class PlusDataPermissionHandler {
if (LoginHelper.isSuperAdmin() || LoginHelper.isTenantAdmin()) {
return where;
}
// 构造数据过滤条件的 SQL 片段
String dataFilterSql = buildDataFilter(dataPermission.value(), isSelect);
if (StringUtils.isBlank(dataFilterSql)) {
return where;
@ -103,7 +118,12 @@ public class PlusDataPermissionHandler {
}
/**
* sql
* SQL
*
* @param dataColumns
* @param isSelect
* @return SQL
* @throws ServiceException key value ServiceException
*/
private String buildDataFilter(DataColumn[] dataColumns, boolean isSelect) {
// 更新或删除需满足所有条件
@ -159,20 +179,29 @@ public class PlusDataPermissionHandler {
}
/**
* mapperPackage
* Mapper
*
* @param mapperPackage Mapper
*/
private void scanMapperClasses(String mapperPackage) {
// 创建资源解析器和元数据读取工厂
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
CachingMetadataReaderFactory factory = new CachingMetadataReaderFactory();
// 将 Mapper 包路径按分隔符拆分为数组
String[] packagePatternArray = StringUtils.splitPreserveAllTokens(mapperPackage, ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS);
String classpath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX;
try {
for (String packagePattern : packagePatternArray) {
// 将包路径转换为资源路径
String path = ClassUtils.convertClassNameToResourcePath(packagePattern);
// 获取指定路径下的所有 .class 文件资源
Resource[] resources = resolver.getResources(classpath + path + "/*.class");
for (Resource resource : resources) {
// 获取资源的类元数据
ClassMetadata classMetadata = factory.getMetadataReader(resource).getClassMetadata();
// 获取资源对应的类对象
Class<?> clazz = Resources.classForName(classMetadata.getClassName());
// 查找类中的特定注解
findAnnotation(clazz);
}
}
@ -181,9 +210,13 @@ public class PlusDataPermissionHandler {
}
}
/**
* DataPermission dataPermissionCacheMap
*
* @param clazz
*/
private void findAnnotation(Class<?> clazz) {
DataPermission dataPermission;
// 获取方法注解
for (Method method : clazz.getMethods()) {
if (method.isDefault() || method.isVarArgs()) {
continue;
@ -194,17 +227,24 @@ public class PlusDataPermissionHandler {
dataPermissionCacheMap.put(mappedStatementId, dataPermission);
}
}
// 获取类注解
if (AnnotationUtil.hasAnnotation(clazz, DataPermission.class)) {
dataPermission = AnnotationUtil.getAnnotation(clazz, DataPermission.class);
dataPermissionCacheMap.put(clazz.getName(), dataPermission);
}
}
/**
* ID DataPermission
*
* @param mapperId ID
* @return DataPermission null
*/
public DataPermission getDataPermission(String mapperId) {
// 检查缓存中是否包含映射语句 ID 对应的 DataPermission 注解对象
if (dataPermissionCacheMap.containsKey(mapperId)) {
return dataPermissionCacheMap.get(mapperId);
}
// 如果缓存中不包含映射语句 ID 对应的 DataPermission 注解对象,则尝试使用类名作为键查找
String clazzName = mapperId.substring(0, mapperId.lastIndexOf("."));
if (dataPermissionCacheMap.containsKey(clazzName)) {
return dataPermissionCacheMap.get(clazzName);
@ -213,7 +253,10 @@ public class PlusDataPermissionHandler {
}
/**
*
* ID DataPermission
*
* @param mapperId ID
* @return DataPermission false true
*/
public boolean invalid(String mapperId) {
return getDataPermission(mapperId) == null;

@ -2,11 +2,11 @@ package org.dromara.common.mybatis.helper;
import cn.hutool.core.convert.Convert;
import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.mybatis.enums.DataBaseType;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import javax.sql.DataSource;
import java.sql.Connection;
@ -14,7 +14,6 @@ import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
/**
*

@ -24,17 +24,35 @@ public class DataPermissionHelper {
public static final String DATA_PERMISSION_KEY = "data:permission";
/**
*
*
* @param key
* @param <T>
* @return null
*/
public static <T> T getVariable(String key) {
Map<String, Object> context = getContext();
return (T) context.get(key);
}
/**
*
*
* @param key
* @param value
*/
public static void setVariable(String key, Object value) {
Map<String, Object> context = getContext();
context.put(key, value);
}
/**
*
*
* @return SaStorageMap
* @throws NullPointerException NullPointerException
*/
public static Map<String, Object> getContext() {
SaStorage saStorage = SaHolder.getStorage();
Object attribute = saStorage.get(DATA_PERMISSION_KEY);
@ -64,6 +82,7 @@ public class DataPermissionHelper {
/**
*
* <p></p>
*
* @param handle
*/
@ -78,6 +97,7 @@ public class DataPermissionHelper {
/**
*
* <p></p>
*
* @param handle
*/

@ -37,17 +37,33 @@ public class PlusDataPermissionInterceptor extends BaseMultiTableInnerIntercepto
private final PlusDataPermissionHandler dataPermissionHandler;
/**
* PlusDataPermissionHandler
*
* @param mapperPackage
*/
public PlusDataPermissionInterceptor(String mapperPackage) {
this.dataPermissionHandler = new PlusDataPermissionHandler(mapperPackage);
}
/**
*
*
* @param executor MyBatis
* @param ms
* @param parameter
* @param rowBounds
* @param resultHandler
* @param boundSql SQL
* @throws SQLException SQL
*/
@Override
public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
// 检查忽略注解
// 检查是否需要忽略数据权限处理
if (InterceptorIgnoreHelper.willIgnoreDataPermission(ms.getId())) {
return;
}
// 检查是否无效 无数据权限注解
// 检查是否缺少有效的数据权限注解
if (dataPermissionHandler.invalid(ms.getId())) {
return;
}
@ -56,16 +72,26 @@ public class PlusDataPermissionInterceptor extends BaseMultiTableInnerIntercepto
mpBs.sql(parserSingle(mpBs.sql(), ms.getId()));
}
/**
* SQL
*
* @param sh MyBatis StatementHandler
* @param connection
* @param transactionTimeout
*/
@Override
public void beforePrepare(StatementHandler sh, Connection connection, Integer transactionTimeout) {
PluginUtils.MPStatementHandler mpSh = PluginUtils.mpStatementHandler(sh);
MappedStatement ms = mpSh.mappedStatement();
// 获取 SQL 命令类型(增、删、改、查)
SqlCommandType sct = ms.getSqlCommandType();
// 只处理更新和删除操作的 SQL 语句
if (sct == SqlCommandType.UPDATE || sct == SqlCommandType.DELETE) {
if (InterceptorIgnoreHelper.willIgnoreDataPermission(ms.getId())) {
return;
}
// 检查是否无效 无数据权限注解
// 检查是否缺少有效的数据权限注解
if (dataPermissionHandler.invalid(ms.getId())) {
return;
}
@ -74,6 +100,14 @@ public class PlusDataPermissionInterceptor extends BaseMultiTableInnerIntercepto
}
}
/**
* SELECT WHERE
*
* @param select SELECT
* @param index
* @param sql
* @param obj WHERE
*/
@Override
protected void processSelect(Select select, int index, String sql, Object obj) {
if (select instanceof PlainSelect) {
@ -84,6 +118,14 @@ public class PlusDataPermissionInterceptor extends BaseMultiTableInnerIntercepto
}
}
/**
* UPDATE WHERE
*
* @param update UPDATE
* @param index
* @param sql
* @param obj WHERE
*/
@Override
protected void processUpdate(Update update, int index, String sql, Object obj) {
Expression sqlSegment = dataPermissionHandler.getSqlSegment(update.getWhere(), (String) obj, false);
@ -92,6 +134,14 @@ public class PlusDataPermissionInterceptor extends BaseMultiTableInnerIntercepto
}
}
/**
* DELETE WHERE
*
* @param delete DELETE
* @param index
* @param sql
* @param obj WHERE
*/
@Override
protected void processDelete(Delete delete, int index, String sql, Object obj) {
Expression sqlSegment = dataPermissionHandler.getSqlSegment(delete.getWhere(), (String) obj, false);
@ -101,10 +151,10 @@ public class PlusDataPermissionInterceptor extends BaseMultiTableInnerIntercepto
}
/**
* where
* SELECT WHERE
*
* @param plainSelect
* @param mappedStatementId id
* @param plainSelect SELECT
* @param mappedStatementId ID
*/
protected void setWhere(PlainSelect plainSelect, String mappedStatementId) {
Expression sqlSegment = dataPermissionHandler.getSqlSegment(plainSelect.getWhere(), mappedStatementId, true);
@ -113,6 +163,14 @@ public class PlusDataPermissionInterceptor extends BaseMultiTableInnerIntercepto
}
}
/**
*
*
* @param table
* @param where WHERE
* @param whereSegment WHERE
* @return
*/
@Override
public Expression buildTableExpression(Table table, Expression where, String whereSegment) {
// 只有新版数据权限处理器才会执行到这里

@ -1,7 +1,7 @@
package org.dromara.common.mybatis.service;
import org.dromara.system.api.RemoteDataScopeService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.system.api.RemoteDataScopeService;
import org.springframework.stereotype.Service;
/**
@ -18,11 +18,24 @@ public class SysDataScopeService {
@DubboReference
private RemoteDataScopeService remoteDataScopeService;
/**
*
*
* @param roleId ID
* @return null
*/
public String getRoleCustom(Long roleId) {
return remoteDataScopeService.getRoleCustom(roleId);
}
/**
*
*
* @param deptId ID
* @return null
*/
public String getDeptAndChild(Long deptId) {
return remoteDataScopeService.getDeptAndChild(deptId);
}
}

@ -32,6 +32,12 @@ public class RemoteDataScopeServiceImpl implements RemoteDataScopeService {
private final SysRoleDeptMapper roleDeptMapper;
private final SysDeptMapper deptMapper;
/**
*
*
* @param roleId ID
* @return null
*/
@Override
public String getRoleCustom(Long roleId) {
List<SysRoleDept> list = roleDeptMapper.selectList(
@ -44,6 +50,12 @@ public class RemoteDataScopeServiceImpl implements RemoteDataScopeService {
return null;
}
/**
*
*
* @param deptId ID
* @return null
*/
@Override
public String getDeptAndChild(Long deptId) {
List<SysDept> deptList = deptMapper.selectList(new LambdaQueryWrapper<SysDept>()

Loading…
Cancel
Save