少的一方把它查询出来,多的一方看需求把它查出来

涉及java对象涉及到多个对象相互引用,要尽量避免使用一对多,或多对多关系,而应使用多对一描述对象之间的关系(或使用延迟加载的方式)。

下个例子employee是多,而department是一 的关系

sql语句

 create table department_table(
id int primary key,
name varchar(100)
);
create table employee_table(
id int primary key,
name varchar(100),
salary float(8,2),
dept_id int,
constraint dept_id_fk foreign key(dept_id) references department(id)
);

domain

employee.java

 package cn.itcast.domain;

 import java.io.Serializable;
import java.util.List;
/*
create table department(
id int primary key,
name varchar(100)
);
create table employee(
id int primary key,
name varchar(100),
salary float(8,2),
dept_id int,
constraint dept_id_fk foreign key(dept_id) references department(id)
);
*/
public class Employee implements Serializable {
Integer id;
String name;
float salary;
int dept_id;
Department dep;
public Employee() {
super();
// TODO Auto-generated constructor stub
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getSalary() {
return salary;
}
public void setSalary(float salary) {
this.salary = salary;
}
public int getDept_id() {
return dept_id;
}
public void setDept_id(int dept_id) {
this.dept_id = dept_id;
}
@Override
public String toString() {
return "Employee [id=" + id + ", name=" + name + ", salary=" + salary
+ ", dept_id=" + dept_id + ", dep=" + dep + "]";
}
public Department getDep() {
return dep;
}
public void setDep(Department dep) {
this.dep = dep;
} }

departmenet.java

 package cn.itcast.domain;

 import java.io.Serializable;
import java.util.List; public class Department implements Serializable { private Integer id;
private String name;
List<Employee> emps;
public List<Employee> getEmps() {
return emps;
}
public void setEmps(List<Employee> emps) {
this.emps = emps;
}
public Department() {
super();
// TODO Auto-generated constructor stub
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Department [id=" + id + ", name=" + name + "]";
} }

EmployeeDaoImpl.java

 package cn.itcast.dao.impl;

 import java.sql.SQLException;
import java.util.List; import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler; import cn.itcast.domain.Department;
import cn.itcast.domain.Employee;
import cn.itcast.utils.JDBCUtil; public class EmployeeDaoImpl {
QueryRunner qr=new QueryRunner(JDBCUtil.getDataSource());
public void addEmployee(Employee e) throws SQLException
{
Department d=e.getDep(); //因为员工是外键依赖部门,所以先考察部门在不在然后考虑员工表
if(d!=null)
{
Object num=qr.query("select 1 from department_table where id= ?", new ScalarHandler(1),d.getId());
if(null==num)
{
qr.update("insert into department_table (id,name) values(?,?)",d.getId(),d.getName());
}
}
String sql="insert into employee_table (id,name,salary,dept_id) values(?,?,?,?)";
qr.update(sql,e.getId(),e.getName(),e.getSalary(),e.getDept_id());
} public Department findDepartment(String id) throws SQLException
{
Department d=qr.query("select * from department_table where id =?", new BeanHandler<Department>(Department.class),id);
if(d!=null)
{
List<Employee> emps=qr.query("select * from employee_table where dept_id =?", new BeanListHandler<Employee>(Employee.class),d.getId());
d.setEmps(emps);
}
return d;
}
}

测试

     EmployeeDaoImpl dao=new EmployeeDaoImpl();
@Test
public void addEmployee() throws SQLException
{
Department d=new Department();
d.setId(1);
d.setName("开发部"); Employee e=new Employee();
e.setId(1);
e.setName("chenlongfei");
e.setSalary(10000);
e.setDept_id(1);
e.setDep(d); dao.addEmployee(e); }
@Test
public void findDepartment() throws SQLException
{
Department d=dao.findDepartment("1");
System.out.println(d.getName());
for(Employee e:d.getEmps())
{
System.out.println(e.getName());
}
}

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

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

    一对一关系中 从表的主键是 主表的外键 sql语句 create table person( id int primary key, name varchar(100) ); create table ...

  2. 多对多关系表的创建方式、forms组件

