моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
При использовании MyBatis Plus для операций с базой данных нам иногда необходимо получить данные из нескольких таблиц. В этой статье рассказывается, как реализовать запрос левого соединения в MyBatis Plus. В качестве примера возьмем две таблицы: одна — таблица руководителя отдела (system_dept_leader
), а другой — пользовательская таблица (system_user
) и демонстрирует, как получить подробную информацию о руководителе отдела с помощью левого соединения, включая псевдоним пользователя и рабочий номер.
Предположим, у нас есть следующие две таблицы данных:
system_dept_leader
)Имя поля | тип | описывать |
---|---|---|
идентификатор | Длинный | основной ключ |
dept_id | Длинный | Идентификатор отдела |
ID пользователя | Длинный | ID пользователя |
is_primary | Целое число | Это важно |
system_user
)Имя поля | тип | описывать |
---|---|---|
идентификатор | Длинный | основной ключ |
прозвище | Нить | Ник имя |
код_работника | Нить | Номер задания |
Мы реализуем запрос левого соединения, выполнив следующие шаги:
Во-первых, нам нужно определить класс результатов запроса для хранения результатов запроса.Здесь мы определяемDeptLeaderDORespVO
Класс, унаследованный от базового классаDeptLeaderDOBaseVO
и содержит поля псевдонима и рабочего номера пользователя.
- @Data
- @EqualsAndHashCode(callSuper = true)
- @ToString(callSuper = true)
- public class DeptLeaderDORespVO extends DeptLeaderDOBaseVO {
-
- private Long id;
-
- @NotNull(message = "Department不能为空")
- private Long deptId;
-
- @NotNull(message = "User不能为空")
- private Long userId;
-
- @NotNull(message = "Is Primary不能为空")
- private Integer isPrimary;
-
- private String nickname;
- private String workerCode;
- }
Далее мы напишем класс поставщика SQL для динамической генерации SQL-запросов.используется здесьSelectProvider
Аннотации для указания пользовательского SQL.
- public class DeptLeaderSqlProvider {
-
- public String selectDeptLeaderWithUserDetails(Map<String, Object> params) {
- Long deptId = (Long) params.get("deptId");
- Long userId = (Long) params.get("userId");
- Integer isPrimary = (Integer) params.get("isPrimary");
-
- StringBuilder sql = new StringBuilder();
- sql.append("SELECT dl.*, su.nickname, su.worker_code AS workerCode ");
- sql.append("FROM system_dept_leader dl ");
- sql.append("LEFT JOIN system_user su ON dl.user_id = su.id ");
- sql.append("WHERE 1=1 ");
- if (deptId != null) {
- sql.append("AND dl.dept_id = #{deptId} ");
- }
- if (userId != null) {
- sql.append("AND dl.user_id = #{userId} ");
- }
- if (isPrimary != null) {
- sql.append("AND dl.is_primary = #{isPrimary} ");
- }
- sql.append("ORDER BY dl.id DESC");
- return sql.toString();
- }
- }
Наконец, определите метод запроса в интерфейсе Mapper и используйте SelectProvider
В аннотации указан поставщик SQL.
- @Mapper
- public interface DeptLeaderMapper extends BaseMapperX<DeptLeaderDO> {
-
- @SelectProvider(type = DeptLeaderSqlProvider.class, method = "selectDeptLeaderWithUserDetails")
- List<DeptLeaderDORespVO> selectDeptLeaderWithUserDetails(@Param("deptId") Long deptId,
- @Param("userId") Long userId,
- @Param("isPrimary") Integer isPrimary);
- }
Метод запроса вызывается на уровне сервиса, и результаты возвращаются во внешний интерфейс или подвергаются дальнейшей обработке.
- @Service
- public class DeptLeaderService {
-
- @Autowired
- private DeptLeaderMapper deptLeaderMapper;
-
- public List<DeptLeaderDORespVO> getDeptLeaders(Long deptId, Long userId, Integer isPrimary) {
- return deptLeaderMapper.selectDeptLeaderWithUserDetails(deptId, userId, isPrimary);
- }
- }
С помощью описанных выше шагов мы реализовали метод использования левого соединения для запроса подробной информации о руководителях отделов в MyBatis Plus. Этот метод позволяет динамически генерировать SQL-запросы на основе входящих условий для получения информации о руководителях отделов и связанных с ними пользователях. Этот метод очень полезен, когда необходимо выполнить запрос данных к нескольким таблицам, обеспечивая гибкость и эффективность запроса данных.
Я надеюсь, что эта статья поможет вам лучше понять и использовать MyBatis Plus для сложных запросов. Если у вас есть какие-либо вопросы или дополнительные потребности, вы можете обсудить и пообщаться.