项目实战:service业务逻辑组件引入

1、第一层DAO层

1.1、FruitDao接口

package com.csdn.fruit.dao;
import com.csdn.fruit.pojo.Fruit;
import java.util.List;
//dao :Data Access Object 数据访问对象
//接口设计
public interface FruitDao {void addFruit(Fruit fruit);void delFruit(String fname);//通过 fid 删除 水果库存记录void delFruitByFid(Integer fid);void updateFruit(Fruit fruit);@DeprecatedList<Fruit> getFruitList();@DeprecatedList<Fruit> getFruitList(Integer pageNo, Integer pageSize);List<Fruit> getFruitList(Integer pageNo, Integer pageSize,String keyword);Fruit getFruitByFname(String fname);Fruit getFruitByFid(Integer fid);//查询总记录条数@DeprecatedInteger getRecordCount();Integer getRecordCount(String keyword);
}

1.2、FruitDaoImpl实现类

package com.csdn.fruit.dao.impl;
import com.csdn.fruit.dao.FruitDao;
import com.csdn.fruit.pojo.Fruit;
import com.csdn.mymvc.dao.BaseDao;
import java.util.List;
public class FruitDaoImpl extends BaseDao<Fruit> implements FruitDao {@Overridepublic void addFruit(Fruit fruit) {String sql = "insert into t_fruit values (0,?,?,?,?)";super.executeUpdate(sql, fruit.getFname(), fruit.getPrice(), fruit.getFcount(), fruit.getRemark());}@Overridepublic void delFruit(String fname) {String sql = "delete from t_fruit where fname=?";super.executeUpdate(sql, fname);}//通过 fid 删除水果库存记录@Overridepublic void delFruitByFid(Integer fid) {super.executeUpdate("delete from t_fruit where fid = ? ", fid);}//通过 fid 可以修改所有的属性值@Overridepublic void updateFruit(Fruit fruit) {String sql = "update  t_fruit set fname=?,price=?,fcount=?,remark=? where fid = ?";super.executeUpdate(sql, fruit.getFname(), fruit.getPrice(), fruit.getFcount(), fruit.getRemark(), fruit.getFid());}@Overridepublic List<Fruit> getFruitList() {return super.executeQuery("select * from t_fruit");}@Overridepublic List<Fruit> getFruitList(Integer pageNo, Integer pageSize) {return super.executeQuery("select * from t_fruit limit ?,?", (pageNo - 1) * pageSize, pageSize);}@Overridepublic List<Fruit> getFruitList(Integer pageNo, Integer pageSize, String keyword) {return super.executeQuery("select * from t_fruit where fname like ? or remark like?  limit ?,?", "%" + keyword + "%", "%" + keyword + "%", (pageNo - 1) * pageSize, pageSize);}@Overridepublic Fruit getFruitByFname(String fname) {return load("select * from t_fruit where fname = ?", fname);}@Overridepublic Fruit getFruitByFid(Integer fid) {return load("select * from t_fruit where fid=?", fid);}@Overridepublic Integer getRecordCount() {String sql = "select count(*) from t_fruit";return ((Long) executeComplexQuery(sql).get(0)[0]).intValue();}@Overridepublic Integer getRecordCount(String keyword) {String sql = "select count(*) from t_fruit where fname like ? or remark like ? ";return ((Long) executeComplexQuery(sql, "%" + keyword + "%", "%" + keyword + "%").get(0)[0]).intValue();}
}

2、第二层Service层

 2.1、FruitService接口

package com.csdn.fruit.service;
import com.csdn.fruit.dto.PageInfo;
import com.csdn.fruit.dto.PageQueryParam;
import com.csdn.fruit.pojo.Fruit;
public interface FruitService {PageInfo<Fruit> getFruitPageInfo(PageQueryParam pageQueryParam);void addFruit(Fruit fruit);void updateFruit(Fruit fruit);void delFruit(Integer fid);Fruit getFruitById(Integer fid);Fruit getFruitByFname(String fname);
}

2.2、FruitServiceImpl实现类

