1. 程式人生 > >黑色的記憶 chester, come on

黑色的記憶 chester, come on

一、簡介

Javaweb中開發中必然會有多個javabean物件,而物件之間必然會存在的關係。那麼物件之間的關係在關係型資料庫中,如MySqlOracleSql 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);
		}
	}
}