多对一关系表 java类描述

涉及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

多对一关系表 java类描述的相关文章

一对一关系数据库表 java类描述

一对一关系中 从表的主键是 主表的外键 sql语句 1 create table person( 2 id int primary key, 3 name varchar(100) 4 ); 5 create table idcard( 6 id int primary key, 7 num varchar(20), 8 constraint person_id_fk foreign key(id) references person(id) 9 );View Code domain Perso

多对多关系数据库表 java描述

多对多关系 需要建立一张新表存放它们的对应数据 sql语句 1 create table teacher( 2 id int primary key, 3 name varchar(100), 4 money float(8,2) 5 ); 6 create table student( 7 id int primary key, 8 name varchar(100), 9 grade varchar(10) 10 ); 11 create table teacher_student( 12

数据表-java类的映射

1.一个数据表对应一个java类 2.数据表的字段对应java类的属性 3.一对多的数据表关系 一方用一个java对象表示 多方用一个java对象数组表示 4.多对多的数据表关系:采用中间表,将多对多转为多对一进行处理 eg:Student类

六、hibernate表与表之间的关系(多对多关系)

多对多关系 创建实体类和对应映射文件 Student.java 1 package com.qf.entity; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 public class Student { 7 8 private Long sid; 9 private String sname; 10 //一个学生可以有很多个老师 11 private Set<Teacher> teachs = new HashSet<

Flask框架之多对多关系模型类的定义

案例代码: table_relation = db.Table('stu_tea_rel', # 关系表明 db.Column('stu_id', db.Integer, db.ForeignKey('student.id')), # 多关系表的主键 db.Column('tea_id', db.Integer, db.ForeignKey('teacher.id'))) # 多关系表的主键 class Student(db.Model): id = db.Column(db.Integer,

Java学习总结(十六)——MySQL数据库(中)分组,嵌套,连接查询及外键与关系表设计

一.分组查询 1.语法:group by 分组字段1[,分组字段2,.........] [having 分组后的筛选条件]2.注意:分组字段应该与select后的查询字段一致,否则查询结果无意义3.分组查询经常会与聚合函数一起使用例:(1)先建一张商品表(以此表为例进行分组查询) (2)插入记录 (3)查询:#1.计算每一种商品单价的平均价格 查询结果:#2.计算日用品种类的平均价格 查询结果:二.连接查询1.等值连接语法:select 字段1,字段2,........ from 表A,表B,

Hibernate多对多中间表数据更新问题

最近在做oa系统:角色(Role)和权限(Privilege) 是多对多关系,实体类关系映射采用注解方式 //角色类中映射权限关系@ManyToMany public Set<Privilege> getPrivileges() { return privileges; } //权限类中映射角色关系@ManyToMany(mappedBy="privileges") public Set<Role> getRoles() { return roles; } //

python 外键用法 多对多关系 ORM操作 模板相关

一.app/models中写类(设计表结构) 1.普通类 class  A(models.Model): id=modles.AutoField(primary_key=True) name=models.CharField(max_length=32,unique=True) 2.设置外键 class B(models.Model): id = models.AutoField(primary_key=True) title = models.CharField(max_length=32,

如何用Django建关系表

在models.py文件中通过定义类来创建表 创建一对一关系表 员工信息表:id.姓名.年龄 工资表:id.员工id.薪资(员工id与员工信息表的id一一对应) class UserInfo(models.Model): name = models.CharField(max_length=32,null=True) age = models.IntegerField() class Private(models.Model): salary = models.CharField(max_len