package com.csdn.fruit.service.impl;
import com.csdn.fruit.dao.FruitDao;
import com.csdn.fruit.dao.impl.FruitDaoImpl;
import com.csdn.fruit.dto.PageInfo;
import com.csdn.fruit.dto.PageQueryParam;
import com.csdn.fruit.pojo.Fruit;
import com.csdn.fruit.service.FruitService;
import java.util.List;
public class FruitServiceImpl implements FruitService {private FruitDao fruitDao = new FruitDaoImpl();@Overridepublic PageInfo<Fruit> getFruitPageInfo(PageQueryParam pageQueryParam) {Integer pageNo = pageQueryParam.getPageNo();Integer pageSize = pageQueryParam.getPageSize();String keyword = pageQueryParam.getKeyword();List<Fruit> fruitList = fruitDao.getFruitList(pageNo, pageSize, keyword);Integer recordCount = fruitDao.getRecordCount(pageQueryParam.getKeyword());PageInfo<Fruit> fruitPageInfo = new PageInfo<>(fruitList, pageNo, recordCount);return fruitPageInfo;}@Overridepublic void addFruit(Fruit fruit) {if (fruitDao.getFruitByFname(fruit.getFname()) == null) {fruitDao.addFruit(fruit);}}@Overridepublic void updateFruit(Fruit fruit) {fruitDao.updateFruit(fruit);}@Overridepublic void delFruit(Integer fid) {fruitDao.delFruitByFid(fid);}@Overridepublic Fruit getFruitById(Integer fid) {return fruitDao.getFruitByFid(fid);}@Overridepublic Fruit getFruitByFname(String fname) {return fruitDao.getFruitByFname(fname);}
}

3、Servlet层

3.1、IndexServlet

package com.csdn.fruit.servlet;
import com.csdn.fruit.dto.PageInfo;
import com.csdn.fruit.dto.PageQueryParam;
import com.csdn.fruit.dto.Result;
import com.csdn.fruit.pojo.Fruit;
import com.csdn.fruit.service.FruitService;
import com.csdn.fruit.service.impl.FruitServiceImpl;
import com.csdn.fruit.util.ResponseUtil;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/index")
public class IndexServlet extends HttpServlet {private FruitService fruitService = new FruitServiceImpl();@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Integer pageNo = 1;String pageNoStr = req.getParameter("pageNo");if (pageNoStr != null && !"".equals(pageNoStr)) {pageNo = Integer.parseInt(pageNoStr);}String keyword = "";String keywordStr = req.getParameter("keyword");if (keywordStr!=null) {keyword = keywordStr;}PageQueryParam pageQueryParam = new PageQueryParam(pageNo, 5, keyword);PageInfo<Fruit> pageInfo = fruitService.getFruitPageInfo(pageQueryParam);Result result = Result.OK(pageInfo);ResponseUtil.print(resp, result);}
}

 

3.2、EditServlet 

package com.csdn.fruit.servlet;
import com.csdn.fruit.dto.Result;
import com.csdn.fruit.pojo.Fruit;
import com.csdn.fruit.service.FruitService;
import com.csdn.fruit.service.impl.FruitServiceImpl;
import com.csdn.fruit.util.ResponseUtil;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/edit")
public class EditServlet extends HttpServlet {private FruitService fruitService = new FruitServiceImpl();@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Integer fid = Integer.parseInt(req.getParameter("fid"));Fruit fruit = fruitService.getFruitById(fid);ResponseUtil.print(resp, Result.OK(fruit));}
}

 

3.3、GetFnameServlet

package com.csdn.fruit.servlet;
import com.csdn.fruit.dto.Result;
import com.csdn.fruit.pojo.Fruit;
import com.csdn.fruit.service.FruitService;
import com.csdn.fruit.service.impl.FruitServiceImpl;
import com.csdn.fruit.util.ResponseUtil;
import jakarta.servlet.GenericServlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/getFname")
public class GetFnameServlet extends GenericServlet {private FruitService fruitService = new FruitServiceImpl();@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {String fname = servletRequest.getParameter("fname");Fruit fruit = fruitService.getFruitByFname(fname);ResponseUtil.print(servletResponse, fruit == null ? Result.OK() : Result.Fail());}
}

3.4、UpdateServlet

package com.csdn.fruit.servlet;
import com.csdn.fruit.dto.Result;
import com.csdn.fruit.pojo.Fruit;
import com.csdn.fruit.service.FruitService;
import com.csdn.fruit.service.impl.FruitServiceImpl;
import com.csdn.fruit.util.RequestUtil;
import com.csdn.fruit.util.ResponseUtil;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/update")
public class UpdateServlet extends HttpServlet {private FruitService fruitService = new FruitServiceImpl();@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Fruit fruit = (Fruit) RequestUtil.readObject(req, Fruit.class);fruitService.updateFruit(fruit);ResponseUtil.print(resp, Result.OK());}
}

3.5、DelServlet

package com.csdn.fruit.servlet;
import com.csdn.fruit.dto.Result;
import com.csdn.fruit.service.FruitService;
import com.csdn.fruit.service.impl.FruitServiceImpl;
import com.csdn.fruit.util.ResponseUtil;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/del")
public class DelServlet extends HttpServlet {private FruitService fruitService = new FruitServiceImpl();@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Integer fid = Integer.parseInt(req.getParameter("fid"));fruitService.delFruit(fid);ResponseUtil.print(resp, Result.OK());}
}

