博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java_部门操作实现
阅读量:4361 次
发布时间:2019-06-07

本文共 11081 字,大约阅读时间需要 36 分钟。

现在要求利用dept表开发出以下功能:

  实现部门数据增加

  实现部门数据修改

  实现部门数据删除

  可以根据编号查询出一个部门信息

  可以查询出全部部门信息

沿用之前的项目继续编写,DatabaseConnection已经存在了。

1.定义Dept.java类

需要在vo包中创建,也要实现Serializable接口 

package xxx.vo;import java.io.Serializable;public class Dept implements Serializable {    private Integer deptno;    private String dname;    private String loc;    public Integer getDeptno() {        return deptno;    }    public void setDeptno(Integer deptno) {        this.deptno = deptno;    }    public String getDname() {        return dname;    }    public void setName(String dname) {        this.dname = dname;    }    public String getLoc() {        return loc;    }    public void setLoc(String loc) {        this.loc = loc;    }}

 

2.定义IDeptDAO接口(不用这个,用泛型的方式)

package xxx.dao;import java.util.List;import java.util.Set;import xxx.vo.Dept;public interface IDeptDAO {    public boolean doCreate(Dept vo) throws Exception;    public boolean doUpdate(Dept vo) throws Exception;    public boolean doRemove(Set
ids) throws Exception; public Dept findById(Integer id) throws Exception; public List
findAll() throws Exception;}

整个代码里除了VO类型、ID类型不一样之外,该用的之前都有了。所以不用上门的方法再下一遍,用泛型

范例:定义IDAO的公共接口,这个接口不定义具体的VO或者主键的类型

 

package xxx.dao;import java.util.List;import java.util.Set;/** *  * @author James * * @param 
要操作数据表的主键数据类型 * @param
要操作的VO类型 */public interface IDAO
{ /**数据增加的操作,执行的是INSERT语句 * @param vo 包含了要增加的数据信息 * @return 如果数据增加成功 返回true 否则返回false * @throws Exception 如果数据库没有连接,则出现NullPointerException,如果SQL语句错误抛出SQLException */ public boolean doCreate(V vo) throws Exception; /** * 数据修改操作,执行UPDATE语句,本次的修改会根据ID将所有的数据进行变更 * @param vo 包含了要修改数据的信息 * @return 如果数据修改成功 返回true 否则返回false * @throws Exception 如果数据库没有连接,则出现NullPointerException,如果SQL语句错误抛出SQLException */ public boolean doUpdate(V vo) throws Exception; /**数据删除操作,需在执行前根据删除的编号,拼凑出SQL语句 * @param ids 所有要删除的编号数据 * @return 如果数据删除成功 返回true 否则返回false * @throws Exception 如果数据库没有连接,则出现NullPointerException,如果SQL语句错误抛出SQLException */ public boolean doRemove(Set
ids) throws Exception; /**根据雇员编号查询出表一行的完整信息,并且将返回结果填充到VO类对象中 * @param id 要查询的数据编号 * @return 如果查询到则将内容以vo对象的形式返回,如果查到没有数据返回null * @throws Exception 如果数据库没有连接,则出现NullPointerException,如果SQL语句错误抛出SQLException */ public V findById(K id) throws Exception; /**查询数据表中的全部数据,每行数据通过vo类包装,而后通过List保存多个返回结果 * @return 全部的查询数据行,如果没有数据返回,集合长度为0(size() = 0)。 * @throws Exception 如果数据库没有连接,则出现NullPointerException,如果SQL语句错误抛出SQLException */ public List
findAll() throws Exception; /**分页进行数据表的模糊查询操作,每行数据通过vo类包装,而后通过List保存多个返回结果 * @param columun 要模糊查询的数据列 * @param keyWord 要进行查询的关键字 * @param currentPage 当前所在页 * @param lineSize 每页显示的数据行数 * @return 全部的查询数据行,如果没有数据返回,集合长度为0(size() = 0)。 * @throws Exception 如果数据库没有连接,则出现NullPointerException,如果SQL语句错误抛出SQLException */ public List
findAllSplit(String column,String keyWord,Integer currentPage, Integer lineSize) throws Exception; /**使用COUNT()函数统计数据表中符合查询要求的数据量 * @param columun 要模糊查询的数据列 * @param keyWord 要进行查询的关键字 * @return 返回COUNT()的统计结果,如果没有数据满足,则返回内容为0 * @throws Exception 如果数据库没有连接,则出现NullPointerException,如果SQL语句错误抛出SQLException */ public Integer getAllCount(String column,String keyWord) throws Exception;}

