JDBC多表的CRUD操作

一、简介

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值