3.6、AddServlet

package com.csdn.fruit.servlet;
import com.csdn.fruit.dto.Result;
import com.csdn.fruit.pojo.Fruit;
import com.csdn.fruit.service.FruitService;
import com.csdn.fruit.service.impl.FruitServiceImpl;
import com.csdn.fruit.util.RequestUtil;
import com.csdn.fruit.util.ResponseUtil;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/add")
public class AddServlet extends HttpServlet {private FruitService fruitService = new FruitServiceImpl();@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Fruit fruit = (Fruit) RequestUtil.readObject(req, Fruit.class);fruitService.addFruit(fruit);ResponseUtil.print(resp, Result.OK());}
}

4、DTO层

4.1、Result

package com.csdn.fruit.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result {private boolean flag;private Object data;private String msg;public Result(boolean flag, Object data) {this.flag = flag;this.data = data;}public Result(boolean flag, String msg) {this.flag = flag;this.msg = msg;}public static Result OK() {return new Result(true, "操作成功");}public static Result OK(Object data) {return new Result(true, data);}public static Result Fail() {return new Result(false, "操作失败");}public static Result Fail(String msg) {return new Result(false, msg);}
}

4.2、PageInfo

package com.csdn.fruit.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
//分页组件类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageInfo<T> {private List<T> list;private Integer pageNo = 1;private Integer pageSize = 5;private Integer recordCount = 0;private Integer pageCount = 0;public PageInfo(List<T> list, Integer pageNo, Integer recordCount) {this.list = list;this.pageNo = pageNo;this.recordCount = recordCount;this.pageCount = (recordCount + pageSize - 1) / pageSize;}
}

4.3、PageQueryParam

package com.csdn.fruit.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageQueryParam {private Integer pageNo = 1;private Integer pageSize = 5;private String keyword = "";
}

5、Util层

5.1、RequestUtil

package com.csdn.fruit.util;
import jakarta.servlet.ServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
public class RequestUtil {public static Object readObject(ServletRequest request, Class clazz) throws IOException {BufferedReader br = request.getReader();StringBuilder stringBuilder = new StringBuilder();String str = null;while ((str = br.readLine()) != null) {stringBuilder.append(str);}str = stringBuilder.toString();return GsonUtil.fromJson(str, clazz);}
}

5.2、GsonUtil

package com.csdn.fruit.util;
import com.google.gson.Gson;
public class GsonUtil {public static String toJson(Object obj) {//java object ->  json stringGson gson = new Gson();return gson.toJson(obj);}//public static <T> T fromJson(String jsonStr, Class<T> clazz) {}public static Object fromJson(String jsonStr, Class clazz) {// json string -> java objectGson gson = new Gson();return gson.fromJson(jsonStr, clazz);}
}

5.3、ResponseUtil

package com.csdn.fruit.util;
import com.csdn.fruit.dto.Result;
import jakarta.servlet.ServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class ResponseUtil {public static void print(ServletResponse response, Result result) throws IOException {response.setCharacterEncoding("UTF-8");response.setContentType("application/json;charset=utf-8");PrintWriter out = response.getWriter();out.println(GsonUtil.toJson(result));out.flush();}
}

6、Service层的文字解读

Java中的service层一般是作为业务逻辑处理的中间层,负责接收控制层的请求,进行业务逻辑的处理,并将处理结果返回给控制层。

具体来说,service层通常包括以下作用:

  1. 转发控制层请求:service层一般是与控制层紧密联系的,负责接收控制层的请求,通过调用DAO层提供的接口获取数据,进行业务逻辑的处理,并将处理结果返回给控制层。

  2. 处理业务逻辑:service层主要负责对业务逻辑进行处理,将底层的数据操作进行组合和加工,从而形成业务流程,实现对复杂业务操作的封装,方便控制层调用。

  3. 事务处理:service层通常是一个事务的边界,负责管理一系列操作的一致性和完整性,确保业务操作的正确性。

