У меня есть две таблицы в базе данных Mysql: отдел и контакт. Я подключился к своему приложению в файле application.properties.
Это моя база данных:
pom.xml выглядит следующим образом:
<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo1</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Это мой контактный класс:
@Entity
@Table(name = "contact")
public class Contact {
@Id
@Column(name = "contact_id")
private int Contact_id;
@Column(name = "emp_name")
private String Emp_name;
@Column(name = "mobile")
private String Mobile;
@Column(name = "landline_office")
private String Landline_office;
@Column(name = "landline_res")
private String Landline_res;
@Column(name = "fax")
private String Fax;
@Column(name = "email")
private String Email;
@ManyToOne(cascade= {CascadeType.PERSIST,CascadeType.MERGE,
CascadeType.DETACH,CascadeType.REFRESH})
@JoinColumn(name = "department_dept_id")
private Department department;
... constructors and getters and setters
Это мой класс отдела:
@Entity
@Table(name = "department")
public class Department {
@Id
@Column(name = "dept_id")
private int Dept_id;
@Column(name = "dept_name")
private String Dept_name;
@Column(name = "order")
private String Order;
@Column(name = "home")
private int Home;
@OneToMany(mappedBy = "department",
cascade= {CascadeType.PERSIST,CascadeType.MERGE,
CascadeType.DETACH,CascadeType.REFRESH})
private List<Contact> contacts;
public Department() {
}
...getters and setters and constructors
Я могу отобразить первую сущность: отдел в таблице, используя тимелеаф:
Что я хочу сделать, так это: динамически отображать всех сотрудников, принадлежащих к ICT, когда я нажимаю кнопку «Просмотр» в строке 1 и так для PWD.
Я загрузил проект в github: https://github.com/sammizodev/Jpa_two_tables




Вот обзор кода кода, который вы публикуете:
Соглашения об именах: вам следует взглянуть на соглашения об именах в java, атрибуты класса должны следовать синтаксису верблюжьего регистра, использование подчеркивания игнорируется.
Вышеупомянутое не должно влиять на схему вашей базы данных, так как вы можете использовать @Column для сопоставления поля таблицы и атрибута класса, например:
@Id
@Column(name = "dept_id")
private int id;
@Column(name = "dept_name")
private String name;
@Column(name = "dept_order")
private String Order;
Обратите внимание, порядок — это ключевое слово во многих базах данных, поэтому вам может потребоваться изменить его.
Успокоительные соглашения: Я бы посоветовал вам взглянуть на спокойный дизайн API, тогда вы сможете понять, как структурировать свое приложение для доступа к определенным ресурсам.
Согласно соглашениям, у вас есть один ресурс (отдел), и вам понадобятся эти URI:
Например, у вас есть GET /departments_list для отображения списка отделов, вместо этого вам нужно изменить его на GET /departments, а ваш шаблон должен называться list.html.
@GetMapping("/departments")
public String listDepartments(Model model) {
List<Department> departments = departmentService.findAll();
model.addAttribute("departments",departments);
return "/departments/list"; // Your current thymeleaf template
}
Затем вам понадобится GET /departments/{id}, чтобы отобразить информацию об отделе, включая список контактов.
Таким образом, в шаблоне списка отделов вы должны создать ссылку, например:
<a th:href = "@{/home/contact/{departmentId}(departmentId=${tempDepartment.dept_id})}"
class = "btn btn-info btn-sm">View</a>
Обратите внимание, вам нужно указать URL-адрес, например /home/contact/{departmentId}, чтобы tymeleaf мог заменить свойство id, иначе вы получите его в качестве параметра.
На вашем контроллере вам нужно обновить сопоставление с контактами, чтобы включить идентификатор в качестве переменной пути:
@GetMapping("/departments/{id}")
public String listContacts(@PathVariable("id") int theId, Model theModel) {
Department department = departmentService.findById(theId);
theModel.addAttribute("department",department);
return "/departments/show";
}
Если ваш класс отдела загружает контакты с нетерпением, вы можете получить доступ к списку в своем интерфейсе в шаблоне show.html.
<tr th:each = "contact : ${department.contacts}">
<td th:text = "${contact.contact_id}" />
<td th:text = "${contact.emp_name}" />
<td th:text = "${contact.mobile}" />
<td th:text = "${contact.landline_office}" />
</tr>
Кроме того, не забудьте подключить ContactService к своему DemoController.
public DemoController(DepartmentService departmentService, ContactService contactService) {
this.departmentService = departmentService;
this.contactService = contactService;
}
Спасибо большое. Но это не моя домашняя работа. Я действительно новичок в java, вот и все. Я пробовал писать много простых приложений с одной таблицей. Это просто хобби.