JDBC多表的CRUD操作

jopen 12年前

一、简介

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);                }            }        }