黑色的記憶 chester, come on
阿新 • • 發佈:2019-02-20
一、簡介
Javaweb中開發中必然會有多個javabean物件,而物件之間必然會存在的關係。那麼物件之間的關係在關係型資料庫中,如MySql、Oracle、Sql Server資料庫中是如何體現這裡關係的呢。
Javabean一般在資料庫中是以表的形式體現,而java物件之間的關係(不管是簡單的還是複雜的關係)都是以表外來鍵約束來體現的。
二、Java物件關係與資料庫表之間的關係對映
從實現事務來分,事務之間存在的多對多、多對一、一對一三種關係。比如學生與老師的關係,是多對多的關係(一個學生有多位老師,而一位老師教多位學生),員工與部門的關係,是多對一關係(多個員工對應一個部門),公民與身份證的關係,是一對一關係。在實現開發中,建議使用多對一描述物件關係。儘量的避免使用多與多與一對多的關係。
1>多對多關係對映(雙向) 實現開發中建議使用單向的。比如只在Teacher類中保有Student等..
2>多對一關係對映(單向) 實現開發中也建議使用單向的,在多的一方建立關係
3>一對一關係對映
三、多表操作示例程式碼
public class TeacherDaoImpl { private QueryRunner qr = new QueryRunner(DbcpUtil.getDataSource()); public void addTeacher(Teacher t){ try{ //儲存教師的基本資訊 String sql = "insert into teacher(id,name) values(?,?,?)"; Object params[] = {t.getId(),t.getName())}; qr.update(sql, params); List<Student> stus = t.getStudents(); if(0 != teacher.getList().size()){ //儲存學生相關資訊及維護第三方表的相關資訊 sql = "insert into student(id,name,grade) values(?,?,?)"; String sql2 = "insert into tea_stu_fk(s_id,t_id) values(?,?)"; Object[][] prams = new Object[teacher.getList().size()][]; Object[][] prams2 = new Object[teacher.getList().size()][]; for(int i=0;i<teacher.getList().size();i++){ Student stu = teacher.getList().get(i); prams[i] = new Object[]{stu.getId(),stu.getName(),stu.getGrade()}; prams2[i] = new Object[]{stu.getId(),teacher.getId()}; } qr.batch(conn,sql, prams); qr.batch(conn,sql2, prams2); } }catch(Exception e){ throw new RuntimeException(e); } } public Teacher findTeacherById(Integer id){ try{ String sql = "select * from teacher where id=?"; Teacher t = qr.query(sql, new BeanHandler<Teacher>(Teacher.class), id); if(t!=null){ sql = "select * from student where id in (select s_id from teacher_student where t_id=?)"; List<Student> students = qr.query(sql, new BeanListHandler<Student>(Student.class), id); t.setStudents(students); } return t; }catch(Exception e){ throw new RuntimeException(e); } } }