多对一关系表 java类描述
少的一方把它查询出来,多的一方看需求把它查出来
涉及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类描述的更多相关文章
- 一对一关系数据库表 java类描述
一对一关系中 从表的主键是 主表的外键 sql语句 create table person( id int primary key, name varchar(100) ); create table ...
- 多对多关系表的创建方式、forms组件
目录 多对多关系表的三种创建方式 1.全自动,Django自动创建 2.纯手撸 3.半自动(推荐使用) forms组件 小例子 forms组件 校验器 钩子函数 局部钩子 全局钩子 forms组件常用 ...
- 用SQLAlchemy创建一对多,多对多关系表
多对多关系表的创建: 如果建立好多对多关系后,我们就可以通过关系名进行循环查找,比如laowang = Teacher.query.filter(Teacher.name=='laowang').fi ...
- Django-website 程序案例系列-7 创建多对多关系表
创建多对多关系表: 方式一:一共三张表其中有一张中间表需要手工建立(建议使用第一种方式自定制程度高) class Host(models.Model): hostname = models.CharF ...
- 多对多关系数据库表 java描述
多对多关系 需要建立一张新表存放它们的对应数据 sql语句 create table teacher( id int primary key, name ), ,) ); create table s ...
- 数据表-java类的映射
1.一个数据表对应一个java类 2.数据表的字段对应java类的属性 3.一对多的数据表关系 一方用一个java对象表示 多方用一个java对象数组表示 4.多对多的数据表关系:采用中间表,将多对多 ...
- 基于.net mvc的校友录(七、文件上传以及多对多关系表的LINQ查询实现)
图片的上传与调用 图片的上传就是文件的上传,在前台使用的是type="file"的input,但是,要将表单声明为multipart/form-data模式,方法是在BeginFo ...
- EF架构~关于多对多关系表无法更新与插入的问题
回到目录 在EF里,我们设计模型时,会设计到多对多关系,在EF里会把这种关系会转成两个一对多的关系表,这是比较友好的,因为多对多来说,对于业务本身没什么意思,所以隐藏了,没什么坏处,但对于这个隐藏来说 ...
- hibernate 一对多 多对一 关系表 增删改查大礼包ps二级查也有
今天来到混元气功 这货大概的意思就是你中有我 我中有你 ps 这里就要说到维护关系 ps写这个用了我一下午.......也是刚刚好复习到这里 顺便就写写 注意:一般都在多方维护关系,至于是用单向还是用 ...
随机推荐
- leetcode132. Palindrome Partitioning II
leetcode132. Palindrome Partitioning II 题意: 给定一个字符串s,分区使分区的每个子字符串都是回文. 返回对于s的回文分割所需的最小削减. 例如,给定s =&q ...
- PHP 基础函数(二)数组的内部指针
current($arr); 返回数组中的当前单元pos($arr); 返回数组中的当前单元key($arr); 返回数组中当前单元的键名prev($arr); 将数组中的内部指针倒回一位ne ...
- Java常量定义需要注意事项及static作用(复习)
在任何开发语言中,都需要定义常量.在Java开发语言平台中也不例外.不过在Java常量定义的时候,跟其他语言有所不同.其有自己的特色.在这篇文章中,主要针对Java语言中定义常量的注意事项进行解析,帮 ...
- 使用apache htpasswd生成加密的password文件,并使用.htaccess控制文件夹訪问
htpasswd 是apache的小工具.在apache安装文件夹bin下可找到. Usage: htpasswd [-cmdpsD] passwordfile username htpasswd - ...
- Basic Messager
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Labeled Faces in the Wild 人脸识别数据集 部分测试数据
development test set Note: images displayed are original (non-aligned/funneled) images. match pairs ...
- mvn sonar:sonar在jenkins步骤的执行位置影响执行结果
1.如图所示,sonar执行可以在build中执行,也可以在步骤Post Steps中执行(mvn sonar:sonar) 2.但是在步骤Post Steps中执行的话,有一个问题,就是假如项目有多 ...
- [转]Hamcrest使用方法实例
assertThat方法需要使用hamcrest的匹配方法: 示例 assertThat( n, allOf( greaterThan(1), lessThan(15) ) ); assertThat ...
- 在Ubuntu 13.04下的安装eclipse
来源:http://www.cnblogs.com/lanxuezaipiao/p/3325628.html 一.eclipse安装过程 首先确保在安装eclipse之前已经安装好Java虚拟机 1. ...
- 如何为Failover Cluster添加Quorum disk
无废话, 上图.