JDBC多表的CRUD操作

jopen 12年前發布 | 50K 次閱讀 JDBC Java開發

一、簡介

Javaweb中開發中必然會有多個javabean對象,而對象之間必然會存在的關系。那么對象之間的關系在關系型數據庫中,如MySqlOracleSql Server數據庫中是如何體現這里關系的呢。

Javabean一般在數據庫中是以表的形式體現,而java對象之間的關系(不管是簡單的還是復雜的關系)都是以表外鍵約束來體現的。

二、Java對象關系與數據庫表之間的關系映射

從實現事務來分,事務之間存在的多對多、多對一、一對一三種關系。比如學生與老師的關系,是多對多的關系(一個學生有多位老師,而一位老師教多位學生),員工與部門的關系,是多對一關系(多個員工對應一個部門),公民與身份證的關系,是一對一關系。在實現開發中,建議使用多對一描述對象關系。盡量的避免使用多與多與一對多的關系。

1>多對多關系映射(雙向實現開發中建議使用單向的。比如只在Teacher類中保有Student..

JDBC多表的CRUD操作

2>多對一關系映射(單向實現開發中也建議使用單向的,在多的一方建立關系

JDBC多表的CRUD操作

3>一對一關系映射

JDBC多表的CRUD操作

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