一、简介
Javaweb中开发中必然会有多个javabean对象,而对象之间必然会存在的关系。那么对象之间的关系在关系型数据库中,如MySql、Oracle、Sql Server数据库中是如何体现这里关系的呢。
Javabean一般在数据库中是以表的形式体现,而java对象之间的关系(不管是简单的还是复杂的关系)都是以表外键约束来体现的。
二、Java对象关系与数据库表之间的关系映射
从实现事务来分,事务之间存在的多对多、多对一、一对一三种关系。比如学生与老师的关系,是多对多的关系(一个学生有多位老师,而一位老师教多位学生),员工与部门的关系,是多对一关系(多个员工对应一个部门),公民与身份证的关系,是一对一关系。在实现开发中,建议使用多对一描述对象关系。尽量的避免使用多与多与一对多的关系。
1>多对多关系映射(双向) 实现开发中建议使用单向的。比如只在Teacher类中保有Student等..
2>多对一关系映射(单向) 实现开发中也建议使用单向的,在多的一方建立关系
![](https://img-my.csdn.net/uploads/201210/18/1350570238_2482.jpg)
3>一对一关系映射
![](https://img-my.csdn.net/uploads/201210/18/1350570285_1919.jpg)
三、多表操作示例代码
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);
}
}
}