保存员工同时保存关联的部门

本文通过具体的Java代码示例介绍了如何实现对象关系映射(ORM),包括定义部门(Dept)和员工(Employee)两个类,并通过EmpDao类演示了如何在数据库中保存这两个实体及其之间的关联。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Dept.java

public class Dept {

	private int id;
	private String deptName;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getDeptName() {
		return deptName;
	}
	public void setDeptName(String deptName) {
		this.deptName = deptName;
	}
	
	
}

Employee.java

public class Employee {

	private int empId;
	private String empName;
	// 关联的部门
	private Dept dept;
	
	
	public Dept getDept() {
		return dept;
	}
	public void setDept(Dept dept) {
		this.dept = dept;
	}
	public int getEmpId() {
		return empId;
	}
	public void setEmpId(int empId) {
		this.empId = empId;
	}
	public String getEmpName() {
		return empName;
	}
	public void setEmpName(String empName) {
		this.empName = empName;
	}
}
EmpDao.java

public class EmpDao {
	
	private Connection con;
	private PreparedStatement pstmt;
	private ResultSet rs;

	// 保存员工,同时保存关联的部门
	public void save(Employee emp){
		
		// 保存部门
		String sql_dept = "insert into dept(deptName) values(?)";
		// 保存员工
		String sql_emp = "INSERT INTO employee (empName,dept_id) VALUES (?,?)";
		// 部门id
		int deptId = 0;
		
		try {
			// 连接
			con = JdbcUtil.getConnection();
			
			/*****保存部门,获取自增长*******/
			// 【一、需要指定返回自增长标记】
			pstmt = con.prepareStatement(sql_dept,Statement.RETURN_GENERATED_KEYS);
			// 设置参数
			pstmt.setString(1, emp.getDept().getDeptName());
			// 执行
			pstmt.executeUpdate();
			
			// 【二、获取上面保存的部门子增长的主键】
			rs =  pstmt.getGeneratedKeys();
			// 得到返回的自增长字段
			if (rs.next()) {
				deptId = rs.getInt(1);
			}
			
			/*****保存员工*********/
			pstmt = con.prepareStatement(sql_emp);
			// 设置参数
			pstmt.setString(1, emp.getEmpName());
			pstmt.setInt(2, deptId);
			pstmt.executeUpdate();
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			JdbcUtil.closeAll(con, pstmt, rs);
		}
	}
}

App.java

// 保存员工
	@Test
	public void testSave() throws Exception {
		// 模拟数据
		Dept d = new Dept();
		d.setDeptName("应用开发部");
		Employee emp = new Employee();
		emp.setEmpName("李俊杰");
		emp.setDept(d);   // 关联
		
		// 调用dao保存
		EmpDao empDao = new EmpDao();
		empDao.save(emp);
		
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值