?? ?? ? ??? ????? ????. ??? ??????? ? ??? ?? ???? ? ????.
?? 1?? ?? JOOQ? Hibernate? ?? ????? ??? ???? ???? ??? ??? ?????. ???? ????? ??? ?????.
- JOOQ? ???? ??? ??? ?? ?? ??? ? ??? Hibernate? ??? ????!
- Hibernate? ?? ??? ?? ??? ??? ????? JOOQ? ???? ?? ?? ??????!
- Hibernate ???? ?? ???? ?? ?? ????. JOOQ??? ?? ???? ???? ?? ? ????(?????, ??? ?????)!
- JOOQ? ??? ?? "??"? ???? ????!
?? JOOQ? ??? ?????(?? Hibernate? ?? ?????? ?? ?????)?? ????? ?? ?? ??????. ?? ??? ?????. ???? ??? ???? SQL? ???? ??? ??? ???? ??? ?????.
??? Hibernate? ??? ??? ?? JOOQ? ???? ?? ?? ???? ??? ??? ??? ??? ??????? ??? ??? ??? NoSQL? ???? ??? ??? ????. ???? ? ???? ??? ?? ???? ?? ?? ??? ? ??????.
??? ? ? ??? ???? ?? ??? ?? ??? ??? ?????. ? ???? ??? ??? ??? ??? ???. ??? ??? ??? ????:
- ???? ????? ??????
- ??? ?? ???? ??????
- Hibernate? JOOQ? ????? ?? ??? ??????
- ? ??? ?? ??? ???? ???, ??? ??? ? ????
?? ????
??????? ???? ?? ???? ???? ??? ???? ???? ?????. ??? ??? ?? ???? ??? ?? ?????? ??? SQL ?? ???? ?????. ????? ???? ? ???? ???? ??? ???? ??? ?????? ?????.
???? ??? ??? ????? ??? ? ?? ??????? ????? ??? ?????(???? ?? ?? ??? ???????). ???? ???? ??? ?? ??? ???? ??? ??? ????(SQL? JDBI ??).
@Service @RequiredArgsConstructor public class TalkService { private final Jdbi jdbi; public TalkSubmittedResult submitTalk(Long speakerId, String title) { var talkId = jdbi.inTransaction(handle -> { // Count the number of accepted talks by the speaker var acceptedTalksCount = handle.select("SELECT count(*) FROM talk WHERE speaker_id = :id AND status = 'ACCEPTED'") .bind("id", speakerId) .mapTo(Long.class) .one(); // Check if the speaker is experienced var experienced = acceptedTalksCount >= 10; // Determine the maximum allowable number of submitted talks var maxSubmittedTalksCount = experienced ? 5 : 3; var submittedTalksCount = handle.select("SELECT count(*) FROM talk WHERE speaker_id = :id AND status = 'SUBMITTED'") .bind("id", speakerId) .mapTo(Long.class) .one(); // If the maximum number of submitted talks is exceeded, throw an exception if (submittedTalksCount >= maxSubmittedTalksCount) { throw new CannotSubmitTalkException("Submitted talks count is maximum: " + maxSubmittedTalksCount); } return handle.createUpdate( "INSERT INTO talk (speaker_id, status, title) " + "VALUES (:id, 'SUBMITTED', :title)" ).bind("id", speakerId) .bind("title", title) .executeAndReturnGeneratedKeys("id") .mapTo(Long.class) .one(); }); return new TalkSubmittedResult(talkId); } }
? ?????:
- ???? ?? ??? ?? ?? ?????.
- ?? ?? ?? ??? ????? ?????.
- ?? ?? ???? SUBMITTED ??? ? ??? ????.
???? ???? ?? ??? ??? ???? ?? ?? ???? ??? ?????.
? ?? ??? ??:
- ???? SQL? ???? ?? ?????. ??? ?? ?? ??? ?? ?? ??? ? ????.
- ???????? ??? ???? ?????.
- JOOQ? ???? ? ??? ?? ????? ?? ???? ???? ??? ? ????!
??:
- ?? ??????? ???? ??? ????? ?? ??????. ?? ???(??? ? ? ???)? ?????.
- ???? ??? ?? ? ?? ??? ???? ??? ??? ??? ? ????.
- ?? ??? ??? ???, ?? ???? ???? ?? ??? ?? ??? ??? ? ????.
? ?? ??? ???? ??? ??? ? ???? ??? ???? ?? ?? ??? ??? ?? ?? ???? ??????. ??? ???? ? ? ??? ????. ???? ??? ?????.
??? ??
??? ?? ??? ????? ? ?? ???? ??? SQL ??? ?? ???? ???? ????. ?? ??? ???? ??? ???? ?? ???? ???? ??? ??(Java, ???? ????)? ?????.
? ????? ?? ??? ??? ??? ???? ?? ???? ????. ??? ???? ?? ??? ?? ??? ?? ??? ?????.
???? ????(???)? ??? ??? ???? ?? ?? ?????? ??? ???? ??? ???.
?? ???? ?? ?? ??? ???? ?? ??? ??? ???? ?????? ???? ?? ??? ???? ?? ? ????. ???? ???? ??? ???? ?? ??? ?? ??? ?? ???? ?? ??? ?? ???? ????.
?? ?? ??? ??? ??? Speaker ? Talk ???? ?? ????? ?? ??? ??? ??? ????.
@Service @RequiredArgsConstructor public class TalkService { private final Jdbi jdbi; public TalkSubmittedResult submitTalk(Long speakerId, String title) { var talkId = jdbi.inTransaction(handle -> { // Count the number of accepted talks by the speaker var acceptedTalksCount = handle.select("SELECT count(*) FROM talk WHERE speaker_id = :id AND status = 'ACCEPTED'") .bind("id", speakerId) .mapTo(Long.class) .one(); // Check if the speaker is experienced var experienced = acceptedTalksCount >= 10; // Determine the maximum allowable number of submitted talks var maxSubmittedTalksCount = experienced ? 5 : 3; var submittedTalksCount = handle.select("SELECT count(*) FROM talk WHERE speaker_id = :id AND status = 'SUBMITTED'") .bind("id", speakerId) .mapTo(Long.class) .one(); // If the maximum number of submitted talks is exceeded, throw an exception if (submittedTalksCount >= maxSubmittedTalksCount) { throw new CannotSubmitTalkException("Submitted talks count is maximum: " + maxSubmittedTalksCount); } return handle.createUpdate( "INSERT INTO talk (speaker_id, status, title) " + "VALUES (:id, 'SUBMITTED', :title)" ).bind("id", speakerId) .bind("title", title) .executeAndReturnGeneratedKeys("id") .mapTo(Long.class) .one(); }); return new TalkSubmittedResult(talkId); } }
??? Speaker ????? ?? ??? ?? ???? ??? ???? ????. ?????? ?? ??? ????? ??? ??? ???? ??? ??? ? ????.
? ??? ?????? ????:
@AllArgsConstructor public class Speaker { private Long id; private String firstName; private String lastName; private List<Talk> talks; public Talk submitTalk(String title) { boolean experienced = countTalksByStatus(Status.ACCEPTED) >= 10; int maxSubmittedTalksCount = experienced ? 3 : 5; if (countTalksByStatus(Status.SUBMITTED) >= maxSubmittedTalksCount) { throw new CannotSubmitTalkException( "Submitted talks count is maximum: " + maxSubmittedTalksCount); } Talk talk = Talk.newTalk(this, Status.SUBMITTED, title); talks.add(talk); return talk; } private long countTalksByStatus(Talk.Status status) { return talks.stream().filter(t -> t.getStatus().equals(status)).count(); } } @AllArgsConstructor public class Talk { private Long id; private Speaker speaker; private Status status; private String title; private int talkNumber; void setStatus(Function<Status, Status> fnStatus) { this.status = fnStatus.apply(this.status); } public enum Status { SUBMITTED, ACCEPTED, REJECTED } }
??? ??? ?? SpeakerService? ??? ? ????.
public interface SpeakerRepository { Speaker findById(Long id); void save(Speaker speaker); }
??? ??? ??:
- ??? ??? ?? ?? ??(?: ??????)? ??? ?????. ?? ?? ?? ?? ???? ?? ?? ???? ? ????.
- ???? ??? ??? ?? ?? ?? ????? ????. ?? ???? ???? ?? ??? ?? ?????? ??? ??? ???? ??? ?? ?????.
- ??? ?? ??? ??? ??? ???? ?? ? ???? ?? ? ???? ?????(???? ??? ?? ?? ?? ?? ????? ??? ? ??).
- ??? ??? ??? ? ??? ??? ? ????. ??? ?? ???? ??? ?? ??? ?? ? ??? ???? ?????(??? ???? ??? ? ??? ??? ? ??).
??? ??? ??? ????. ??? ? ?? ??? ??? ????. ????? ??? ?? ??? ?? ???? ??? ?? ???(Domain-Driven Design)? ?? ???? ? ??? ?? ???? ??? ????? ??????.
??? ??? ??? ??????? ??? ?? ?? ?? ?????. ?, ???? ??? ??????
?? ?? ???. Hibernate(?? ? ?? Spring Data JPA)? ???? ??? ?????. ??? ??? ORM ?????? ???? ?? ??? ??? ??? ???. ? ??? ??? ??????
?? ??
SpeakerRepository? ???? ?? JDBI? ?????.
@Service @RequiredArgsConstructor public class TalkService { private final Jdbi jdbi; public TalkSubmittedResult submitTalk(Long speakerId, String title) { var talkId = jdbi.inTransaction(handle -> { // Count the number of accepted talks by the speaker var acceptedTalksCount = handle.select("SELECT count(*) FROM talk WHERE speaker_id = :id AND status = 'ACCEPTED'") .bind("id", speakerId) .mapTo(Long.class) .one(); // Check if the speaker is experienced var experienced = acceptedTalksCount >= 10; // Determine the maximum allowable number of submitted talks var maxSubmittedTalksCount = experienced ? 5 : 3; var submittedTalksCount = handle.select("SELECT count(*) FROM talk WHERE speaker_id = :id AND status = 'SUBMITTED'") .bind("id", speakerId) .mapTo(Long.class) .one(); // If the maximum number of submitted talks is exceeded, throw an exception if (submittedTalksCount >= maxSubmittedTalksCount) { throw new CannotSubmitTalkException("Submitted talks count is maximum: " + maxSubmittedTalksCount); } return handle.createUpdate( "INSERT INTO talk (speaker_id, status, title) " + "VALUES (:id, 'SUBMITTED', :title)" ).bind("id", speakerId) .bind("title", title) .executeAndReturnGeneratedKeys("id") .mapTo(Long.class) .one(); }); return new TalkSubmittedResult(talkId); } }
?? ??? ?????. ? ???? ?? JOOQ ?? JDBI? ?? SQL ?????? ???? ??????? ???? ??? ??? ?????.
???(??? ? ????) ? ???? ? ?? ?? ? ????. ??? ??????:
- ???? ???? ?? ??? ????? ??? ?? ???? ?????.
- ?? ???? ???? ???? ??? ????? ? ? ?? ??? ????. ?? ??? ??(? ?? E2E ????)?? ?????.
- ?? ??? ?? ??? ????. Hibernate ??? ???? ????. ??? ??????? ??? ?? ??? ??????.
?? ?? ??? ???
??? ?? ????? ?? ? ?? ?? ????? ??? ?? ? ???????.
- ??? ??? ??? ???? ? ?? ????.
- ?? ??? ??? ? ??? ??? ? ????(JPA/Hibernate? ???).
- ?? ??(?? ??)? ?? ?? ??? ??? ??? ??? ??? ???? ?? ???? ?? ???? ???.
- ?? ?? ??? ??? ?? ? ????(???, ??? ?).
- ?? ??? ?? ???? ?? ????(DynamicUpdate ??)? ?? ??? ??? ?? ??? UPDATE ?? ??? ??? ???? ???.
?? ???? ??? ??? ??? ???? ?? ?? ??? ?? ???? ???.
??? ? ??? ??? ????? ?? ???? (????!) Hibernate? ??? ?????? ????? ?? ? ??? ??? ???? ? ????.
JOOQ? Hibernate? ??
JOOQ? SQL ?? ?? ? ?? ??? ?? ??? ?????. ?? ??? ???? ?? ?? ??? ? ??? ???. ?????? ????? ?? ??? ???? ??? ???? ? ??? ???? ?? ??? ?? ?????(????? ??).
Hibernate? ??? ??? ??? ??????? ????? ? ??? ???? ??(???????? ???? ?? ?? ??? ??? ???? ??)? ?????.
???? Hibernate? ? ????? JOOQ? ? ??? ???? ?? ?? ?? ????. ??? ??? ??? ???? ???????. ??? ??????? ???? ???? ????? ???? ??? ?? JOOQ? ??? ?? ?? ???? ?????. ??? ??? ?? ??? ???? ?? ?? ??? ???? ??? ?? ??? ???? ?? ??? ???? ???? ???. ??, ???? ? ?? Hibernate ??? ???? ? ??? ????? ??? ??? ????. ??? ???? ???? ??-?????? ??? ?? ??? ??? ?? ???? ??? ??? ?? ?????.
??? ?? Hibernate? JOOQ? ??? CQRS? ? ???? ?????. CREATE/UPDATE/DELETE ??? ?? ??? ???? ??????(?? ? ??? ??)? ????. ??? Hibernate? ???? ??? ????. ??? ???? ?? ?? ???? ????. ??? JOOQ? ?????. Hibernate?? ??? ??? ???? ????? ?? ?? ????.
JOOQ? DAO? ??????
?????. JOOQ? ???? ???????? ???? ???? ?? ?? ??? ??? DAO? ??? ? ????. ???? ???? ???? ??? DAO? ??? ?? ????. ?? JOOQ? Hibernate? ??? setter? ???? ?? ? ?? DAO? ?? ?? ???? ???? ??? ? ?? ???? ?????. ?????? ?? ????
??? ???? ??? ??? ? ????. ??? ???? ???? ???? ?? ?? ??? ????. ??? ?????.
- ????? ?? ??? ????. ManyToOne, OneToMany? ????. ?????? ?? ??? ???? ?? ??? ?? ? ??????.
- ???? ????? ?????. ?? ?? ??? ??? ? ????.
- ???? DAO? ?? ????? ??? ??? ?? ??? ? ??? ?? ?????. ?? ??, ??? ? ??? ????, ?? ???? ??? ?????, ??? Embeddable? ????? ?? ???? ????? ?? ??? ???? ??? ??????. ?, ???? ?? ??? ????? ???? ??? ? ??? ??? ?? ??? ???? ????(??? ?? ???? ??? ????? ????).
??? ??? ??? ??? ????? ???? ???? ???. Hibernate? ??? ??? ?? ??? ???? ???? ????. ??, JOOQ? ???? ?? JDBI?? ? ???? ? ??? ??? ???? ??????.
JOOQ? ???? Lukas Eder? ??? ????? DAO? ??? ??? ???? ??? ??? ?? ?? ???? ??? ?????? ?????? ??????.
??
?? ????? ?????. ?? Hibernate? ??? ??? ??? ??? ??????? ?????. ??? ?? ???? JOOQ? ? ???? ??? ?? ??? ?? ?????. ? ??? ?? ??? Hibernate? JOOQ? ???? ???? ????. ??? ??? ??? ????? ??? ?? ???? ??? ? ????.
???? ?? ???? ???? ??? ??? ??? ??????. ???? ?? ????!
??
- JDBI
- ?? ????
- ??? ??
- ? ?? – Spring Boot ? Hibernate? ??? ??? ??? ??
- ??? ??
- ? ??
- JPA ????
- JPA ?? ????
- CQRS
- Lukas Eder: DAO? ? ???, ? ???
? ??? JOOQ? Hibernate? ???? ????. ??? ??? ??? ?????? ?? ?????. ??? ??? PHP ??? ????? ?? ?? ??? ?????!

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

??? ??











?? ?? ?? ??? ??? ?? ??? ??, ? ? ?? ? ??? ?????. 1. ??? ?? ???? ?? ???? ???-????, ? ??? ??? ??? ? ????, Hashmap? ???-??? ?? ??? ??? ???? ????. 2. NULL ? ?? ???? HashMap? ??? NULL ?? ?? ? ?? ???? ?? HashTable? NULL ?? ?? ???? ??? NullPointerException? ?????. 3. ????? ??? ????? ?? ??? ?? ?? ? ????? HashTable? ? ??? ?? ?? ??? ????. ?? ConcurrenTashMap? ???? ?? ????.

Java? ?? ??? ??? ?? ??? ??? ?? ??? ??? ?? ??? ?? ?? ??? ???? ??? ?? ???? ?????. 1. ??? ???? ??? ?? ?? ? ???? ?? ??? ???? ?? ?? ??? ? ????. 2. ???? ?? ??? ???? ??? ?? ???? ?? ?? ??? ???????. 3. ?? ???? ?? ?? ?? ? ???? ???? ?? NULL ?? ??? ? ????. 4. ?? ???? ??? ?? ?? ? ??? ?????? ?? ??? ??? ?? ?? ??? ????? ??? ??? ??? ??????? ?? ???? ??????.

JIT ????? ??? ???, ??? ?? ? ???, ?? ?? ? ???? ? ? ?? ?? ??? ? ?? ??? ?? ??? ??????. 1. ??? ???? ?? ?? ??? ??? ?? ?? ???? ??? ?? ?????. 2. ??? ?? ? ??? ?? ?? ? ??? ???? ?? ?? ???; 3. ?? ??? ??? ?? ??? ???? ???? ???? ? ?? ?? ??? ?????. 4. ?? ??? ?? ??? ??? ???? ???? ?? ? ??? ???? ?? ??? ?????.

staticmethodsininterfaceswereIntRectionSelffacesswithinteffaceswithinteffaceswithintintinjava8toallowutilityFunctionswithinterfaceitswithinteffaceswithinterfaceffaces

???? ??? ??? Java?? ??? ?? ???? ??? ?? ? ? ??? ??? ???? ? ?????. ?? ???? ??? ??, ??? ?? ??? ?? ?? ??? ??? ????? ???? ????? ?????. ?? ??? ??? ??, ????? ? ??? ????, ?? ??? ??? ?????? ? ?? ? ?? ?????.

injava, thefinalkeywordpreventsavariable'svalue'svalueffrombeingchangedafterassignment, butitsbehaviordiffersforprimitivesandobjectreences.forprimitivevariables, asinfinalintmax_speed = 100; wherereassoncesanerror.forobjectref

??? ??? ?? ?? ??? ????? ? ???? ????? ???? ?? ???? ?? ???? ?????. ?? ??? ??? ????. ?? ?? ?? ??? ???? ???? ?? ?? ??? ??? ?? ?? ??? ??? ?????. ?? ??? ??? ????. ?? ??? ?? ??? ?? ?? ??? ?? ?? ??? ???? NewClass ()? ??? ?? ???? ????. ?? ??? ?? ??? ???? ?? ??? ?? ? ? ??? ?? ?? ??? ????? ????? ?????. ?? ??, ?? ?????? ?????, ??? ? ?? ????? ??? ?? ?????. ???? ?? ?? ??? ???? ?? ???? ?? ? ??? ???? ?? ??? ?? ?????? ?????. ???? ???? ??? ??, ?? ?? ? ?? ??? ????, ?? ?? ???? ?????.

??? ? ?? ??? ???? : ????? ?? ?. 1. int? ???? ???? ?? ?? ?? ? ??? ???? ?????. 2. ?? ? ???? (int) myDouble ??? ?? ?? ??? ?????. ?? ??? ??? ?? ??? ?? ??, ?? ?? ?? ???? ?? ??? ?? ???? ?? ?????. ???? ? ??? ??? ????. ?? ??? ??? ??? ??? ??? ?? ??? ??? ? ??? ?? ???? ??? ??? ??? ??? ? ??? ?? ??? ?? ??? ?? ?? ? ? ????. ?? ?? ??? ?? ??? ??? ??? ??? ? ??????.