  4. 异常处理:service层也负责处理操作过程中的异常,确保业务操作的可靠性和稳定性,通过对异常的处理,提高系统的容错能力。

综上,service层在Java应用程序中扮演着重要的角色,起到了整合、控制和管理业务逻辑的作用,是一个高层次的、中间的业务处理层。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/161129.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s之service五种负载均衡byte的区别

1&#xff0c;什么是Service&#xff1f; 1.1 Service的概念​ 在k8s中&#xff0c;service 是一个固定接入层&#xff0c;客户端可以通过访问 service 的 ip 和端口访问到 service 关联的后端pod&#xff0c;这个 service 工作依赖于在 kubernetes 集群之上部署的一个附件&a…

跨境电商年底风控升级,测评养号如何选择稳定且纯净的IP环境?

随着年底跨境电商平台风控的升级&#xff0c;许多测评团队的账号存活率有所下降。对于自养号测评的卖家来说&#xff0c;IP的重要性不言而喻。除了设置参数阻断&#xff0c;IP的质量也直接影响到账户的稳定性和成功率。因此&#xff0c;在年底这个特殊时期&#xff0c;所有测评…

C++入门学习(1)命名空间和输入输出

前言 在C语言和基本的数据结构学习之后&#xff0c;我们终于迎来了期待已久的C啦&#xff01;C发明出来的意义就是填补一些C语言的不足&#xff0c;让我们更加方便的写代码&#xff0c;所以今天我们就来讲一下C语言不足的地方和在C中的解决办法&#xff01; 一、命名空间 在学习…

如何避免 JavaScript 中的内存泄漏?

一、什么是内存泄漏&#xff1f; JavaScript 就是所谓的垃圾回收语言之一&#xff0c;垃圾回收语言通过定期检查哪些先前分配的内存仍然可以从应用程序的其他部分“访问”来帮助开发人员管理内存。垃圾回收语言中泄漏的主要原因是不需要的引用。如果你的 JavaScript 应用程序经…

Linux应用开发基础知识——交叉编译与gcc编译(一)

前言&#xff1a; 源文件需要经过编译才能生成可执行文件。在 Windows 下进行开发时&#xff0c;只需 要点几个按钮即可编译&#xff0c;集成开发环境(比如 Visual studio)已经将各种编译 工具的使用封装好了。Linux 下也有很优秀的集成开发工具&#xff0c;但是更多的时候是 直…

基于野马算法的无人机航迹规划-附代码

基于野马算法的无人机航迹规划 文章目录 基于野马算法的无人机航迹规划1.野马搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用野马算法来优化无人机航迹规划。 1.野马搜索算法 …

章鱼网络进展月报 | 2023.10.1-10.31

章鱼网络大事摘要 1、Louis 成功竞选 NDC 的 HoM 议席&#xff0c;将会尽最大努力推动 NEAR 变革。2、章鱼网络受邀参加在土耳其主办的 Cosmoverse2023&#xff0c;分享 Adaptive IBC 的技术架构。3、2023年10月8日章鱼日&#xff0c;是章鱼网络主网上线2周年的纪念日。 …

运维知识点-MySQL从小白到入土

MySQL从小白到入土 mysql 服务器安装windows mysql 服务漏洞复现-mysql jdbc反序列化-权限绕过 mysql 服务器安装 https://dev.mysql.com/downloads/mysql/https://www.cnblogs.com/xiaostudy/p/12262804.html 点餐小程序腾讯云服务器安装mysql8 windows mysql 服务 net sta…

2023年【高压电工】报名考试及高压电工最新解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 高压电工报名考试考前必练&#xff01;安全生产模拟考试一点通每个月更新高压电工最新解析题目及答案&#xff01;多做几遍&#xff0c;其实通过高压电工作业考试题库很简单。 1、【单选题】 ()是指继电器不动作时处于…

register_parameter和register_buffer 详解

在参考yolo系列代码或其他开源代码&#xff0c;经常看到register_buffer和 register_parameter的使用&#xff0c;接下来将详细对他们进行介绍。 1. 前沿 在搭建网络时&#xff0c;我们 自定义的参数&#xff0c;往往不会保存到模型权重文件中&#xff0c;或者成为模型可学习…

“轻松管理收支明细,随时筛选借款信息,财务清晰无忧“

作为现代人&#xff0c;我们每天都在与金钱打交道。无论是个人还是企业&#xff0c;都需要对收支情况进行详细的管理和分析。然而&#xff0c;繁琐的财务数据往往让人头疼。现在&#xff0c;我们为您推荐一款强大的财务管理工具&#xff0c;让您轻松管理收支明细&#xff0c;随…

超越 GLIP! | RegionSpot: 识别一切区域,多模态融合的开放世界物体识别新方法

本文的主题是多模态融合和图文理解&#xff0c;文中提出了一种名为RegionSpot的新颖区域识别架构&#xff0c;旨在解决计算机视觉中的一个关键问题&#xff1a;理解无约束图像中的各个区域或patch的语义。这在开放世界目标检测等领域是一个具有挑战性的任务。 关于这一块&…