当前位置: 首页 > web >正文

【项目实践】SMBMS(Javaweb版)(五)供应商管理模块

文章目录

  • 供应商管理
    • 前期准备
    • 增加供应商
      • PrivodeDao
      • ProviderService
      • ProviderServlet
    • 删除供应商
      • ProviderDao
      • ProviderService
      • ProviderServlet
    • 更改供应商信息
      • ProviderDao
      • ProviderService
      • ProviderServlet
    • 查询供应商信息
      • ProviderDao
      • ProviderService
      • ProviderServlet

供应商管理

前期准备

  1. 创建供应商 provider 的servlet
  2. 注册 provider 的servlet
  3. 创建相关的Dao,Service,javaBean等
  4. 导入相关的jsp

增加供应商

addProvider

PrivodeDao

  1. PrivodeDao
    int addProvider(Provider provider);
  1. PrivodeDaoImpl
    /*** 向数据库中添加供应商信息** @param connection 数据库连接对象,用于执行SQL语句* @param provider   供应商对象,包含要添加的供应商的信息* @return 返回添加的行数,用于确认是否成功添加供应商* @throws Exception 如果在添加过程中发生错误,则抛出异常*/@Overridepublic int addProvider(Connection connection, Provider provider) throws Exception {// 初始化添加行数为0int addRows = 0;// 预编译的SQL语句对象PreparedStatement preparedStatement;// 检查数据库连接是否为空if (connection != null) {// 准备插入供应商信息的SQL语句String sql = "insert into smbms_provider (" +"proCode, " +"proName, " +"proDesc, " +"proContact, " +"proPhone, " +"proAddress, " +"proFax, " +"createBy, " +"createDate) " +" values(?,?,?,?,?,?,?,?,?)";// 初始化参数数组,用于存放SQL语句中的参数值Object[] params = new Object[9];// 设置SQL语句中的参数值params[0] = provider.getProCode();params[1] = provider.getProName();params[2] = provider.getProDesc();params[3] = provider.getProContact();params[4] = provider.getProPhone();params[5] = provider.getProAddress();params[6] = provider.getProFax();params[7] = provider.getCreateBy();params[8] = provider.getCreateDate();// 准备SQL语句执行对象preparedStatement = connection.prepareStatement(sql);// 执行插入操作,并返回添加的行数addRows = BaseDao.executeUpdate(connection, sql, preparedStatement, params);}// 返回添加的行数return addRows;}

ProviderService

  1. ProviderService
boolean addProvider(Provider provider) throws SQLException, Exception;
  1. ProviderServiceImpl
    /*** 添加一个新的供应商到系统中。* <p>* 此方法用于将提供的供应商对象添加到数据库中。它涉及数据库操作和事务管理,* 根据操作的成功或失败提交或回滚事务。** @param provider 要添加的供应商对象,包含供应商的相关信息。* @return 返回一个布尔值,指示添加操作是否成功。true 表示成功,false 表示失败。* @throws SQLException 如果发生数据库访问错误,该方法将抛出一个 SQLException。*/@Overridepublic boolean addProvider(Provider provider) throws SQLException {// 初始化数据库连接对象和方法返回值Connection conn = null;boolean flag = false;try {// 获取数据库连接并准备事务conn = BaseDao.connection();conn.setAutoCommit(false);// 调用数据访问对象方法添加供应商,并尝试提交事务int addRows = providerDao.addProvider(conn, provider);conn.commit();// 根据受影响的行数判断添加是否成功if (addRows > 0) {flag = true;}} catch (SQLException e) {// 遇到 SQLException 时回滚事务conn.rollback();} catch (Exception e) {// 对于其他异常,转换为 RuntimeException 并重新抛出throw new RuntimeException(e);} finally {// 在 finally 块中关闭数据库资源以确保执行BaseDao.closeResource(conn, null, null);}// 返回添加供应商的结果return flag;}

ProviderServlet

   /*** 处理HTTP Post请求的方法* 根据请求参数中的method字段值,决定执行相应的操作** @param req  HttpServletRequest对象,用于获取请求参数* @param resp HttpServletResponse对象,用于向客户端发送数据* @throws ServletException 如果Servlet操作失败* @throws IOException      如果发生输入输出异常*/@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取请求参数中的method值,如果为空则默认为空字符串String method = req.getParameter("method") == null ? "" : req.getParameter("method");// 根据method值调用对应的方法执行操作switch (method) {case "add":addProvider(req, resp);break;}}/*** 添加供应商信息* <p>* 此方法从HTTP请求中提取供应商信息,并将其添加到数据库中* 如果添加成功,将用户重定向到供应商查询页面;如果添加失败,则重定向回添加供应商页面,并显示错误信息** @param req  HTTP请求对象,用于获取请求参数和会话信息* @param resp HTTP响应对象,用于重定向用户* @throws ServletException 如果Servlet操作失败* @throws IOException      如果输入/输出操作失败*/private void addProvider(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取当前登录用户信息User user = (User) req.getSession().getAttribute(Constants.USER_SESSION);// 创建一个新的供应商对象,并从请求中设置其属性Provider provider = new Provider();provider.setProCode(req.getParameter("proCode"));provider.setProName(req.getParameter("proName"));provider.setProDesc(req.getParameter("proDesc"));provider.setProContact(req.getParameter("proContact"));provider.setProPhone(req.getParameter("proPhone"));provider.setProAddress(req.getParameter("proAddress"));provider.setProFax(req.getParameter("proFax"));// 设置创建者和修改者为当前用户provider.setCreateBy(user.getId());provider.setModifyBy(user.getId());// 设置创建和修改日期为当前日期provider.setCreateDate(new Date());provider.setModifyDate(new Date());// 尝试将供应商信息添加到数据库中try {if (providerService.addProvider(provider)) {// 如果添加成功,设置成功消息并重定向到供应商查询页面req.getSession().setAttribute("message", "添加成功!");resp.sendRedirect(req.getContextPath() + "/provider?method=query");} else {// 如果添加失败,设置错误消息并重定向回添加供应商页面req.getSession().setAttribute("message", "添加失败!");resp.sendRedirect(req.getContextPath() + "/jsp/provideradd.jsp");}} catch (Exception e) {// 如果发生异常,抛出运行时异常throw new RuntimeException(e);}// 无论上述操作结果如何,最终将用户重定向回添加供应商页面
//        req.getRequestDispatcher("/jsp/provideradd.jsp").forward(req, resp);}

删除供应商

deleteProvider

ProviderDao

  1. ProviderDao
int deleteProvider(Connection connection, int id) throws SQLException;
  1. ProviderDaoImpl
/*** 根据给定的ID删除供应商信息** @param connection 数据库连接对象,用于执行SQL语句* @param id         需要删除的供应商的ID* @return 返回删除的行数,表示删除成功的记录数* @throws SQLException 如果执行SQL语句时发生错误*/@Overridepublic int deleteProvider(Connection connection, int id) throws SQLException {int deleteRows = 0;PreparedStatement preparedStatement;if (connection != null) {// 定义删除供应商的SQL语句String sql = "delete from smbms_provider where id=?";// 准备SQL语句preparedStatement = connection.prepareStatement(sql);// 设置SQL语句中的参数preparedStatement.setInt(1, id);// 执行更新操作deleteRows = preparedStatement.executeUpdate();// 关闭资源BaseDao.closeResource(connection, preparedStatement, null);}// 返回删除的行数return deleteRows;}

ProviderService

  1. ProviderService
void deleteProvider(int id);
  1. ProviderServiceImpl
/*** 根据供应商ID删除供应商信息* * @param id 供应商的ID,用于标识要删除的供应商* @return 返回删除的行数,用于确认是否成功删除供应商信息*/
@Override
public int deleteProvider(int id) {// 初始化删除行数为0int deleteRows = 0;// 声明数据库连接对象Connection conn = null;try {// 获取数据库连接conn = BaseDao.connection();// 调用供应商数据访问对象的删除方法,执行删除操作deleteRows = providerDao.deleteProvider(conn, id);} catch (SQLException e) {// 如果捕获到SQL异常,抛出运行时异常throw new RuntimeException(e);} finally {// 关闭数据库资源,确保数据库连接被释放BaseDao.closeResource(conn, null, null);}// 返回删除的行数return deleteRows;
}

ProviderServlet

   /*** 处理HTTP Post请求的方法* 根据请求参数中的method字段值,决定执行相应的操作** @param req  HttpServletRequest对象,用于获取请求参数* @param resp HttpServletResponse对象,用于向客户端发送数据* @throws ServletException 如果Servlet操作失败* @throws IOException      如果发生输入输出异常*/@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取请求参数中的method值,如果为空则默认为空字符串String method = req.getParameter("method") == null ? "" : req.getParameter("method");// 根据method值调用对应的方法执行操作switch (method) {case "add":addProvider(req, resp);break;case "deleteProvider":deleteProvider(req, resp);break;}}

更改供应商信息

modifyProvider

ProviderDao

  1. ProviderDao
int updateProvider(Connection connection, Provider provider) throws SQLException;
  1. ProviderDaoImpl
    /*** 更新供应商信息** @param connection 数据库连接对象,用于执行SQL语句* @param provider   待更新的供应商对象,包含新的供应商信息* @return 返回更新影响的行数,用于判断更新操作是否成功* @throws SQLException 如果执行SQL语句时发生错误*/@Overridepublic int updateProvider(Connection connection, Provider provider) throws SQLException {int upRows = 0;PreparedStatement preparedStatement;// 检查数据库连接是否非空,确保可以安全地执行SQL语句if (connection != null) {// 准备更新供应商信息的SQL语句String sql = "update smbms_provider set " +"proCode=?, " +"proName=?, " +"proDesc=?, " +"proContact=?, " +"proPhone=?, " +"proAddress=?, " +"proFax=?, " +"modifyBy=?, " +"modifyDate=? " +"where id=?";// 初始化参数数组,用于存储供应商信息Object[] params = new Object[9];params[0] = provider.getProCode();params[1] = provider.getProName();params[2] = provider.getProDesc();params[3] = provider.getProContact();params[4] = provider.getProPhone();params[5] = provider.getProAddress();params[6] = provider.getProFax();params[7] = provider.getModifyBy();params[8] = provider.getModifyDate();// 准备SQL语句执行对象preparedStatement = connection.prepareStatement(sql);// 执行更新操作并获取影响的行数upRows = BaseDao.executeUpdate(connection, sql, preparedStatement, params);// 关闭资源,避免内存泄漏BaseDao.closeResource(connection, preparedStatement, null);}// 返回更新影响的行数return upRows;}

ProviderService

  1. ProviderService
int updateProvider(Provider provider) throws SQLException;
  1. ProviderServiceImpl
    /*** 更新供应商信息* <p>* 此方法用于更新数据库中供应商的信息它接收一个Provider对象作为参数,* 该对象包含了需要更新的供应商的新信息方法通过调用providerDao的updateProvider* 方法来执行数据库更新操作如果更新过程中遇到异常,会进行回滚操作以确保数据一致性** @param provider 包含了需要更新的供应商信息的Provider对象* @return 返回更新影响的行数,用于判断更新操作是否成功* @throws SQLException 如果数据库操作失败,抛出此异常*/@Overridepublic int updateProvider(Provider provider) throws SQLException {int upRows = 0;Connection conn = null;try {// 获取数据库连接conn = BaseDao.connection();// 执行更新操作upRows = providerDao.updateProvider(conn, provider);} catch (SQLException e) {// 更新失败时,进行事务回滚conn.rollback();} finally {// 关闭数据库资源BaseDao.closeResource(conn, null, null);}return upRows;}

ProviderServlet

   /*** 处理HTTP Post请求的方法* 根据请求参数中的method字段值,决定执行相应的操作** @param req  HttpServletRequest对象,用于获取请求参数* @param resp HttpServletResponse对象,用于向客户端发送数据* @throws ServletException 如果Servlet操作失败* @throws IOException      如果发生输入输出异常*/@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取请求参数中的method值,如果为空则默认为空字符串String method = req.getParameter("method") == null ? "" : req.getParameter("method");// 根据method值调用对应的方法执行操作switch (method) {case "modify":modifyProvider(req, resp);break;}}/*** 更新一条记录** @param req  用于获取请求信息和会话对象* @param resp 用于向客户端发送响应*/private void modifyProvider(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取当前登录用户信息User user = (User) req.getSession().getAttribute(Constants.USER_SESSION);// 创建Provider对象,并从请求中获取参数来设置对象属性Provider provider = new Provider();provider.setId(Integer.parseInt(req.getParameter("id")));provider.setProName(req.getParameter("proName"));provider.setProCode(req.getParameter("proCode"));provider.setProDesc(req.getParameter("proDesc"));provider.setProContact(req.getParameter("proContact"));provider.setProPhone(req.getParameter("proPhone"));provider.setProAddress(req.getParameter("proAddress"));provider.setProFax(req.getParameter("proFax"));// 设置修改者为当前登录用户provider.setModifyBy(user.getId());// 设置修改时间为当前时间provider.setModifyDate(new Date());try {// 尝试更新数据库中的Provider记录if (providerService.updateProvider(provider) > 0) {// 如果更新成功,设置会话消息req.getSession().setAttribute("message", "数据更新成功!");} else {// 如果更新失败,设置会话消息req.getSession().setAttribute("message", "数据更新失败!");}} catch (SQLException e) {// 如果捕获到SQLException,则抛出运行时异常throw new RuntimeException(e);}// 跳转到列表页面req.getRequestDispatcher("/provider?method=view").forward(req, resp);}

查询供应商信息

需要两个方法

  1. getProviderCounts、
  2. getProviderList

ProviderDao

  1. ProviderDao
   public List<Provider> getProviderList(Connection connection, String proName, String proCode) throws Exception;
  1. ProviderDaoImpl
    /*** 根据供应商名称和编码获取供应商列表** @param connection 数据库连接对象,用于执行数据库操作* @param proName    供应商名称,用于筛选供应商列表* @param proCode    供应商编码,用于筛选供应商列表* @return 返回一个包含符合条件的供应商对象的列表* @throws Exception 如果数据库操作失败,抛出异常*/@Overridepublic List<Provider> getProviderList(Connection connection, String proName, String proCode) throws Exception {List<Provider> providers = new ArrayList<Provider>();Provider provider = new Provider();PreparedStatement preparedStatement;ResultSet resultSet = null;String sql = "select * from smbms_provider ";// 初始化参数列表,用于存储查询条件参数List<Object> list = new ArrayList<Object>();if (connection != null) {// 构建SQL查询语句sql += "where 1=1";// 如果供应商名称不为空,添加供应商名称模糊查询条件if (!proName.isEmpty()) {sql += "and proName like ? ";list.add("%" + proName + "%");}// 如果供应商编码不为空,添加供应商编码模糊查询条件if (!proCode.isEmpty()) {sql += "and proCode = ? ";list.add( proCode );}// 准备SQL语句执行对象preparedStatement = connection.prepareStatement(sql);// 执行查询并获取结果集resultSet = BaseDao.executeQuery(connection, sql, preparedStatement, list.toArray(),resultSet);// 遍历结果集,将每条记录转换为供应商对象,并添加到列表中while (resultSet.next()) {providers.add(getProviderByResult(resultSet));}// 关闭数据库资源BaseDao.closeResource(connection, preparedStatement, resultSet);}// 返回供应商列表return providers;}

ProviderService

  1. ProviderService
    List<Provider> getProviderList(String proName, String proCode);
  1. ProviderServiceImpl
    /*** 根据供应商名称和编码获取供应商列表** @param proName 供应商名称,用于模糊查询* @param proCode 供应商编码,用于精确查询* @return 返回一个包含查询结果的供应商列表如果查询结果为空,则返回一个空列表*/@Overridepublic List<Provider> getProviderList(String proName, String proCode) {// 初始化供应商列表List<Provider> providers = new ArrayList<>();// 获取数据库连接Connection conn = BaseDao.connection();try {// 调用Dao层方法,根据供应商名称和编码查询供应商列表providers = providerDao.getProviderList(conn, proName, proCode);} catch (Exception e) {// 异常处理:打印异常信息e.printStackTrace();} finally {// 关闭数据库连接BaseDao.closeConnection(conn);}// 返回查询到的供应商列表return providers;}

ProviderServlet

   /*** 处理HTTP Post请求的方法* 根据请求参数中的method字段值,决定执行相应的操作** @param req  HttpServletRequest对象,用于获取请求参数* @param resp HttpServletResponse对象,用于向客户端发送数据* @throws ServletException 如果Servlet操作失败* @throws IOException      如果发生输入输出异常*/@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取请求参数中的method值,如果为空则默认为空字符串String method = req.getParameter("method") == null ? "" : req.getParameter("method");// 根据method值调用对应的方法执行操作switch (method) {case "modify":modifyProvider(req, resp);break;}}/*** 获取多条记录** @param req  用于从HTTP请求中获取参数和设置属性* @param resp 用于发送HTTP响应*/private void getProviderList(HttpServletRequest req, HttpServletResponse resp) {// 从请求中获取查询参数String queryProCode = req.getParameter("queryProCode");String queryProName = req.getParameter("queryProName");// 对查询参数进行空值检查并赋予默认值queryProCode = queryProCode == null ? "" : queryProCode;queryProName = queryProName == null ? "" : queryProName;// 调用服务层方法获取供应商列表List<Provider> providerList = providerService.getProviderList(queryProCode, queryProName);try {if (providerList != null) {// 如果列表不为空,设置请求属性并转发到供应商列表页面req.setAttribute("providerList", providerList);req.getRequestDispatcher("/providerlist.jsp");} else {// 如果列表为空,重定向到供应商查询页面resp.sendRedirect(req.getContextPath() + "/provider?method=query");}} catch (Exception e) {// 异常处理: 打印异常信息e.printStackTrace();}}
http://www.xdnf.cn/news/13659.html

相关文章:

  • 时间同步技术在电力系统中的应用二
  • 现代建筑中空气流向管理系统SKGL的智能化趋势
  • 稳定币的监管
  • Agent应用案例精选,以及主流Agent框架开源项目推荐
  • 软件测试面试题总结【含答案】
  • 3.3.2 纠错编码(海明校验码)
  • web项目实现PWA和Browsersync的安装及使用方法
  • 锂电池3V\3.3V\3.7V升5V升压芯片,选型指南
  • 欧洲AI的崛起:Mistral推出首款逻辑推理模型Magistral,挑战美中AI霸主地位
  • UE5 学习系列(七)导入bridge资产包
  • 雷卯针对易百纳EB-SS528-DC-175开发板防雷防静电方案
  • 龙虎榜——20250611
  • 内核性能调优
  • 什么是分布式锁,及其实现
  • 洛谷 P2757 [国家集训队] 等差子序列
  • Spring | 深入解析 Spring AOP 中的AopProxyUtils.ultimateTargetClass()解决代理对象注解获取问题
  • Zero-Shot突变预测VenusREM的安装和使用
  • Office 365下载安装教程(超详细图文教程)从零开始的完整安装指南
  • python中的字符串、输入与输出、列表
  • 【更新至2024年】1992-2024年全国及各省地区生产总值、第一产业增加值、第二产业增加值、第三产业增加值、省GDP数据(无缺失)
  • MySQL:Prepared Statement 预处理语句
  • 表格里的图片链接怎么变成图片【附工具+源码演示】
  • 鴻蒙app開發中如何 使用 shift+ctrl+f 快捷搜索
  • 旋翼无人机运行要点与技术分析!
  • Python机器学习模型中添加日志记录器
  • ubuntu install vncserver
  • (46)课68:查看索引 SHOW INDEX FROM 表名;删除索引 DROP INDEX index_name ON 表名;
  • VOSK 离线中文语音识别实战:精准转文字、格式避坑全解析
  • 6.11 note
  • sessionStorage.setItem