JDBC多表的CRUD操作
一、簡介
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); } } }
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!