涉及java对象涉及到多个对象相互引用,要尽量避免使用一对多,或多对多关系,而应使用多对一描述对象之间的关系(或使用延迟加载的方式)。
下个例子employee是多,而department是一
的关系
sql语句
1 create table department_table(
2 id int primary key,
3 name varchar(100)
4 );
5 create table employee_table(
6 id int primary key,
7 name varchar(100),
8 salary float(8,2),
9 dept_id int,
10 constraint dept_id_fk foreign key(dept_id) references department(id)
11 );
domain
employee.java
1 package cn.itcast.domain;
2
3 import java.io.Serializable;
4 import java.util.List;
5 /*
6 create table department(
7 id int primary key,
8 name varchar(100)
9 );
10 create table employee(
11 id int primary key,
12 name varchar(100),
13 salary float(8,2),
14 dept_id int,
15 constraint dept_id_fk foreign key(dept_id) references department(id)
16 );
17 */
18 public class Employee implements Serializable {
19 Integer id;
20 String name;
21 float salary;
22 int dept_id;
23 Department dep;
24 public Employee() {
25 super();
26 // TODO Auto-generated constructor stub
27 }
28 public Integer getId() {
29 return id;
30 }
31 public void setId(Integer id) {
32 this.id = id;
33 }
34 public String getName() {
35 return name;
36 }
37 public void setName(String name) {
38 this.name = name;
39 }
40 public float getSalary() {
41 return salary;
42 }
43 public void setSalary(float salary) {
44 this.salary = salary;
45 }
46 public int getDept_id() {
47 return dept_id;
48 }
49 public void setDept_id(int dept_id) {
50 this.dept_id = dept_id;
51 }
52 @Override
53 public String toString() {
54 return "Employee [id=" + id + ", name=" + name + ", salary=" + salary
55 + ", dept_id=" + dept_id + ", dep=" + dep + "]";
56 }
57 public Department getDep() {
58 return dep;
59 }
60 public void setDep(Department dep) {
61 this.dep = dep;
62 }
63
64 }
departmenet.java
1 package cn.itcast.domain;
2
3 import java.io.Serializable;
4 import java.util.List;
5
6 public class Department implements Serializable {
7
8 private Integer id;
9 private String name;
10 List<Employee> emps;
11 public List<Employee> getEmps() {
12 return emps;
13 }
14 public void setEmps(List<Employee> emps) {
15 this.emps = emps;
16 }
17 public Department() {
18 super();
19 // TODO Auto-generated constructor stub
20 }
21 public Integer getId() {
22 return id;
23 }
24 public void setId(Integer id) {
25 this.id = id;
26 }
27 public String getName() {
28 return name;
29 }
30 public void setName(String name) {
31 this.name = name;
32 }
33 @Override
34 public String toString() {
35 return "Department [id=" + id + ", name=" + name + "]";
36 }
37
38 }
EmployeeDaoImpl.java
1 package cn.itcast.dao.impl;
2
3 import java.sql.SQLException;
4 import java.util.List;
5
6 import org.apache.commons.dbutils.QueryRunner;
7 import org.apache.commons.dbutils.handlers.BeanHandler;
8 import org.apache.commons.dbutils.handlers.BeanListHandler;
9 import org.apache.commons.dbutils.handlers.ScalarHandler;
10
11 import cn.itcast.domain.Department;
12 import cn.itcast.domain.Employee;
13 import cn.itcast.utils.JDBCUtil;
14
15 public class EmployeeDaoImpl {
16 QueryRunner qr=new QueryRunner(JDBCUtil.getDataSource());
17 public void addEmployee(Employee e) throws SQLException
18 {
19 Department d=e.getDep(); //因为员工是外键依赖部门,所以先考察部门在不在然后考虑员工表
20 if(d!=null)
21 {
22 Object num=qr.query("select 1 from department_table where id= ?", new ScalarHandler(1),d.getId());
23 if(null==num)
24 {
25 qr.update("insert into department_table (id,name) values(?,?)",d.getId(),d.getName());
26 }
27 }
28 String sql="insert into employee_table (id,name,salary,dept_id) values(?,?,?,?)";
29 qr.update(sql,e.getId(),e.getName(),e.getSalary(),e.getDept_id());
30 }
31
32 public Department findDepartment(String id) throws SQLException
33 {
34 Department d=qr.query("select * from department_table where id =?", new BeanHandler<Department>(Department.class),id);
35 if(d!=null)
36 {
37 List<Employee> emps=qr.query("select * from employee_table where dept_id =?", new BeanListHandler<Employee>(Employee.class),d.getId());
38 d.setEmps(emps);
39 }
40 return d;
41 }
42 }
测试
1 EmployeeDaoImpl dao=new EmployeeDaoImpl();
2 @Test
3 public void addEmployee() throws SQLException
4 {
5 Department d=new Department();
6 d.setId(1);
7 d.setName("开发部");
8
9 Employee e=new Employee();
10 e.setId(1);
11 e.setName("chenlongfei");
12 e.setSalary(10000);
13 e.setDept_id(1);
14 e.setDep(d);
15
16 dao.addEmployee(e);
17
18 }
19 @Test
20 public void findDepartment() throws SQLException
21 {
22 Department d=dao.findDepartment("1");
23 System.out.println(d.getName());
24 for(Employee e:d.getEmps())
25 {
26 System.out.println(e.getName());
27 }
28 }
29
时间: 2024-11-08 07:39:39