Berbagi teknologi

Bagaimana menerapkan Mybatis gabung kiri

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Saat menggunakan MyBatis Plus untuk pengoperasian database, terkadang kita perlu mendapatkan data dari beberapa tabel. Artikel ini akan memperkenalkan cara menerapkan kueri gabung kiri di MyBatis Plus. Kita akan mengambil dua tabel sebagai contoh, salah satunya adalah tabel kepala departemen (system_dept_leader), dan yang lainnya adalah tabel pengguna (system_user), dan mendemonstrasikan cara mendapatkan informasi rinci tentang pemimpin departemen, termasuk nama panggilan pengguna dan nomor kantor, melalui gabung kiri.

Struktur tabel data

Misalkan kita memiliki dua tabel data berikut:

Tabel pimpinan departemen (system_dept_leader)

Nama bidangjenismenggambarkan
pengenalPanjangkunci utama
id_departemenPanjangID Departemen
identitas penggunaPanjangidentitas pengguna
adalah_utamaBilangan bulatApakah itu penting

 

tabel pengguna (system_user)

Nama bidangjenismenggambarkan
pengenalPanjangkunci utama
nama panggilanRangkaiannama panggilan
kode_pekerjaRangkaianNomor pekerjaan

Langkah-langkah implementasi

Kami akan mengimplementasikan kueri gabung kiri melalui langkah-langkah berikut:

  1. Tentukan kelas hasil kueri
  2. Menulis penyedia SQL
  3. Tentukan metode kueri di antarmuka Mapper

1. Tentukan kelas hasil kueri

Pertama, kita perlu mendefinisikan kelas hasil kueri untuk menyimpan hasil kueri.Di sini kita mendefinisikan aDeptLeaderDORespVO Kelas, diwarisi dari kelas dasarDeptLeaderDOBaseVO, dan berisi bidang nama panggilan dan nomor pekerjaan pengguna.

  1. @Data
  2. @EqualsAndHashCode(callSuper = true)
  3. @ToString(callSuper = true)
  4. public class DeptLeaderDORespVO extends DeptLeaderDOBaseVO {
  5. private Long id;
  6. @NotNull(message = "Department不能为空")
  7. private Long deptId;
  8. @NotNull(message = "User不能为空")
  9. private Long userId;
  10. @NotNull(message = "Is Primary不能为空")
  11. private Integer isPrimary;
  12. private String nickname;
  13. private String workerCode;
  14. }

2. Tulis penyedia SQL

Selanjutnya, kita menulis kelas penyedia SQL untuk menghasilkan kueri SQL secara dinamis.digunakan di siniSelectProvider Anotasi untuk menentukan SQL khusus.

  1. public class DeptLeaderSqlProvider {
  2. public String selectDeptLeaderWithUserDetails(Map<String, Object> params) {
  3. Long deptId = (Long) params.get("deptId");
  4. Long userId = (Long) params.get("userId");
  5. Integer isPrimary = (Integer) params.get("isPrimary");
  6. StringBuilder sql = new StringBuilder();
  7. sql.append("SELECT dl.*, su.nickname, su.worker_code AS workerCode ");
  8. sql.append("FROM system_dept_leader dl ");
  9. sql.append("LEFT JOIN system_user su ON dl.user_id = su.id ");
  10. sql.append("WHERE 1=1 ");
  11. if (deptId != null) {
  12. sql.append("AND dl.dept_id = #{deptId} ");
  13. }
  14. if (userId != null) {
  15. sql.append("AND dl.user_id = #{userId} ");
  16. }
  17. if (isPrimary != null) {
  18. sql.append("AND dl.is_primary = #{isPrimary} ");
  19. }
  20. sql.append("ORDER BY dl.id DESC");
  21. return sql.toString();
  22. }
  23. }

3. Tentukan metode kueri di antarmuka Mapper

Terakhir, tentukan metode kueri di antarmuka Mapper dan gunakan SelectProvider Anotasi menentukan penyedia SQL.

  1. @Mapper
  2. public interface DeptLeaderMapper extends BaseMapperX<DeptLeaderDO> {
  3. @SelectProvider(type = DeptLeaderSqlProvider.class, method = "selectDeptLeaderWithUserDetails")
  4. List<DeptLeaderDORespVO> selectDeptLeaderWithUserDetails(@Param("deptId") Long deptId,
  5. @Param("userId") Long userId,
  6. @Param("isPrimary") Integer isPrimary);
  7. }

4. Panggil metode lapisan layanan

Metode kueri dipanggil di lapisan layanan dan hasilnya dikembalikan ke front end atau diproses lebih lanjut.

  1. @Service
  2. public class DeptLeaderService {
  3. @Autowired
  4. private DeptLeaderMapper deptLeaderMapper;
  5. public List<DeptLeaderDORespVO> getDeptLeaders(Long deptId, Long userId, Integer isPrimary) {
  6. return deptLeaderMapper.selectDeptLeaderWithUserDetails(deptId, userId, isPrimary);
  7. }
  8. }

Meringkaskan

Melalui langkah-langkah di atas, kami telah menerapkan metode penggunaan gabung kiri untuk menanyakan informasi rinci pimpinan departemen di MyBatis Plus. Metode ini dapat secara dinamis menghasilkan kueri SQL berdasarkan kondisi yang masuk untuk memperoleh informasi tentang pimpinan departemen dan pengguna terkaitnya. Metode ini sangat berguna ketika kueri data perlu dilakukan di beberapa tabel, sehingga memastikan fleksibilitas dan efisiensi kueri data.

Saya harap artikel ini dapat membantu Anda lebih memahami dan menggunakan MyBatis Plus untuk pertanyaan kompleks. Jika Anda memiliki pertanyaan atau kebutuhan lebih lanjut, Anda dipersilakan untuk berdiskusi dan berkomunikasi.