JDBC操作多个表(一对多)
来源:互联网 发布:强强软件 编辑:程序博客网 时间:2024/05/16 13:50
数据库操作中,常常会涉及到多表操作。多表操作涉及到的大致有:
一对多或多对一关系
多对多关系
这里就一一进行举例来进行演示:
首先针对一对多关系
可以以现实中部门和员工的关系来说明此现象。一般情况下,一个部门会有很多员工,而一个员工通常只属于一个部门。下面是部门和员工的对象关系和数据库关系图:
对应到code如下:
package cn.itcast.domain;import java.util.HashSet;//deparment类public class Deparment {private int id;private String name;private HashSet<Employee> set = new HashSet<Employee>(); //一对多public Deparment(){}public Deparment(int id, String name) {super();this.id = id;this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public HashSet<Employee> getSet() {return set;}public void setSet(HashSet<Employee> set) {this.set = set;}}//员工类
package cn.itcast.domain;public class Employee {private String id;private String name;private float salary;private int deparment_id;public Employee(){}public Employee(String id, String name, float salary, int deparment_id) {super();this.id = id;this.name = name;this.salary = salary;this.deparment_id = deparment_id;}public String getId() {return id;}public void setId(String 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 getDeparment_id() {return deparment_id;}public void setDeparment_id(int deparment_id) {this.deparment_id = deparment_id;}}mysql数据库,deparment和employee表的定义
create table deparment( id int primary key, name varchar(20) );
create table employee(id varchar(40) primary key,name varchar(20),salary float,deparment_id int,constraint deparment_id_FK foreign key(deparment_id) references deparment(id));//部门和员工Dao接口
public interface DeparmentDao {void add(Deparment department) throws SQLException;//增加一个部门Deparment findDeparment(int id) throws SQLException, DeparmentNotExistExceptin;//查找一个部门List<Employee> getAllEmployees(int deparment_id) throws SQLException;//获取一个部门所有员工信息}
public interface EmployeeDao {void add(Employee employee) throws SQLException;//增加一个员工Employee find(String id) throws SQLException;//查找一个员工}//DaoImpl实现
package cn.itcast.dao.impl;import java.sql.SQLException;import java.util.HashSet;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 cn.itcast.dao.DeparmentDao;import cn.itcast.domain.Deparment;import cn.itcast.domain.Employee;import cn.itcast.exception.DeparmentNotExistExceptin;import cn.itcast.utils.JdbcC3p0Utils;import cn.itcast.utils.JdbcDbutils;/* create table deparment( id int primary key, name varchar(20) ); */public class DemparmentDaoImpl implements DeparmentDao {public void add(Deparment department) throws SQLException{QueryRunner qr = new QueryRunner();//添加department 表String sql = "insert into deparment(id, name) values(?, ?)";Object[] param = {department.getId(), department.getName()};qr.update(JdbcDbutils.getConnection(), sql, param);//添加employee表sql = "insert into employee(id, name, salary, deparment_id) values(?,?,?,?)";HashSet<Employee> set = department.getSet();Object[][] params = new Object[set.size()][];int index = 0;for(Employee employee: set){params[index++] = new Object[]{employee.getId(), employee.getName(), employee.getSalary(), department.getId()};}qr.batch(JdbcDbutils.getConnection(), sql, params);}public Deparment findDeparment(int deparment_id) throws SQLException, DeparmentNotExistExceptin{QueryRunner qr = new QueryRunner();String sql = "select * from deparment where id=?";Object[] params = {deparment_id};Deparment dp = (Deparment)qr.query(JdbcDbutils.getConnection(), sql, new BeanHandler(Deparment.class), params);if(dp==null){throw new DeparmentNotExistExceptin();}//获取employee信息sql = "select * from employee where deparment_id = ?";params = new Object[]{dp.getId()};List<Employee> lst = (List<Employee>) qr.query(JdbcDbutils.getConnection(), sql, new BeanListHandler(Employee.class), params);for(Employee employee: lst){dp.getSet().add(employee);}return dp;}public List<Employee> getAllEmployees(int deparment_id) throws SQLException{QueryRunner qr = new QueryRunner();String sql = "select * from deparment where id=?";Object[] params = {deparment_id};Deparment dp = (Deparment)qr.query(JdbcDbutils.getConnection(), sql, new BeanHandler(Deparment.class), params);//获取employee信息sql = "select * from employee where deparment_id = ?";params = new Object[]{dp.getId()};List<Employee> lst = (List<Employee>) qr.query(JdbcDbutils.getConnection(), sql, new BeanListHandler(Employee.class), params);return lst;}}
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 cn.itcast.dao.EmployeeDao;import cn.itcast.domain.Employee;import cn.itcast.utils.JdbcDbutils;/* create table employee(id varchar(40) primary key,name varchar(20),salary float,deparment_id int,constraint deparment_id_FK foreign key(deparment_id) references deparment(id)); */public class EmployeeDaoImpl implements EmployeeDao {public void add(Employee employee) throws SQLException{QueryRunner qr = new QueryRunner();String sql = "insert into employee(id, name, salary, deparment_id) values(?,?,?,?)";Object[] params = {employee.getId(), employee.getName(), employee.getSalary(), employee.getDeparment_id()};qr.update(JdbcDbutils.getConnection(), sql, params);}public Employee find(String id) throws SQLException{QueryRunner qr = new QueryRunner();String sql = "select from employee where id=?";Object[] params = {id};return (Employee) qr.query(JdbcDbutils.getConnection(), sql, new BeanHandler(Employee.class), params);}}
//测试类
package cn.itcast.junit;import java.util.HashSet;import org.junit.Test;import cn.itcast.dao.DeparmentDao;import cn.itcast.dao.EmployeeDao;import cn.itcast.dao.impl.DemparmentDaoImpl;import cn.itcast.dao.impl.EmployeeDaoImpl;import cn.itcast.domain.Deparment;import cn.itcast.domain.Employee;import cn.itcast.exception.DeparmentNotExistExceptin;import cn.itcast.utils.JdbcDbutils;public class DaoTest {@Testpublic void DemparmentAddTest() {try {JdbcDbutils.startTransaction();Deparment deparment = new Deparment(2, "softer4");Employee employee1 = new Employee("pa0001", "wuliang", 1000,deparment.getId());Employee employee2 = new Employee("pa0002", "xiaotao", 2000,deparment.getId());Employee employee3 = new Employee("pa0003", "wlxt", 3000,deparment.getId());deparment.getSet().add(employee1);deparment.getSet().add(employee2);deparment.getSet().add(employee3);DeparmentDao daoImpl = new DemparmentDaoImpl();daoImpl.add(deparment);JdbcDbutils.commit();} catch (Exception e) {e.printStackTrace();JdbcDbutils.rollback();} finally {JdbcDbutils.release();}}@Testpublic void DemparmentFindTest() {try {JdbcDbutils.startTransaction();Deparment deparment = new Deparment();DeparmentDao daoImpl = new DemparmentDaoImpl();deparment = daoImpl.findDeparment(2);//获取部分信息System.out.println("deparment id:"+deparment.getId());System.out.println("deparment name:"+deparment.getName());//获取员工信息for(Employee employee: deparment.getSet()){System.out.println("\t------------");System.out.println("\t"+"id:"+employee.getId());System.out.println("\t"+"name:"+employee.getName());System.out.println("\t"+"salary:"+employee.getSalary());}JdbcDbutils.commit();} catch (Exception e) {e.printStackTrace();JdbcDbutils.rollback();} finally {JdbcDbutils.release();}}@Testpublic void EmployeeAddTest() {try {JdbcDbutils.startTransaction();Employee employee = new Employee("cv0001", "wuliang", 1000, 2);DeparmentDao dpDaoImpl = new DemparmentDaoImpl();Deparment deparment = dpDaoImpl.findDeparment(employee.getDeparment_id());EmployeeDao emDaoImpl = new EmployeeDaoImpl();emDaoImpl.add(employee);JdbcDbutils.commit();} catch(DeparmentNotExistExceptin de){System.out.println("对不起登记错误,部门不存在!!!!");}catch (Exception e) {e.printStackTrace();JdbcDbutils.rollback();} finally {JdbcDbutils.release();}}}
0 0
- JDBC操作多个表(一对多)
- Hibernate一对多操作
- JDBC一对多、多对多实例
- Hibernate进行一对多操作
- django 一对多关系操作
- django 一对多关系操作
- Hibernate 一对多双向操作
- Hibernate一对多关联操作
- Hibernate的一对多操作
- JDBC上关于数据库中多表操作一对多关系和多对多关系的实现方法
- JDBC上关于数据库中多表操作一对多关系和多对多关系的实现方法
- Hibernate一对多,多对多操作
- 一对多、对多一、批量操作
- MyBaits一对一,一对多表操作
- Hibernate一对多双向级联操作
- 使用Hibernate操作一对多关系
- hibernate 一对多表配置及操作
- Hibernate一对多和多不多的操作
- Java主线程等待子线程、线程池
- 图像处理方向的就业前景
- Sql Server 导出表数据的手动方法
- 编写优美的GTest测试案例
- Oracle 常用dump命令
- JDBC操作多个表(一对多)
- UICollectionViewCell上显示编辑菜单
- android应用安全——组件通信安全
- ArcGIS与*.dem
- freemaker简单实用
- SRM 600 DIV2
- java小白日记1--http请求添加Authorization验证
- Android开发心得-ListView的监听事件
- 线程安全Collections.synchronizedList