Слияние кода завершено, страница обновится автоматически
getDataAuth() возвращает:
{ "userType": 1 , "orgList": [ "001" , "002" ] , "areaCode" : 1001 , "bol": true }
В SQL напишите:
#(userType == 1)[ AND org_id IN @{orgList} ]
В итоге будет распознано как:
AND org_id IN ("001","002")
#[ AND status = @{bol} ] распознается как AND status = 1
/**
* Реализация IAuthData
* Сначала реализуем интерфейс для получения объекта авторизации
*/
@Component
public class AuthDataDemo implements IAuthData {
/* Возвращает имя типа авторизации, используемое для определения области данных авторизации */
@Override
public String getAuthType() {
return "demoAuthData";
}
/* Возвращает реальные данные */
@Override
public Map<String, Object> getDataAuth() {
Map<String, Object> result = new HashMap<>();
result.put("name", "甲");
result.put("age", 32);
List<String> hobbys = new LinkedList<>();
hobbys.add("看码云");
hobbys.add("看马云");
result.put("hobbys", hobbys);
result.put("isBoy", true);
result.put("invalid", false);
``` return result;
}
}
/**
* Интерфейс Mapper
*/
@Mapper
public interface DemoMapper {
/**
* Обратите внимание, здесь нет передаваемых параметров
* Также можно не указывать параметры для @AuthData
* В этом случае будет вызван метод getDataAuth() для всех зарегистрированных в контейнере Spring IAuthData
* Если есть только один реализующий класс, то не указывать параметры будет удобнее
*/
@AuthData({"demoAuthData"})
public String DemoQuery();
}
<!-- Это файл DemoMapper.xml -->
<select id="DemoQuery" resultType="String">
SELECT
"возвращаемое значение"
FROM
dual
WHERE
1 = 1
#( name != null and name.length() > 0 )
[ AND "乙" = @{ name } ]
<!-- Здесь нет круглых скобок "()", по умолчанию считается успешным -->
#[ AND 32 = @{ age } ]
<!-- Списковые типы раскрываются автоматически, сохранение вручную IN используется для удобства чтения -->
#( hobbys != null and hobbys.size() > 0 )
[ AND "看码云" IN @{ hobbys } ]
<!-- Логические типы автоматически преобразуются в 0 и 1 -->
#( isBoy )
[ AND 1 = @{ isBoy } ]
<!-- Значение invalid равно false, эта строка не будет отрендерена -->
#( invalid )
[ AND 1 = 2 ]
</select>
===========================================================
Итоговый SQL:
SELECT
"возвращаемое значение"
FROM
dual
WHERE
1 = 1
AND "乙" = "甲"
AND 32 = 32
AND "看码云" IN ( "看码云", "看马云" )
AND 1 = 1
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )