Bài 13. Spring Data JPA - CRUD

Поделиться
HTML-код
  • Опубликовано: 4 ноя 2024

Комментарии • 98

  • @nvtmjfan
    @nvtmjfan 6 месяцев назад +1

    Chỗ đoạn builder để mapping giữa DTO và Entity tôi từng thấy có cách hay hơn, đó là dùng các interface có anotation @Mapper để mapping, code mapping sẽ do framework tự gen vào thư mục target.

    • @tayjava
      @tayjava  6 месяцев назад

      Đúng rồi bác cái thư viện đó rất tiện sau này có time e sẽ làm 1 topic về cái đó

  • @HieuTranTrung-dv5yi
    @HieuTranTrung-dv5yi 6 месяцев назад

    Ôi anh như thần ấy ạ 4 ngày qua em vướng chỗ nào là anh ra đúng video về vấn đề đấy. Cám ơn anh ạ

    • @tayjava
      @tayjava  6 месяцев назад +1

      Vậy chú share mạnh lên để ae khác cũng đc nhờ ! Kaka..

  • @YuhIoLLL
    @YuhIoLLL 19 дней назад

    anh ra thêm video về database và relationship Mapping in Data JPA được k ạ

  • @hunghong9632
    @hunghong9632 6 месяцев назад

    Quá đã, hóng nhưng video tiếp theo anh ơi. 🎉🎉

    • @tayjava
      @tayjava  6 месяцев назад +1

      E share cho các bạn học với đi! Tuần này a sẽ cố mỗi ngày ra 1 video chia sẻ với ae. Từ tuần sau chắc tuần anh ra đc ít hơn e ạ

  • @jren_db
    @jren_db 2 месяца назад

    Tuyệt

  • @nvtmjfan
    @nvtmjfan 6 месяцев назад

    Các class DTO có bắt buộc phải implements Serializable không? Tôi nhớ dự án trước đây tôi từng làm không cần mà vẫn hoạt động tốt.

    • @tayjava
      @tayjava  6 месяцев назад

      Bây giờ nó auto thôi bác chứ ko phải ko có serializable bác nhé

  • @duyanhbui3493
    @duyanhbui3493 2 месяца назад

    Anh ơi cho em hỏi chút ạ. Em đã search về cái việc là entity nên trả về 1 entity trực tiếp cho controller rồi để controller map giữa entity, DTO và respone. Có người thì bảo entity không nên trả về trực tiếp enity như vậy vì nguy hiểm có người thì bảo nên để ở controller để tái sử dụng mã.
    Anh nghĩ sao về vấn đề này
    Cá nhân em thì thấy cho service thực hiện tác vụ này và chỉ gửi về cho controller respone nhưng nó lại bất lợi trong vc tái sử dung code. Và em thấy trong video của anh thì anh thực hiện map User sang UserDetailRespone rồi mới chả về cho controller nhưng anh cho em hỏi ví dụ trong trường hợp khác là 1 Service khác muốn lấy ra cái User dựa trên id thì anh sẽ xử lý sao ạ vì method getUserById trả về entity User nhưng anh để nó là private rồi thì sao có thể tái sử dụng lại được a. Mong anh giải đáp giúp em ạ

    • @tayjava
      @tayjava  2 месяца назад

      Nếu lập trình theo design pattern SOLID thì S = Single Responsibility tức là 1 class chỉ đảm nhận 1 nhiệm vụ duy nhất. Trong trường hợp của e thì e đang sai nhé, trong dự án thực tế thì DTO mới là các class để trả ra kết quả ở API

  • @nomercy6771
    @nomercy6771 5 месяцев назад +1

    anh cho em hỏi sao lúc insert User thì bảng tbl_address lại có 2 bản ghi: user_id có giá trị và user_id = null ạ

    • @tayjava
      @tayjava  5 месяцев назад

      E thấy cái này ở chỗ nào thế ?

    • @nomercy6771
      @nomercy6771 5 месяцев назад

      @@tayjava phút 29:50 a ạ

  • @xuannam9258
    @xuannam9258 6 месяцев назад

    anh có thể hướng dẫn làm phần security spring boot 3. không anh

    • @tayjava
      @tayjava  6 месяцев назад +1

      Có e nhé, a có code rồi nhưng chưa soạn giáo trình đâu e

  • @tininh9069
    @tininh9069 6 месяцев назад

    Anh ra thêm spring security đi ạ❤❤

    • @tayjava
      @tayjava  6 месяцев назад

      Hết cái jpa a làm e nhé! A có source code chuẩn chỉ rồi chỉ thiếu giáo trình thôi e ơi

  • @nvtmjfan
    @nvtmjfan 6 месяцев назад

    trước đây tôi từng làm jpa connect với postgres thấy không cần khai báo @Column(name = "...") với những trường có tên trùng với field của class hoặc theo quy tắc user_id với userId cũng không cần khai vào @Column(name = "...");

    • @tayjava
      @tayjava  6 месяцев назад

      Đúng rồi nhưng để tường minh thì khai báo cho nó rõ ràng bác nhé

  • @khacnhutran942
    @khacnhutran942 6 месяцев назад

    Em tò mò về mấy vụ viết trigger hay storeprocedure trong java springboot để tương tác với api database với á anh ơi

    • @tayjava
      @tayjava  6 месяцев назад

      E nói cụ thể là em muốn làm gì chứ? E nói thế a ko giúp e đc đâu!

  • @vipinfo-lr1sy
    @vipinfo-lr1sy 6 месяцев назад

    bao giờ anh mới ra phần spring sercurity ạ

    • @tayjava
      @tayjava  6 месяцев назад +1

      Hết cái jpa e ơi, sờ cu sờ ty thì cần làm việc với database mà

  • @nvtmjfan
    @nvtmjfan 6 месяцев назад

    Mình nghe nói có thể config limit số lượng connection into database, không biết trong bài này đã đề cập chưa ạ, thấy từ khóa connection pool nhưng mình ko xem được đoạn config liên quan?

    • @tayjava
      @tayjava  6 месяцев назад

      Ở bài 15 bác ợ

  • @dailytech2971
    @dailytech2971 6 месяцев назад

    Anh ơi em hỏi chút ạ em thấy người ta hay dùng model mapper viết 1 hàm rồi return new ModelMapper map từ DTO sang entity trong dự án anh hay làm có hay dùng với viết thế không ạ.Em cảm ơn

    • @tayjava
      @tayjava  6 месяцев назад +1

      Các bạn dev của a có làm nhưng a thì ko ? Làm vậy cũng nhàn mà chỉ có maintain thì lại hơi khó sửa e ạ

  • @phuthien3555
    @phuthien3555 20 дней назад

    a ơi e gửi request add user cứ bị lỗi "util.UserStatus cannot be cast to class " "util.UserType cannot be cast to class " "util.Gender cannot be cast to class " là sao vậy ạ , e tìm cách fix mấy nay nhưng mà ch được ạ , mong a giúp e

    • @tayjava
      @tayjava  20 дней назад +1

      Gửi link git qua email a fix cho nha

  • @huntwiller8231
    @huntwiller8231 6 месяцев назад

    Em vẫn chưa hiểu cơ chế lưu của postgresql khi có id tự động, phải gửi request liên tục lỗi rồi nó mới lưu được, nhưng id thì lại không liên tục mà bị cách 1 khoảng giữa với data có sẵn từ script của a

    • @tayjava
      @tayjava  6 месяцев назад +1

      Khi e tạo lệnh save thì id sẽ đc tạo ra, nếu em insert fail thì db vẫn tính là 1 lần e nhé

  • @PHAMTHANHHOA
    @PHAMTHANHHOA 6 месяцев назад

  • @oucanh1792
    @oucanh1792 6 месяцев назад

    Anh cho em em hỏi đoạn tạo class AbstractEntity thì tại sao phải đặt nó là abstract mà ko phải class bình thường ạ. Em cảm ơn ạ

    • @tayjava
      @tayjava  6 месяцев назад +1

      E xoá nó đi rồi chạy lại nào ! Điều kỳ diệu sẽ đến :)

    • @huntwiller8231
      @huntwiller8231 6 месяцев назад

      @@tayjava Em thử xóa rồi chạy lại thì record vẫn cứ tăng đều, điều kỳ diệu vẫn chưa đến anh ơi.

    • @hunghong9632
      @hunghong9632 5 месяцев назад

      @@huntwiller8231 2 tuần rồi, điều kì diệu đến chưa :D

    • @huntwiller8231
      @huntwiller8231 5 месяцев назад

      @@hunghong9632 chưa bác ơi, tháng này phải ôn thi nên hơi bận =v

  • @hieutranhuu1048
    @hieutranhuu1048 5 месяцев назад

    Anh ơi, sao anh không dùng mapper nhìn cho gọn ạ, em thấy chuyển đổi từ dto sang entity rồi từ entity sang lại dto cực quá ạ 😅😅

    • @tayjava
      @tayjava  5 месяцев назад +1

      Dùng mapper thì tiện nhưng trong này có nhiều bạn lần đầu tiếp xúc nên ko hiểu bản chất của việc mapping data

    • @nvtentertainment4098
      @nvtentertainment4098 3 месяца назад

      mình thấy mapper mấy chỗ map Fk , khó debug

  • @vipinfo-lr1sy
    @vipinfo-lr1sy 6 месяцев назад

    anh ơi có thật sự cần cái @OneToMany các kiểu không vậy ạ. em thấy dự án bây giờ họ hay ràng buộc ngầm ít dùng mấy cái ràng buộc chặt kiểu thế

    • @tayjava
      @tayjava  6 месяцев назад +1

      A sẽ giải thích ở phần query nhé

    • @vipinfo-lr1sy
      @vipinfo-lr1sy 6 месяцев назад

      @@tayjava vg a ơi.

  • @khoihoang5252
    @khoihoang5252 5 месяцев назад

    e thấy có một cách render model từ db thì có nên sử dụng cách đấy không ạ

    • @tayjava
      @tayjava  5 месяцев назад

      Render đc thì rất tốt đó e, tiết kiệm đc thời gian gõ code

  • @olethanhtuan5951
    @olethanhtuan5951 6 месяцев назад

    cho em hỏi sao sử dụng UserService trong UserController mình lại không dùng @Autowired cho nhanh ạ

    • @tayjava
      @tayjava  6 месяцев назад

      A giải thích ở bài 1 e nha !

    • @huntwiller8231
      @huntwiller8231 6 месяцев назад

      @@tayjava Em hiểu là làm kiểu @RequiredArgsConstructor này sẽ tiện và clean hơn khi cần tiêm nhiều bean phải không a?

    • @tayjava
      @tayjava  6 месяцев назад +1

      @@huntwiller8231 e dùng constructor thì chính xác và hiệu quả hơn nhé

  • @HieuTranTrung-dv5yi
    @HieuTranTrung-dv5yi 6 месяцев назад

    Anh ơi em đang gặp vấn đề về cái pool khi deploy lên Heroku, db mySQL. Khi deploy thì bị lỗi "user_max_connections" và crash liên tục. Em đã config maximum-pool-size và chạy thử ở local thì không vấn đề gì và không có connection leak. Nhưng khi deploy thì vẫn lỗi ấy. Anh có gợi ý gì giúp em với ạ

    • @tayjava
      @tayjava  6 месяцев назад

      Gửi e mail cho anh xem cách e cấu hình connection pool nhé, log in ra lỗ nữa nha! Với cả em deploy trên cloud nào dùng dịch vụ nào để ploy nhé! Đủ thông tin anh mới tìm đc lỗi nha

    • @HieuTranTrung-dv5yi
      @HieuTranTrung-dv5yi 6 месяцев назад

      @@tayjava Em gửi mail cho anh rồi ạ

    • @tayjava
      @tayjava  6 месяцев назад

      A reply rồi ơi! Thừ từng bước 1 nhé

  • @tranhung8357
    @tranhung8357 3 месяца назад

    a cho e hỏi sao khi add user trên postman thì bị lỗi ERROR: duplicate key value violates unique constraint "tbl_user_pkey"
    Detail: Key (id)=(28) already exists.
    lỗi này khắc phục sao ạ

    • @tayjava
      @tayjava  3 месяца назад

      Cái này bào là lỗi trùng key mà em, Có thể username đã đc đăng ký rồi

    • @tranhung8357
      @tranhung8357 3 месяца назад

      @@tayjava dạ vâng e tìm ra đc lỗi r ạ. vì trong database đã có sẵn id từ 1-29 r ạ.

    • @tranhung8357
      @tranhung8357 3 месяца назад

      ​@@tayjava a cho e hỏi sau khi send add user thì . tbl_user đã nhân data mà tbl_address thì không có ạ. a giúp e với ạ. trong khi e đã clone code a về và có sửa phần builder address nhưng vẫn k có data truyền xún ạ

    • @tayjava
      @tayjava  3 месяца назад

      @@tranhung8357 gửi link git về email của anh nhé

  • @nvtmjfan
    @nvtmjfan 6 месяцев назад

    tại sao không phải là long id, mà lại lại Long?

    • @tayjava
      @tayjava  6 месяцев назад +2

      Best practices của DTO là các field phải khai báo kiểu wrapper vì kiểu wrapper cho phép set null

  • @nvtmjfan
    @nvtmjfan 6 месяцев назад

    Tôi thấy ID của bảng user tăng không theo 1, lần đầu bạn insert tôi thấy nó là 33, lần thứ 2 nó đã là 36.

    • @tayjava
      @tayjava  6 месяцев назад

      Cái này đang để auto bác ơi! Chắc bác insert fail đó

    • @nvtmjfan
      @nvtmjfan 6 месяцев назад

      @@tayjava tui có chạy đâu, tui xem video của bạn thấy từ 33 lên 36 á

    • @tayjava
      @tayjava  6 месяцев назад

      Haha, nó fail mấy cái đó bác

  • @naisi1387
    @naisi1387 6 месяцев назад

    sao em them validation ở addressDTO mà nó không bắt lỗi nhỉ anh

    • @naisi1387
      @naisi1387 6 месяцев назад

      khi em tạo user mà trong userDTO có addressDTO , khi create nó không hề vào addressDTO để vali

    • @tayjava
      @tayjava  6 месяцев назад

      E thiếu anotation rồi @Valid @RequestBody dto

  • @menesduong1247
    @menesduong1247 6 месяцев назад +1

    Anh có nhận đệ tử không ạ :vv

    • @tayjava
      @tayjava  6 месяцев назад +1

      Lại muốn a dạy à? Kaka

    • @menesduong1247
      @menesduong1247 6 месяцев назад +1

      @@tayjava dạ, rất muôn thưa thầyy

    • @tayjava
      @tayjava  6 месяцев назад +1

      Haha, tối a còn trông con e nhé! A làm video chia se cho cộng đồng thôi chứ không tình dạy học đâu e! Mà e cư thử gửi email xem e đã học ở đâu? đã học được những gì? Và e muốn học những gì ? Nói chung muốn dạy thì phải có giáo trình, có thời gian, yêu nghề .. còn a chưa có cả 3 cái đó! Haha…

    • @vipinfo-lr1sy
      @vipinfo-lr1sy 6 месяцев назад

      @@tayjava Anh có dự án cần tuyển dev java parttime không ạ.

    • @tayjava
      @tayjava  6 месяцев назад

      @vipinfo-lr1sy anh không có e ơi! E xem trên trang này nè talent.remotebase.com?referral=umSGMUQNaPMEK5wdcLyGTt

  • @thanhatvancong223
    @thanhatvancong223 6 месяцев назад

    đoạn 21:40 cái này anh map sao nhanh quá em chauw hiểu đoạn này

    • @tayjava
      @tayjava  6 месяцев назад

      Cái này a dùng @Builder a đã thêm vào chỗ model User e nhé! E search cách sử dụng Builder của Lombok nhé

    • @thanhatvancong223
      @thanhatvancong223 6 месяцев назад

      @@tayjava em có làm theo vào đọc rồi mà nó vẫn lỗi, anh cho em xin zalo để hỏi chi tiết dc k

  • @hungshiba4567
    @hungshiba4567 6 месяцев назад

    e có ý kiến là nếu dùng @ManyToOne thì không cần định dạng lại fetchType do khi dùng annotation này thì mặc định fetch đã là EAGER rồi ạ. Có gì sai mong anh giúp đỡ ạ :D

    • @tayjava
      @tayjava  6 месяцев назад

      Haha! E sai rồi nhé, E cứ nhớ …ToMany là fetchType là lazy nhé còn …ToOne fetchType là Eager nhé

    • @hungshiba4567
      @hungshiba4567 6 месяцев назад

      @@tayjava à e bị đọc ngược ạ hehe

  • @hoainamtruonginh6480
    @hoainamtruonginh6480 3 месяца назад

    tại sao em bị báo lỗi ở dòng này @JdbcTypeCode(SqlTypes.NAMED_ENUM) nó báo là không tìm thấy NAMED_ENUM

    • @tayjava
      @tayjava  3 месяца назад

      Trong sql em cũng cần định nghĩa dữ liệu kiểu enum nhé

  • @nvtentertainment4098
    @nvtentertainment4098 3 месяца назад

    Em code như này sai LocalTime
    @Column(name = "create_at")
    @CreatedDate
    LocalDateTime createAt;
    @Column(name = "update_at")
    @LastModifiedDate
    LocalDateTime updateAt;

    • @tayjava
      @tayjava  3 месяца назад +1

      E để kiểu Date nhé, còn nếu để liều localdate thì bỏ @Creat…

    • @nvtentertainment4098
      @nvtentertainment4098 3 месяца назад

      @@tayjava ok anh