English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 장에서 우리는 CRUD(생성-읽기-업데이트-Web 애플리케이션을 제거)합니다. 이 애플리케이션은 학생 양식을 포함하고 있으며, 이 양식은 CRUD(생성, 읽기, 업데이트, 제거) 기능을 포함하고 있습니다. 이 통합에서 우리는 Spring Boot를 사용하여 백엔드 부분을 처리하고, Angular을 사용하여 프론트엔드 부분을 처리합니다.
우리가 애플리케이션을 서버에 배포하면, 웹 브라우저에서 학생 테이블이 생성됩니다. 이 양식은 학생을 추가하고 확인하는 데 도움이 됩니다. 학생 추가 링크를 클릭하면, 학생 테이블을 생성하는 페이지로 리디렉션되며, 필요한 상세 정보를 입력하고 제출하여 학생을 추가할 수 있습니다. 학생을 확인하는 링크를 사용하여, 기존 학생의 상세 정보를 얻을 수 있습니다. 여기서 각 학생은 업데이트 및 제거 링크를 포함하고 있습니다. 따라서 우리는 학생의 상세 정보를 업데이트하고 데이터베이스에서 그들을 제거할 수 있습니다. 작업이 완료되면, 웹 브라우저에서 URL http:을 제공합니다.//localhost: 4200/。
Spring와 Hibernate 프로젝트를 개발하기 위해 어떤 IDE를 사용할지 선택할 수 있습니다. STS가 될 수 있습니다./Eclipse/Netbeans. 여기서 우리는 STS(Spring 도구 모음)를 사용하고 있습니다. 데이터베이스에 사용되는 MySQL. Angular 프로젝트를 개발하기 위해 어떤 IDE를 사용하든 상관없습니다. Visual Studio Code일 수도 있습니다./Sublime. 여기서는 Visual Studio Code를 사용하고 있습니다. 서버: Apache Tomcat/JBoss/Glassfish/Weblogic/Websphere.
여기서는 다음 기술을 사용하고 있습니다:
SpringBoot2 Hibernate5 Angular6 MYSQL
데이터베이스를 생성하겠습니다 건저로 표를 생성하지 않아도 됩니다. Hibernate가 자동으로 생성합니다.
Spring Boot의 디렉토리 구조를 확인해 보겠습니다:
CRUD 애플리케이션을 개발하려면 다음 단계를 따르세요: -
依赖项을 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.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.main</groupId> <artifactId>Student</artifactId> <version>0.0.1-SNAPSHOT</version> <name>Student</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-devtools</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </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>
구성 클래스 생성
우리는 주석 기반의 구성을 실행하며 XML 대신를 사용합니다. 따라서 우리는 Config.java 클래스를 생성하고 필요한 구성을 지정합니다. 그러나 StudentApplication.java 구성 클래스도 있습니다. 이 클래스는 Spring Boot가 자동으로 제공합니다.
Config.java
package config; import java.util.Properties; import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScans; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.orm.hibernate5.HibernateTransactionManager; import org.springframework.orm.hibernate5.LocalSessionFactoryBean; import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.web.servlet.view.InternalResourceViewResolver; @Configuration @EnableTransactionManagement @EnableAutoConfiguration(exclude = { HibernateJpaAutoConfiguration.class}) @ComponentScans(value = { @ComponentScan("boot.entry"), @ComponentScan("Model"), @ComponentScan("Controller"), @ComponentScan("DAO"), @ComponentScan("Miscellaneous"), @ComponentScan("Service")} public class Config { @Value("${db.driver}") private String DB_DRIVER; @Value("${db.password}") private String DB_PASSWORD; @Value("${db.url}") private String DB_URL; @Value("${db.username}") private String DB_USERNAME; @Value("${hibernate.dialect}") private String HIBERNATE_DIALECT; @Value("${hibernate.show_sql}") private String HIBERNATE_SHOW_SQL; @Value("${hibernate.hbm}}2ddl.auto") private String HIBERNATE_HBM2DDL_AUTO; @Value("${entitymanager.packagesToScan}") private String ENTITYMANAGER_PACKAGES_TO_SCAN; @Bean public LocalSessionFactoryBean sessionFactory() { LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); sessionFactory.setPackagesToScan(ENTITYMANAGER_PACKAGES_TO_SCAN); Properties hibernateProperties = new Properties(); hibernateProperties.put("hibernate.dialect", HIBERNATE_DIALECT); hibernateProperties.put("hibernate.show_sql", HIBERNATE_SHOW_SQL); hibernateProperties.put("hibernate.hbm2ddl.auto", HIBERNATE_HBM2DDL_AUTO); sessionFactory.setHibernateProperties(hibernateProperties); return sessionFactory; } @Bean public DataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName(DB_DRIVER); dataSource.setUrl(DB_URL); dataSource.setUsername(DB_USERNAME); dataSource.setPassword(DB_PASSWORD); return dataSource; } @Bean public HibernateTransactionManager transactionManager() { HibernateTransactionManager txManager = new HibernateTransactionManager(); txManager.setSessionFactory(sessionFactory().getObject()); return txManager; } @Bean public InternalResourceViewResolver jspViewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/views/"); resolver.setSuffix(".jsp"); return resolver; } }
StudentApplication.java
package config; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class StudentApplication { public static void main(String[] args) { SpringApplication.run(StudentApplication.class, args); } }
创建实体类
在这里,我们将创建一个Entity/POJO(普通的旧Java对象)类。
Student.java
package Model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="student") public class Student { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private int student_id; private String student_name; private String student_email; private String student_branch; public int getStudent_id() { return student_id; } public void setStudent_id(int student_id) { this.student_id = student_id; } public String getStudent_name() { return student_name; } public void setStudent_name(String student_name) { this.student_name = student_name; } public String getStudent_email() { return student_email; } public void setStudent_email(String student_email) { this.student_email = student_email; } public String getStudent_branch() { return student_branch; } public void setStudent_branch(String student_branch) { this.student_branch = student_branch; } }
DAO 인터페이스 생성
여기서 우리는 데이터베이스와 관련된 작업을 수행할 DAO 인터페이스를 생성하고 있습니다.
Student_DAO.java
package DAO; import java.util.List; import Model.Student; public interface Student_DAO { public boolean saveStudent(Student student); public List<Student> getStudents(); public boolean deleteStudent(Student student); public List<Student> getStudentByID(Student student); public boolean updateStudent(Student student); }
DAO 인터페이스 구현 클래스 생성
Student_DAO_Imp.java
package DAO; import java.util.List; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.query.Query; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import Model.Student; @Repository public class Student_DAO_Imp implements Student_DAO { @Autowired private SessionFactory sessionFactory; @Override public boolean saveStudent(Student student) { boolean status = false; try { sessionFactory.getCurrentSession().save(student); status = true; } catch (Exception e) { e.printStackTrace(); } return status; } @Override public List<Student> getStudents() { Session currentSession = sessionFactory.getCurrentSession(); Query<Student> query = currentSession.createQuery("from Student", Student.class); List<Student> list = query.getResultList(); return list; } @Override public boolean deleteStudent(Student student) { boolean status = false; try { sessionFactory.getCurrentSession().delete(student); status = true; } catch (Exception e) { e.printStackTrace(); } return status; } @Override public List<Student> getStudentByID(Student student) { Session currentSession = sessionFactory.getCurrentSession(); Query<Student> query = currentSession.createQuery("from Student where student_id=:student_id", Student.class); query.setParameter("student_id", student.getStudent_id()); List<Student> list = query.getResultList(); return list; } @Override public boolean updateStudent(Student student) { boolean status = false; try { sessionFactory.getCurrentSession().update(student); status = true; } catch (Exception e) { e.printStackTrace(); } return status; } }
서비스 레이어 인터페이스 생성
여기서 우리는 DAO와 엔티티 클래스 간의 브리지 역할을 할 서비스 레이어 인터페이스를 생성하고 있습니다.
Student_Service.java
package Service; import java.util.List; import Model.Student; public interface Student_Service { public boolean saveStudent(Student student); public List<Student> getStudents(); public boolean deleteStudent(Student student); public List<Student> getStudentByID(Student student); public boolean updateStudent(Student student); }
创建服务层实现类
Student_Service_Imp.java
package Service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import DAO.Student_DAO; import Model.Student; @Service @Transactional public class Student_Service_Imp implements Student_Service { @Autowired private Student_DAO studentdao; @Override public boolean saveStudent(Student student) { return studentdao.saveStudent(student); } @Override public List<Student> getStudents() { return studentdao.getStudents(); } @Override public boolean deleteStudent(Student student) { return studentdao.deleteStudent(student); } @Override public List<Student> getStudentByID(Student student) { return studentdao.getStudentByID(student); } @Override public boolean updateStudent(Student student) { return studentDao.updateStudent(student); } }
创建控制器类
Controller.java
package Controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import Model.Student; import Service.Student_Service; @RestController @CrossOrigin(origins="http://localhost:4200") @RequestMapping(value="/api") public class Controller { @Autowired private Student_Service studentService; @PostMapping("save")-student") public boolean saveStudent(@RequestBody Student student) { return studentservice.saveStudent(student); } @GetMapping("students-list") public List<Student> allstudents() { return studentservice.getStudents(); } @DeleteMapping("delete-학생/{student_id}" public boolean deleteStudent(@PathVariable("student_id") int student_id,Student student) { student.setStudent_id(student_id); return studentservice.deleteStudent(student); } @GetMapping("student/{student_id}" public List<Student> allstudentByID(@PathVariable("student_id") int student_id,Student student) { student.setStudent_id(student_id); return studentservice.getStudentByID(student); } @PostMapping("update-학생/{student_id}" public boolean updateStudent(@RequestBody Student student,@PathVariable("student_id") int student_id) { student.setStudent_id(student_id); return studentservice.updateStudent(student); } }
application.properties 파일을 편집합니다
여기서 우리는 편집하고 있습니다 src/main/resources 폴더 내의 application.properties 파일. 다음 파일은 설정 속성을 포함하고 있습니다.
application.properties
# 데이터베이스 db.driver= com.mysql.jdbc.Driver db.url= jdbc:mysql://localhost:3306/건저로 db.username=root db.password= # Hibernate hibernate.dialect=org.hibernate.dialect.MySQL5Dialect hibernate.show_sql=true hibernate.hbm2ddl.auto=update entitymanager.packagesToScan=Model
Angular의 디렉토리 구조를 보겠습니다:
Angular 프로젝트 생성
다음 명령어로 Angular 프로젝트를 생성합니다:
ng 새로운 Angular
여기서, Angular 는 프로젝트 이름입니다.
다음 명령어로
npm install [email protected] --save
현재, style.css에 다음 코드 파일을 포함합니다.
@import "~bootstrap/dist/css/bootstrap.css";
다음 명령어로 Angular 데이터 테이블을 프로젝트에 설치합니다.
npm install Angular-datatable --save
은 포함되어야 합니다 app.module.ts 文件的导入数组中的DataTableModule 。
컴포넌트 생성
Visual Studio에서 프로젝트를 엽니다. 그런 다음 다음 명령어로 Angular 컴포넌트를 생성합니다:
ng gc AddStudent
ng gc StudentList
우리는 다음 명령어로 서비스 클래스를 생성합니다: -
ng gs 학생
편집 app.module.ts 파일 route 가져오기-여기서, 우리는 importing route 파일(app-routing.module.ts)를 가져오고 imports 배열에 포함합니다. ReactiveFormsModule 가져오기 -여기서, 우리는 가져옵니다 ReactiveFormsModule 반응형 형식에 사용하고, imports 배열에서 그것을 지정합니다. HttpModule 가져오기 -여기서, 우리는 서버 요청을 위한 HttpModule을 가져옵니다. HttpModule 그리고 import 배열에서 그것을 지정합니다. 서비스 클래스 등록-여기서, 우리는 제공자 배열에 있는 서비스 클래스에 대해 언급했습니다.
import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { AppRoutingModule } from '.'/app-routing.module'; import { AppComponent } from '.'/app.component'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { HttpClientModule } from '@angular/common/http'; import {DataTablesModule} from 'angular-datatables'; import { StudentListComponent } from './학생-list/학생-list.component'; import { AddStudentComponent } from './add-학생/add-student.component'; @NgModule({ declarations: [ AppComponent, StudentListComponent, AddStudentComponent, ], imports: [ BrowserModule, AppRoutingModule, FormsModule, ReactiveFormsModule, HttpClientModule, DataTablesModule ], providers: [], bootstrap: [AppComponent] }); export class AppModule { }
편집 app-routing.module.ts 파일
import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; import { StudentListComponent } from './학생-list/학생-list.component'; import { AddStudentComponent } from './add-학생/add-student.component'; const routes: Routes = [ { path: '', redirectTo: 'view-student', pathMatch: 'full' }, { path: 'view-student', component: StudentListComponent }, { path: 'add-student', component: AddStudentComponent }, ]); @NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule] }); exports: [RouterModule]}
편집 export class AppRoutingModule { } 파일
app.component.html-<div class="container fluid">-<nav class="navbar navbar-expand-sm bg-dark navbar dark">-<ul class="navbar primary active" role="button" >View Student<-nav"> item ">-<a routerLink="add-student" class="nav-<a routerLink="view/a> primary active" role="button" >Add Student< </li> primary active" role="button" >View Student<-<li class="nav item">-<a routerLink="add-student" class="nav-link" class="btn btn/a> primary active" role="button" >Add Student< </li> </ul> </nav> <router-outlet></router-outlet> </div>
생성 Student.ts 클래스
다음 명령어를 사용하여 강의를 생성하겠습니다: -
ng g class Student
현재, Student 클래스에서 필수 필드를 지정합니다.
export class Student { student_id: number; student_name: String; student_email: String; student_branch: String; }
이 클래스의 목적은 지정된 필드를 스프링 엔티티 클래스의 필드와 매핑하는 것입니다.
편집 student.service.ts 파일
import { Injectable } from '@angular'/core'; import { HttpClient } from '@angular'/common/http'; import { Observable } from 'rxjs'; @Injectable({ providedIn: 'root' }); export class StudentService { private baseUrl = 'http:'//localhost:8080/api/'; constructor(private http: HttpClient) { } getStudentList(): Observable<any> { return this.http.get(`${this.baseUrl}`+'students-list'); } createStudent(student: object): Observable<object> { return this.http.post(`${this.baseUrl}`+'save-student', student); } deleteStudent(id: number): Observable<any> { return this.http.delete(`${this.baseUrl}`,/delete-학생/${id}`, { responseType: 'text' }); } getStudent(id: number): Observable<Object> { return this.http.get(`${this.baseUrl}`,/학생/${id}`); } updateStudent(id: number, value: any): Observable<Object> { return this.http.post(`${this.baseUrl}`,/update-학생/${id}`, value); } }
편집 add-student.component.ts 파일
import { Component, OnInit } from '@angular/core'; import { StudentService } from '../student.service'; import {FormControl,FormGroup,Validators} from '@angular/forms'; import { Student } from '../student'; @Component({ selector: 'app'-add-student', templateUrl: './add-student.component.html', styleUrls: ['./add-student.component.css} }); export class AddStudentComponent implements OnInit { constructor(private studentservice: StudentService) { } student: Student = new Student(); submitted = false; ngOnInit() { this.submitted=false; } studentsaveform = new FormGroup({ student_name: new FormControl('', [Validators.required, Validators.minLength(5)], student_email: new FormControl('', [Validators.required, Validators.email]), student_branch: new FormControl() }); saveStudent(saveStudent){ this.student = new Student(); this.student.student_name = this.StudentName.value; this.student.student_email = this.StudentEmail.value; this.student.student_branch = this.StudentBranch.value; this.submitted = true; this.save(); } save() { this.studentservice.createStudent(this.student) .subscribe(data => console.log(data), error => console.log(error)); this.student = new Student(); } get StudentName(){ return this.studentsaveform.get('student_name'); } get StudentEmail(){ return this.studentsaveform.get('student_email'); } get StudentBranch(){ return this.studentsaveform.get('student_branch'); } addStudentForm(){ this.submitted=false; this.studentsaveform.reset(); } }
편집 add-student.component.html 파일
<h3>Create Student</h3> <div class="row"> <div class="col-sm-4></div> <div class="col-sm-4" > <div [hidden]="submitted" style="width: 400px;"> <form [formGroup]="studentsaveform" #savestudent (ngSubmit)="saveStudent(saveStudent)"> <div class="form-group"> <label for="name">Student Name</label>/label> <input type="text" class="form-control" formControlName="student_name" data-toggle="tooltip" data-placement="right" title="Enter Student Name" > <div class="alert alert-danger"}} *ngif = "(StudentName.touched) && (StudentName.invalid)" style="margin-top: 5px;"> <span *ngIf="StudentName.errors.required">Student Name is Required</span> <span *ngif = "StudentName.errors.minlength"> MinLength Error </span> </div> </div> <div class="form-group"> <label for="name">Student Email</label>/label> <input type="text" class="form-control" formControlName="student_email" data-toggle="tooltip" data-placement="right" title="Enter Student Email"> <div class="alert alert-danger"}} *ngif = "(StudentEmail.touched) && (StudentEmail.invalid)" style="margin-top: 5px;"> <span *ngIf="StudentEmail.errors.required">Student Email is Required</span> <span *ngif = "StudentEmail.errors.email"> Invalid Email Format </span> </div> </div> <div class="form-group"> <label for="branch">Student Branch</label> <select class="form-control" formControlName="student_branch" data-toggle="tooltip" data-placement="right" title="Select Student Branch"> <option value="null">--Select Branch--</option> <option value="B-Tech">B-Tech</option> <option value="BCA">BCA</option> <option value="MCA">MCA</option> <option value="M"}}-Tech">M-Tech</option> </select> </div> <button type="submit" class="btn btn-success">제출</button> </form> </div> </div> <div class="col-sm-4></div> </div> <div class="row"> <div class="col-sm-4></div> <div class="col-sm-4"> <div [hidden]="!submitted"> <h4>Student Added SuccessFully!</h4> <button (click)="addStudentForm()" class='btn btn-primary'>Add More Student</button> </div> </div> <div class="col-sm-4></div> </div>
클릭 학생 추가다음 페이지가 생성됩니다:
지금, 필요한 상세 정보를 입력하고, 학생을 추가하기 위해 제출하세요.
편집 학생-list.component.ts 파일
import { Component, OnInit } from '@angular/core'; import { StudentService } from '../student.service'; import { Student } from '../student'; import { Observable,Subject } from "rxjs"; import {FormControl,FormGroup,Validators} from '@angular/forms'; @Component({ selector: 'app'-학생-list', templateUrl: './학생-list.component.html', styleUrls: ['./학생-list.component.css }); export class StudentListComponent implements OnInit { constructor(private studentservice: StudentService) { } studentsArray: any[] = []; dtOptions: DataTables.Settings = {}; dtTrigger: Subject<any> = new Subject(); students: Observable<Student[]>; student: Student = new Student(); deleteMessage = false; studentlist: any; isupdated = false; ngOnInit() { this.isupdated=false; this.dtOptions = { pageLength: 6, stateSave: true, lengthMenu: [[6, 16, 20, -1], [[6, 16, 20, "All"]], processing: true}; this.studentservice.getStudentList().subscribe(data =>{ this.students = data; this.dtTrigger.next(); }); } deleteStudent(id: number) { this.studentservice.deleteStudent(id) .subscribe( data => { console.log(data); this.deleteMessage = true; this.studentservice.getStudentList().subscribe(data =>{ this.students = data }); }, error => console.log(error)); } updateStudent(id: number){ this.studentservice.getStudent(id) .subscribe( data => { this.studentlist = data }, error => console.log(error)); } studentupdateform: new FormGroup({ student_id: new FormControl(), student_name: new FormControl(), student_email: new FormControl(), student_branch: new FormControl() }); updateStu(updstu){ this.student = new Student(); this.student.student_id = this.StudentId.value; this.student.student_name = this.StudentName.value; this.student.student_email = this.StudentEmail.value; this.student.student_branch = this.StudentBranch.value; this.studentservice.updateStudent(this.student.student_id,this.student).subscribe( data => { this.isupdated=true; this.studentservice.getStudentList().subscribe(data =>{ this.students = data }); }, error => console.log(error)); } get StudentName(){ return this.studentupdateform.get('student_name'); } get StudentEmail(){ return this.studentupdateform.get('student_email'); } get StudentBranch(){ return this.studentupdateform.get('student_branch'); } get StudentId(){ return this.studentupdateform.get('student_id'); } changeisUpdate(){ this.isupdated=false; } }
편집 학생-list.component.html 파일
<div class="panel panel-default"> <div class="panel-heading"> <h1 style="text-align: 중앙 정렬">학생</h1><br> <div class="row" [hidden]="!deleteMessage"> <div class="col-sm-4></div> <div class="col-sm-4"> <div class="alert alert-info alert-dismissible"> <button type="button" class="close" data-dismiss="alert">×</button> <strong>Student Data Deleted</strong> </div> </div> <div class="col-sm-4></div> </div> </div> <div class="panel-body"> <table class="table table-hover table-sm" datatable [dtOptions]="dtOptions" [dtTrigger]="dtTrigger" > <thead class="thead-light"> <tr> <th>Student Name</th> <th>Student Email</th> <th>Student Branch</th> <th>Action</th> </tr> </thead> <tbody> <tr *ngFor="let student of students "> <td>{{student.student_name}}</td> <td>{{student.student_email}}</td> <td>{{student.student_branch}}</td> <td><button (click)="deleteStudent(student.student_id)" class='btn btn-primary'><i class="fa fa-futboll-0">Delete</i></button> <button (click)="updateStudent(student.student_id)" class='btn btn-info' data-toggle="modal" data-target="#myModal">Update</button> </td> </tr> </tbody><br> </table> </div> </div> <div class="modal" id="myModal"> <div class="modal-dialog"> <div class="modal-content">}} <form [formGroup]="studentupdateform" #updstu (ngSubmit)="updateStu(updstu)"><!-- Modal Header --> <div class="modal-header"> <h4 class="modal-title" style="text-align: center">Update Student</button>/h4> </div> <!-- Modal body --> <div class="modal-body" *ngFor="let student of studentlist " > <div [hidden]="isupdated"> <input type="hidden" class="form-control" formControlName="student_id" [(ngModel)]="student.student_id"> <div class="form-group"> <label for="name">Student Name</label>/label> <input type="text" class="form-control" formControlName="student_name" [(ngModel)]="student.student_name"> </div> <div class="form-group"> <label for="name">Student Email</label>/label> <input type="text" class="form-control" formControlName="student_email" [(ngModel)]="student.student_email"> </div> <div class="form-group"> <label for="name">Student Branch</label>/label> <select class="form-control" formControlName="student_branch" required> <option value="B-Tech" [selected]="'B-Tech' == student.student_branch">B-Tech</option> <option value="BCA" [selected]="'BCA' == student.student_branch">BCA</option>/option> <option value="MCA" [selected]="'MCA' == student.student_branch">MCA</option>/option> <option value="M"}}-Tech" [selected]="'M-Tech' == student.student_branch">M-Tech</option> </select> </div> </div> <div [hidden]="!isupdated"> <h4>학생 상세 정보 업데이트 완료!</h4> </div> </div> <!-- Modal footer --> <div class="modal-footer" > <button type="submit" class="btn btn-success" [hidden]="isupdated">업데이트</button> <button type="button" class="btn btn-danger" data-dismiss="modal" (click)="changeisUpdate()">닫기</button> </div> </form> </div> </div> </div>
클릭 학생 보기다음 페이지가 생성됩니다:
클릭 학생 업데이트다음 가이드 프로그램 모드가 표시됩니다:
여기서 기존 학생의 상세 정보를 업데이트할 수 있습니다.
클릭 삭제 (삭제) 기존 학생이 데이터베이스에서 제거됩니다. 특정 학생을 제거한 후 결과를 확인해 보겠습니다.