dao 층 다 중 테이블 조작

관계 다 표 추출 은 대상 을 대상 으로 하 는 사상 에 따라 데 이 터 를 대상 으로 하고 한 대상 이 다른 하위 대상 을 포장 하 며 하위 대상 이 하위 대상 을 포장 하고 주 대상 의 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);
        }
    }
}

좋은 웹페이지 즐겨찾기