    目录 多对多关系表的三种创建方式 1.全自动,Django自动创建 2.纯手撸 3.半自动(推荐使用) forms组件 小例子 forms组件 校验器 钩子函数 局部钩子 全局钩子 forms组件常用 ...

  3. 用SQLAlchemy创建一对多,多对多关系表

    多对多关系表的创建: 如果建立好多对多关系后,我们就可以通过关系名进行循环查找,比如laowang = Teacher.query.filter(Teacher.name=='laowang').fi ...

  4. Django-website 程序案例系列-7 创建多对多关系表

    创建多对多关系表: 方式一:一共三张表其中有一张中间表需要手工建立(建议使用第一种方式自定制程度高) class Host(models.Model): hostname = models.CharF ...

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

    多对多关系 需要建立一张新表存放它们的对应数据 sql语句 create table teacher( id int primary key, name ), ,) ); create table s ...

  6. 数据表-java类的映射

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

  7. 基于.net mvc的校友录(七、文件上传以及多对多关系表的LINQ查询实现)

    图片的上传与调用 图片的上传就是文件的上传,在前台使用的是type="file"的input,但是,要将表单声明为multipart/form-data模式,方法是在BeginFo ...

  8. EF架构~关于多对多关系表无法更新与插入的问题

    回到目录 在EF里,我们设计模型时,会设计到多对多关系,在EF里会把这种关系会转成两个一对多的关系表,这是比较友好的,因为多对多来说,对于业务本身没什么意思,所以隐藏了,没什么坏处,但对于这个隐藏来说 ...

  9. hibernate 一对多 多对一 关系表 增删改查大礼包ps二级查也有

    今天来到混元气功 这货大概的意思就是你中有我 我中有你 ps 这里就要说到维护关系 ps写这个用了我一下午.......也是刚刚好复习到这里 顺便就写写 注意:一般都在多方维护关系,至于是用单向还是用 ...

随机推荐

  1. PAT甲级1066. Root of AVL Tree

    PAT甲级1066. Root of AVL Tree 题意: 构造AVL树,返回root点val. 思路: 了解AVL树的基本性质. AVL树 ac代码: C++ // pat1066.cpp : ...

  2. UIImagePickerController导航字体颜色和背景

    创建UIImagePickerController // 创建图片选择器 UIImagePickerController *picker = [[UIImagePickerController all ...

  3. 查看linux启动的线程信息

    1.某一进程所有的线程个数.启动时间 ps max -o lstart,lwp,pid,nlwp,cmd|more lstart:     STARTED time the command start ...

  4. windows server 2008 r2, 每隔一段时间自动关机

      前段时间在做Exchange 2010测试的时候,由于windows server 2008  r2试用过期,开机后二个小时就会自动关机,可是我又不想重装系统,加为那样我可能需要重装好多东西,包括 ...

  5. sourceinsight使用技巧

    转:http://blog.csdn.net/flyyanqu/article/details/2222799 目录(?)[-] 配置成简单好用的cjava代码编辑器 缩进与tab 向项目中添加文件时 ...

  6. 一步一步学习Vim 全图解释

    转载:http://linux.chinaunix.net/techdoc/desktop/2009/01/03/1056322.shtml 一步一步学习Vim 全图解释 以下注释,根据图示和自己实践 ...

  7. 重装Windows系统后,Mysql的恢复

    在原地直接恢复MySQL的自动启动的数据库服务,操作如下. (1)环境变量里配置一下Mysql的bin目录 (2)管理员方式启动cmd,运行命令mysqld –install (3)启动Mysql服务 ...

  8. 开始整理iOS职位面试问题及答案

    Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承;可以实现多个接口,通过实现多个接 ...

  9. ArcGIS For Android ExportTileCache应用

    说明:从ArcGIS For Android10.2.4 ,開始支持下载在线地图服务切片缓存到移动设备本地.以便离线时进行地图浏览.本文章摘要介绍,使用自己公布的服务时,须要注意的内容. 一.首先公布 ...

  10. 使用BabeLua3.x在cocos2d-x中编辑和调试Lua

    BabeLua是一款基于VS2012/2013的Lua集成开发环境,具有Lua语法高亮,语法检查,自动补全,快速搜索,注入宿主程序内对Lua脚本进行调试,设置断点观察变量值,查看堆栈信息等功能. 如何 ...