Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit7ea2e88

Browse files
Generate Entities from DB добавлено больше фрагментов кода + другие незначительные изменения в текст
1 parent2b3a714 commit7ea2e88

File tree

2 files changed

+152
-6
lines changed

2 files changed

+152
-6
lines changed

‎generate-entities-from-db/text-based-guide/generate-entities-from-db.md‎

Lines changed: 152 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,11 @@ spring.datasource.password=root
156156
spring.datasource.driver-class-name=org.postgresql.Driver
157157
```
158158

159-
Также будет создано подключение к нашей базе данных. Теперь можно приступать к следующему шагу - разработке JPA модели.
159+
Также будет создано подключение к нашей базе данных.
160+
161+
![connection-has-been-created.png](images/connection-has-been-created.png)
162+
163+
Теперь можно приступать к следующему шагу - разработке JPA модели.
160164

161165
##Создание JPA сущностей из таблиц базы данных
162166

@@ -194,7 +198,18 @@ Amplicode прекрасно понимает, что некоторым тип
194198
195199
![one-to-many.png](images/one-to-many.png)
196200

197-
Таким образом, в сущности`User` мы можем хранить коллекцию постов, связанных с каждым пользователем. Стоит отметить, что несмотря на то, что наши таблицы называются во множественном числе, что является довольно распространенным подходом к именованию таблиц на уровне базы данных, на уровне JPA модели принято придерживаться именования в единственном числе.
201+
Таким образом, в сущности`User` мы можем хранить коллекцию постов, связанных с каждым пользователем.
202+
203+
```java
204+
@OneToMany(mappedBy="author")
205+
privateSet<Post> posts=newLinkedHashSet<>();
206+
```
207+
208+
Стоит отметить, что несмотря на то, что наши таблицы называются во множественном числе, что является довольно распространенным подходом к именованию таблиц на уровне базы данных, на уровне JPA модели принято придерживаться именования в единственном числе.
209+
210+
```java
211+
publicclassUserextendsBaseEntity {
212+
```
198213

199214
Amplicode автоматически установил названия для сущностей в единственном числе.
200215

@@ -240,7 +255,114 @@ Amplicode автоматически установил названия для
240255

241256
* Нажмите **OK**
242257

243-
`@MappedSuperclass` готов. Теперь примените аналогичные изменения и к сущности`User`.
258+
`@MappedSuperclass` готов.
259+
260+
```java
261+
@MappedSuperclass
262+
public class BaseEntity {
263+
@Id
264+
@GeneratedValue(strategy=GenerationType.IDENTITY)
265+
@Column(name="id",nullable=false)
266+
privateLong id;
267+
268+
@Column(name="created_by")
269+
privateString createdBy;
270+
271+
@Column(name="created_date")
272+
privateInstant createdDate;
273+
274+
@Column(name="last_modified_by")
275+
privateString lastModifiedBy;
276+
277+
@Column(name="last_modified_date")
278+
privateInstant lastModifiedDate;
279+
280+
publicLong getId() {
281+
return id;
282+
}
283+
284+
publicvoid setId(Long id) {
285+
this.id= id;
286+
}
287+
288+
publicString getCreatedBy() {
289+
return createdBy;
290+
}
291+
292+
publicvoid setCreatedBy(String createdBy) {
293+
this.createdBy= createdBy;
294+
}
295+
296+
publicInstant getCreatedDate() {
297+
return createdDate;
298+
}
299+
300+
publicvoid setCreatedDate(Instant createdDate) {
301+
this.createdDate= createdDate;
302+
}
303+
304+
publicString getLastModifiedBy() {
305+
return lastModifiedBy;
306+
}
307+
308+
publicvoid setLastModifiedBy(String lastModifiedBy) {
309+
this.lastModifiedBy= lastModifiedBy;
310+
}
311+
312+
publicInstant getLastModifiedDate() {
313+
return lastModifiedDate;
314+
}
315+
316+
publicvoid setLastModifiedDate(Instant lastModifiedDate) {
317+
this.lastModifiedDate= lastModifiedDate;
318+
}
319+
}
320+
```
321+
322+
Теперь примените аналогичные изменения и к сущности `User`, отредактировав код вручную. Код класса должен приобрести следующий вид:
323+
324+
```java
325+
@Entity
326+
@Table(name="users",indexes= {
327+
@Index(name="idx_user_names",columnList="first_name, last_name")
328+
})
329+
publicclassUserextendsBaseEntity {
330+
@Column(name="first_name",nullable=false)
331+
privateString firstName;
332+
333+
@Column(name="last_name",nullable=false)
334+
privateString lastName;
335+
336+
@OneToMany(mappedBy="author")
337+
privateSet<Post> posts=newLinkedHashSet<>();
338+
339+
publicStringgetFirstName() {
340+
return firstName;
341+
}
342+
343+
publicvoidsetFirstName(StringfirstName) {
344+
this.firstName= firstName;
345+
}
346+
347+
publicStringgetLastName() {
348+
return lastName;
349+
}
350+
351+
publicvoidsetLastName(StringlastName) {
352+
this.lastName= lastName;
353+
}
354+
355+
publicSet<Post>getPosts() {
356+
return posts;
357+
}
358+
359+
publicvoidsetPosts(Set<Post>posts) {
360+
this.posts= posts;
361+
}
362+
363+
}
364+
```
365+
244366

245367
##Cherry-pick изменений из БД вJPA модель
246368

@@ -325,7 +447,31 @@ ADD CONSTRAINT fk_compos_on_posts FOREIGN KEY (posts_id) REFERENCES posts (id);
325447

326448
![to-posts-checkbox-checked.png](images/to-posts-checkbox-checked.png)
327449

328-
Нажмите**OK**. Новая сущность и связь "многие ко многим" будут реализованы. Кроме того, новые атрибуты будут добавлены в уже существующую сущность без изменения ранее написанного кода.
450+
Нажмите **OK**. Новая сущность и связь "многие ко многим" будут реализованы. Кроме того, новые атрибуты будут добавлены в уже существующую сущность без изменения ранее написанного кода.
451+
452+
```java
453+
@Column(name = "email")
454+
private String email;
455+
456+
@Column(name="last_activity")
457+
privateInstant lastActivity;
458+
459+
publicInstantgetLastActivity() {
460+
return lastActivity;
461+
}
462+
463+
publicvoidsetLastActivity(InstantlastActivity) {
464+
this.lastActivity= lastActivity;
465+
}
466+
467+
publicStringgetEmail() {
468+
return email;
469+
}
470+
471+
publicvoidsetEmail(Stringemail) {
472+
this.email= email;
473+
}
474+
```
329475

330476
## СозданиеJPA сущности дляDBView
331477

@@ -354,9 +500,9 @@ GROUP BY u.id;
354500

355501
Нажмите **OK** сначала в маленьком окошке, а затем и большом диалоговом окне.
356502

357-
Сущность готова. Так как сохранять данные в представлении напрямую нельзя, необходимо отметить нашу сущность аннотацией`@Immutable`. Amplicode также знает про это иуже добавил необходимую аннотацию. Кроме того, для гарантии невозможности создания новых экземпляров этой сущности Amplicodeсгенерировал конструктор без параметров с модификатором`protected`.
503+
Сущность готова. Так как сохранять данные в представлении напрямую нельзя, необходимо отметить нашу сущность аннотацией `@Immutable`. Amplicode также знает про это исам добавит необходимую аннотацию. Кроме того, для гарантии невозможности создания новых экземпляров этой сущности Amplicodeсгенерирует конструктор без параметров с модификатором `protected`.
358504

359-
Наконец, для всех полейбыли сгенерированы только геттеры, чтобы не дать разработчикам возможность изменять значения атрибутов.Подводя итог, сущность представлениябыла сгенерирована в соответствии со всеми Best Practices. Amplicodeпозаботился о качестве кода за нас.
505+
Наконец, для всех полейбудут сгенерированы только геттеры, чтобы не дать разработчикам возможность изменять значения атрибутов.В целом, сущность представлениябудет сгенерирована в соответствии со всеми Best Practices. Amplicodeзаботится о качестве кода за нас:
360506

361507
```java
362508
/**
51.3 KB
Loading

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp