dao 층 다 중 테이블 조작
예 를 들 어 teacher 와 student 의 다양한 관계 에 대해 teacher 표,student 표,teacherstudent 표 후 자바 에서 디자인 은 teacher 가 세 개의 표를 유지 합 니 다.student 는 teacher 를 포기 할 수 있 습 니 다.student 표 조작.학생 이 선생님 을 바 꾸 는 이런 일이 발생 하면 teacherstudent 표 작업 시 update 를 사용 할 수 없 으 며,먼저 delete 한 후 add 를 사용 하여 이 루어 집 니 다.
디자인 코드 는 다음 과 같 습 니 다.
domain 클래스:
package com.hao.domain;
import java.util.Set;
public class Teacher {
private String id;
private String name;
private double salary;
private Set students;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public Set getStudents() {
return students;
}
public void setStudents(Set students) {
this.students = students;
}
}
package com.hao.domain;
import java.util.Set;
public class Student {
private String id;
private String name;
// teachers dao ,
private Set teachers;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set getTeachers() {
return teachers;
}
public void setTeachers(Set teachers) {
this.teachers = teachers;
}
}
dao 층:
package com.hao.dao;
import com.hao.domain.Student;
import com.hao.domain.Teacher;
import com.hao.utils.DaoUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class TeacherDao {
private QueryRunner qr = new QueryRunner(DaoUtils.getDataSource());
public void add(Teacher teacher) {
try {
//
String sql = "insert into teacher(id,name,salary) values(?,?,?)";
qr.update(sql, teacher.getId(), teacher.getName(), teacher.getSalary());
Set students = teacher.getStudents();
String teacherId = teacher.getId();
for (Student student : students) {
//
sql = "insert into student(id,name) values(?,?)";
qr.update(sql, student.getId(), student.getName());
//
sql = "insert into teacher_student(teacher_id,student_id) values(?,?)";
qr.update(teacherId, student.getId());
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public void delete(String id) {
String sql = "delete from teacher where id = ?";
try {
qr.update(sql, id);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public void update(Teacher teacher) {
try {
//
String sql = "update teacher set name=?,salary=? where id=?";
qr.update(sql, teacher.getName(), teacher.getSalary(), teacher.getId());
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public Teacher find(String id) {
try {
//
String sql = "select name,salary from teacher where id=?";
Teacher teacher = qr.query(sql, new BeanHandler(Teacher.class), id);
teacher.setId(id);
// , ,
sql = "select st.id,st.name from student st,teacher_student te where te.teacher_id=? and te.student_i=dst.id";
List students = qr.query(sql, new BeanListHandler(Student.class), id);
teacher.setStudents(new HashSet(students));
return teacher;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.