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.
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 ạ
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
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 = "...");
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?
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
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
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
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 ạ
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
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 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 ạ
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…
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
Em code như này sai LocalTime @Column(name = "create_at") @CreatedDate LocalDateTime createAt; @Column(name = "update_at") @LastModifiedDate LocalDateTime updateAt;
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.
Đú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 đó
Ô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 ạ
Vậy chú share mạnh lên để ae khác cũng đc nhờ ! Kaka..
anh ra thêm video về database và relationship Mapping in Data JPA được k ạ
Quá đã, hóng nhưng video tiếp theo anh ơi. 🎉🎉
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 ạ
Tuyệt
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.
Bây giờ nó auto thôi bác chứ ko phải ko có serializable bác nhé
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 ạ
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
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 ạ
E thấy cái này ở chỗ nào thế ?
@@tayjava phút 29:50 a ạ
anh có thể hướng dẫn làm phần security spring boot 3. không anh
Có e nhé, a có code rồi nhưng chưa soạn giáo trình đâu e
Anh ra thêm spring security đi ạ❤❤
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
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 = "...");
Đúng rồi nhưng để tường minh thì khai báo cho nó rõ ràng bác nhé
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
E nói cụ thể là em muốn làm gì chứ? E nói thế a ko giúp e đc đâu!
bao giờ anh mới ra phần spring sercurity ạ
Hết cái jpa e ơi, sờ cu sờ ty thì cần làm việc với database mà
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?
Ở bài 15 bác ợ
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
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 ạ
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
Gửi link git qua email a fix cho nha
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
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é
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 ạ
E xoá nó đi rồi chạy lại nào ! Điều kỳ diệu sẽ đến :)
@@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.
@@huntwiller8231 2 tuần rồi, điều kì diệu đến chưa :D
@@hunghong9632 chưa bác ơi, tháng này phải ôn thi nên hơi bận =v
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á ạ 😅😅
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
mình thấy mapper mấy chỗ map Fk , khó debug
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ế
A sẽ giải thích ở phần query nhé
@@tayjava vg a ơi.
e thấy có một cách render model từ db thì có nên sử dụng cách đấy không ạ
Render đc thì rất tốt đó e, tiết kiệm đc thời gian gõ code
cho em hỏi sao sử dụng UserService trong UserController mình lại không dùng @Autowired cho nhanh ạ
A giải thích ở bài 1 e nha !
@@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?
@@huntwiller8231 e dùng constructor thì chính xác và hiệu quả hơn nhé
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 ạ
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
@@tayjava Em gửi mail cho anh rồi ạ
A reply rồi ơi! Thừ từng bước 1 nhé
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 ạ
Cái này bào là lỗi trùng key mà em, Có thể username đã đc đăng ký rồi
@@tayjava dạ vâng e tìm ra đc lỗi r ạ. vì trong database đã có sẵn id từ 1-29 r ạ.
@@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 ạ
@@tranhung8357 gửi link git về email của anh nhé
tại sao không phải là long id, mà lại lại Long?
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
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.
Cái này đang để auto bác ơi! Chắc bác insert fail đó
@@tayjava tui có chạy đâu, tui xem video của bạn thấy từ 33 lên 36 á
Haha, nó fail mấy cái đó bác
sao em them validation ở addressDTO mà nó không bắt lỗi nhỉ anh
khi em tạo user mà trong userDTO có addressDTO , khi create nó không hề vào addressDTO để vali
E thiếu anotation rồi @Valid @RequestBody dto
Anh có nhận đệ tử không ạ :vv
Lại muốn a dạy à? Kaka
@@tayjava dạ, rất muôn thưa thầyy
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…
@@tayjava Anh có dự án cần tuyển dev java parttime không ạ.
@vipinfo-lr1sy anh không có e ơi! E xem trên trang này nè talent.remotebase.com?referral=umSGMUQNaPMEK5wdcLyGTt
đoạn 21:40 cái này anh map sao nhanh quá em chauw hiểu đoạn này
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é
@@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
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
Haha! E sai rồi nhé, E cứ nhớ …ToMany là fetchType là lazy nhé còn …ToOne fetchType là Eager nhé
@@tayjava à e bị đọc ngược ạ hehe
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
Trong sql em cũng cần định nghĩa dữ liệu kiểu enum nhé
Em code như này sai LocalTime
@Column(name = "create_at")
@CreatedDate
LocalDateTime createAt;
@Column(name = "update_at")
@LastModifiedDate
LocalDateTime updateAt;
E để kiểu Date nhé, còn nếu để liều localdate thì bỏ @Creat…
@@tayjava ok anh