如果现在子接口不需要扩充方法,那么就简单继承,并且设置泛型类型,如果要扩充方法,那么直接在子类中定义。

可以将IEmpDAO删掉重新建一个继承IDAO接口的IEmpDAO。

范例:定义IDeptDAO接口(用泛型方式)

 前提:先不处理外键

package xxx.dao;import xxx.vo.Dept;public interface IDeptDAO extends IDAO
{}

 

 3.定义DeptDAOImpl子类

package xxx.dao.impl;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.Set;import xxx.dao.IDeptDAO;import xxx.vo.Dept;public class DeptDAOImpl implements IDeptDAO {    private Connection conn;    private PreparedStatement pstmt;    public DeptDAOImpl(Connection conn) {        this.conn = conn;    }    @Override    public boolean doCreate(Dept vo) throws Exception {        String sql = "INSERT INTO dept(deptno,dname,loc) VALUES(?,?,?)";        this.pstmt = this.conn.prepareStatement(sql);        this.pstmt.setInt(1,vo.getDeptno());        this.pstmt.setString(2, vo.getDname());        this.pstmt.setString(3, vo.getLoc());        return this.pstmt.executeUpdate() > 0;    }    @Override    public boolean doUpdate(Dept vo) throws Exception {        String sql = "UPDATE dept SET dname=?,loc=? WHERE deptno=?";        this.pstmt = this.conn.prepareStatement(sql);        this.pstmt.setString(1, vo.getDname());        this.pstmt.setString(2, vo.getLoc());        this.pstmt.setInt(3,vo.getDeptno());        return this.pstmt.executeUpdate() > 0;    }    @Override    public boolean doRemove(Set
ids) throws Exception { StringBuffer buf = new StringBuffer(); buf.append("DELETE FROM dept WHERE deptno IN("); Iterator
iter = ids.iterator(); while(iter.hasNext()) { buf.append(iter.next()).append(","); } buf.delete(buf.length() - 1, buf.length()).append(")"); this.pstmt = this.conn.prepareStatement(buf.toString()); return this.pstmt.executeUpdate() == ids.size(); } @Override public Dept findById(Integer id) throws Exception { Dept vo = null; String sql = "SELECT deptno,dname,loc FROM dept WHERE deptno = ?"; this.pstmt = this.conn.prepareStatement(sql); this.pstmt.setInt(1, id); ResultSet rs = this.pstmt.executeQuery(); if(rs.next()) { vo = new Dept(); vo.setDeptno(rs.getInt(1)); vo.setName(rs.getString(2)); vo.setLoc(rs.getString(3)); } return vo; } @Override public List
findAll() throws Exception { List
all = new ArrayList
(); String sql = "SELECT deptno,dname,loc FROM dept WHERE deptno = ?"; this.pstmt = this.conn.prepareStatement(sql); ResultSet rs = this.pstmt.executeQuery(); while(rs.next()) { Dept vo = new Dept(); vo.setDeptno(rs.getInt(1)); vo.setName(rs.getString(2)); vo.setLoc(rs.getString(3)); all.add(vo); } return all; } @Override public List
findAllSplit(String column, String keyWord, Integer currentPage, Integer lineSize) throws Exception { // TODO Auto-generated method stub throw new Exception("此方法未实现!"); } @Override public Integer getAllCount(String column, String keyWord) throws Exception { // TODO Auto-generated method stub throw new Exception("此方法未实现!"); }}

 4.在DAOFactory类中追加新的接口对象取得

package xxx.factory;import java.sql.Connection;import xxx.dao.IDeptDAO;import xxx.dao.IEmpDAO;import xxx.dao.impl.DeptDAOImpl;import xxx.dao.impl.EmpDAOImpl;public class DAOFactory {    public static IEmpDAO getIEmpDAOInstance(Connection conn) {        return new EmpDAOImpl(conn);    }    public static IDeptDAO getIDeptDAOInstance(Connection conn) {        return new DeptDAOImpl(conn);    }}

 5.开发业务层操作

业务层一定是分开单独编写的,不能混在一起

package xxx.service;import java.util.List;import java.util.Set;import xxx.vo.Dept;public interface IDeptService {    /**     * 增加操作需要首先利用IDeptDAO.findById()判断,而后利用IDeptDAO.doCreate()保存     * @param vo     * @return     * @throws Exception     */    public boolean inser(Dept vo) throws Exception;    public boolean update(Dept vo) throws Exception;    public boolean delete(Set
ids) throws Exception; public Dept get(Integer id) throws Exception; public List
list() throws Exception;}

6.定义具体的子类

package xxx.service.impl;import java.util.List;import java.util.Set;import xxx.dbc.DatabaseConnection;import xxx.factory.DAOFactory;import xxx.service.IDeptService;import xxx.vo.Dept;public class DeptServiceImpl implements IDeptService {    private DatabaseConnection dbc = new DatabaseConnection();    @Override    public boolean inser(Dept vo) throws Exception {        try {            if(DAOFactory.getIDeptDAOInstance(this.dbc.getConnection()).findById(vo.getDeptno()) == null) {                return DAOFactory.getIDeptDAOInstance(this.dbc.getConnection()).doCreate(vo);            }            return false;        }catch (Exception e) {            throw e;        }finally {            this.dbc.close();        }    }    @Override    public boolean update(Dept vo) throws Exception {        try {            return DAOFactory.getIDeptDAOInstance(this.dbc.getConnection()).doUpdate(vo);        }catch (Exception e) {            throw e;        }finally {            this.dbc.close();        }    }    @Override    public boolean delete(Set
ids) throws Exception { try { if(ids.size() ==0) { return false; } return DAOFactory.getIDeptDAOInstance(this.dbc.getConnection()).doRemove(ids); }catch (Exception e) { throw e; }finally { this.dbc.close(); } } @Override public Dept get(Integer id) throws Exception { try { return DAOFactory.getIDeptDAOInstance(this.dbc.getConnection()).findById(id); }catch (Exception e) { throw e; }finally { this.dbc.close(); } } @Override public List
list() throws Exception { try { return DAOFactory.getIDeptDAOInstance(this.dbc.getConnection()).findAll(); }catch (Exception e) { throw e; }finally { this.dbc.close(); } }}

7.定义业务层工厂类

package xxx.factory;import xxx.service.IDeptService;import xxx.service.IEmpService;import xxx.service.impl.DeptServiceImpl;import xxx.service.impl.EmpSericeImpl;public class ServiceFactory {    public static IEmpService getIEmpServiceInstance() {        return new EmpSericeImpl();    }    public static IDeptService getIDeptServiceInstance() {        return new DeptServiceImpl();    }}

8. junit测试

package xxx.test.junit;import static org.junit.jupiter.api.Assertions.*;import javax.swing.DebugGraphics;import org.junit.jupiter.api.Test;import junit.framework.TestCase;import xxx.factory.ServiceFactory;import xxx.vo.Dept;class IDeptServiceTest {    @Test    void testInser() {        Dept vo = new Dept();        vo.setDeptno(90);        vo.setName("ciel");        vo.setLoc("happy");        try{            TestCase.assertTrue(ServiceFactory.getIDeptServiceInstance().inser(vo));        }catch (Exception e) {            e.printStackTrace();        }    }    @Test    void testUpdate() {        fail("Not yet implemented");    }    @Test    void testDelete() {        fail("Not yet implemented");    }    @Test    void testGet() {        fail("Not yet implemented");    }    @Test    void testList() {        fail("Not yet implemented");    }}

 

转载于:https://www.cnblogs.com/lonske/p/8921091.html

你可能感兴趣的文章
MySQL后台线程的清理工作
查看>>
连接mysql数据库,创建用户模型
查看>>
cogs1885 [WC2006]水管局长数据加强版
查看>>
paramiko模块
查看>>
[原创]茗洋AaronYang的 jquery.myselect.js 我的一次前端突破[上]
查看>>
1083 是否存在相等的差
查看>>
配置APP的图标
查看>>
【线段树区间最值单点更新模板】BNUOJ 52965 E Excellent Engineers
查看>>
String、StringBuffer与StringBuilder之间区别
查看>>
Timer.3 - Binding arguments to a handler
查看>>
linux 判断变量是否相等方法
查看>>
只能为浮点数的正则表达式
查看>>
Android之指南针学习 分类: Android开发 ...
查看>>
android学习和广告平台赚钱zz 分类: Android其他 ...
查看>>
第7章例7-13
查看>>
推荐几本产品类的书
查看>>
Redis总结(四)Redis 的持久化(转载)
查看>>
java中比较字符串方法
查看>>
CSS3选择器:nth-child和:nth-of-type之间的差异
查看>>
单循环链表的表示和实现
查看>>