Java Web基础入门第八十九讲 在线网上书店(四)——编写service层
发布日期:2021-06-30 18:04:25 浏览次数:2 分类:技术文章

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

编写service层

编写与分类管理相关的服务

首先编写与分类管理相关的服务。我们可在cn.liayun.service包下创建一个BusinessService接口,该接口的具体代码如下:

package cn.liayun.service;import java.util.List;import cn.liayun.domain.Category;public interface BusinessService {
/******************************************** * 分类相关的服务 ********************************************/ void addCategory(Category c); Category findCategory(String id); List
getAllCategory();}

接着在cn.liayun.service.impl包下编写BusinessService接口的一个实现类——BusinessServiceImpl.java。

package cn.liayun.service.impl;import java.util.List;import cn.liayun.dao.CategoryDao;import cn.liayun.domain.Category;import cn.liayun.factory.DaoFactory;import cn.liayun.service.BusinessService;public class BusinessServiceImpl implements BusinessService {
private CategoryDao cDao = DaoFactory.getInstance().createDao(CategoryDao.class); /******************************************** * 分类相关的服务 ********************************************/ @Override public void addCategory(Category c) {
cDao.add(c); } @Override public Category findCategory(String id) {
return cDao.find(id); } @Override public List
getAllCategory() {
return cDao.getAll(); } }

编写与图书管理相关的服务

现在我们来编写与图书管理相关的服务,在BusinessService接口中加入对web层提供图书管理相关的服务。

package cn.liayun.service;import java.util.List;import cn.liayun.domain.Book;import cn.liayun.domain.Category;import cn.liayun.domain.PageBean;import cn.liayun.domain.QueryInfo;public interface BusinessService {
/******************************************** * 分类相关的服务 ********************************************/ void addCategory(Category c); Category findCategory(String id); List
getAllCategory(); /******************************************** * 图书相关的服务 ********************************************/ void addBook(Book book); Book findBook(String id); PageBean bookPageQuery(QueryInfo info); public List
getAllBook();}

接着在BusinessService接口的实现类中实现以上对外提供的具体服务。

package cn.liayun.service.impl;import java.util.List;import cn.liayun.dao.BookDao;import cn.liayun.dao.CategoryDao;import cn.liayun.domain.Book;import cn.liayun.domain.Category;import cn.liayun.domain.PageBean;import cn.liayun.domain.QueryInfo;import cn.liayun.domain.QueryResult;import cn.liayun.factory.DaoFactory;import cn.liayun.service.BusinessService;public class BusinessServiceImpl implements BusinessService {
private CategoryDao cDao = DaoFactory.getInstance().createDao(CategoryDao.class); private BookDao bDao = DaoFactory.getInstance().createDao(BookDao.class); /******************************************** * 分类相关的服务 ********************************************/ @Override public void addCategory(Category c) {
cDao.add(c); } @Override public Category findCategory(String id) {
return cDao.find(id); } @Override public List
getAllCategory() {
return cDao.getAll(); } /******************************************** * 图书相关的服务 ********************************************/ @Override public void addBook(Book book) {
bDao.add(book); } @Override public Book findBook(String id) {
return bDao.find(id); } @Override public PageBean bookPageQuery(QueryInfo info) {
QueryResult result = bDao.pageQuery(info.getStartindex(), info.getPagesize(), info.getWhere(), info.getQueryvalue()); PageBean bean = new PageBean(); bean.setCurrentpage(info.getCurrentpage()); bean.setList(result.getList()); bean.setPagesize(info.getPagesize()); bean.setTotalrecord(result.getTotalrecord()); return bean; } public List
getAllBook() {
return bDao.getAll(); }}

编写与用户管理相关的服务

现在我们来编写与用户管理相关的服务,在BusinessService接口中加入对web层提供用户管理相关的服务。

package cn.liayun.service;import java.util.List;import cn.liayun.domain.Book;import cn.liayun.domain.Category;import cn.liayun.domain.PageBean;import cn.liayun.domain.QueryInfo;import cn.liayun.domain.User;public interface BusinessService {
/******************************************** * 分类相关的服务 ********************************************/ void addCategory(Category c); Category findCategory(String id); List
getAllCategory(); /******************************************** * 图书相关的服务 ********************************************/ void addBook(Book book); Book findBook(String id); PageBean bookPageQuery(QueryInfo info); public List
getAllBook(); /******************************************** * 用户相关的服务 ********************************************/ void addUser(User user); User findUser(String username, String password); User findUser(String id);}

接着在BusinessService接口的实现类中实现以上对外提供的具体服务。

package cn.liayun.service.impl;import java.util.List;import cn.liayun.dao.BookDao;import cn.liayun.dao.CategoryDao;import cn.liayun.dao.UserDao;import cn.liayun.domain.Book;import cn.liayun.domain.Category;import cn.liayun.domain.PageBean;import cn.liayun.domain.QueryInfo;import cn.liayun.domain.QueryResult;import cn.liayun.domain.User;import cn.liayun.factory.DaoFactory;import cn.liayun.service.BusinessService;public class BusinessServiceImpl implements BusinessService {
private CategoryDao cDao = DaoFactory.getInstance().createDao(CategoryDao.class); private BookDao bDao = DaoFactory.getInstance().createDao(BookDao.class); private UserDao uDao = DaoFactory.getInstance().createDao(UserDao.class); /******************************************** * 分类相关的服务 ********************************************/ @Override public void addCategory(Category c) {
cDao.add(c); } @Override public Category findCategory(String id) {
return cDao.find(id); } @Override public List
getAllCategory() {
return cDao.getAll(); } /******************************************** * 图书相关的服务 ********************************************/ @Override public void addBook(Book book) {
bDao.add(book); } @Override public Book findBook(String id) {
return bDao.find(id); } @Override public PageBean bookPageQuery(QueryInfo info) {
QueryResult result = bDao.pageQuery(info.getStartindex(), info.getPagesize(), info.getWhere(), info.getQueryvalue()); PageBean bean = new PageBean(); bean.setCurrentpage(info.getCurrentpage()); bean.setList(result.getList()); bean.setPagesize(info.getPagesize()); bean.setTotalrecord(result.getTotalrecord()); return bean; } public List
getAllBook() {
return bDao.getAll(); } /******************************************** * 用户相关的服务 ********************************************/ @Override public void addUser(User user) {
uDao.add(user); } @Override public User findUser(String username, String password) {
return uDao.find(username, password); } @Override public User findUser(String id) {
return uDao.find(id); } }

编写与订单管理相关的服务

该项目中订单管理模块是最难的,所以我是最后才开始写的。首先,设计出一个购物车实体,因为我们待会要使用用户的购物车来生成一个订单,然后存入数据库中。如果不清楚为什么这样设计,可参考我之前的文章——。

package cn.liayun.domain;import java.util.LinkedHashMap;import java.util.Map;public class Cart {
private Map
map = new LinkedHashMap
(); private double price;//购物车的总价 //往购物车中添加一本书的方法(也即提供把商品添加到购物的功能) public void add(Book book) {
//得到对应的购物项 CartItem item = map.get(book.getId()); //如果是null,说明购物车中还没有该购物项 if (item == null) {
item = new CartItem(); item.setBook(book); item.setQuantity(1); //把购物项加到购物车中 map.put(book.getId(), item); } else {
//如果购物车有该购物项了,那么将购物项的数量+1 item.setQuantity(item.getQuantity() + 1); } } public Map
getMap() {
return map; } public void setMap(Map
map) {
this.map = map; } //购物车的价钱是购物项价钱的总和 public double getPrice() {
double totalprice = 0; for (Map.Entry
entry : map.entrySet()) {
totalprice += entry.getValue().getPrice(); } this.price = totalprice; return price; }}

紧接着,我们还要设计购物项实体。

package cn.liayun.domain;public class CartItem {
private Book book; private int quantity; private double price; public Book getBook() {
return book; } public void setBook(Book book) {
this.book = book; } public int getQuantity() {
return quantity; } public void setQuantity(int quantity) {
this.price = this.book.getPrice() * quantity;//书的数量一更新,书的总价马上更新 this.quantity = quantity; } public double getPrice() {
return price; }}

下面,我们再来编写与订单管理相关的服务,在BusinessService接口中加入对web层提供订单管理相关的服务。

package cn.liayun.service;import java.util.List;import cn.liayun.domain.Book;import cn.liayun.domain.Cart;import cn.liayun.domain.Category;import cn.liayun.domain.Order;import cn.liayun.domain.PageBean;import cn.liayun.domain.QueryInfo;import cn.liayun.domain.User;public interface BusinessService {
/******************************************** * 分类相关的服务 ********************************************/ void addCategory(Category c); Category findCategory(String id); List
getAllCategory(); /******************************************** * 图书相关的服务 ********************************************/ void addBook(Book book); Book findBook(String id); PageBean bookPageQuery(QueryInfo info); public List
getAllBook(); /******************************************** * 用户相关的服务 ********************************************/ void addUser(User user); User findUser(String username, String password); User findUser(String id); /******************************************** * 订单相关的服务 ********************************************/ //使用用户的购物车来生成一个订单,然后存入数据库中 void saveOrder(Cart cart, User user); Order findOrder(String id); List
getOrderByStatus(boolean status); //更新订单状态 public void updatOrder(String id, boolean status);}

接着在BusinessService接口的实现类中实现以上对外提供的具体服务。

package cn.liayun.service.impl;import java.util.Date;import java.util.HashSet;import java.util.List;import java.util.Map;import java.util.Set;import java.util.UUID;import cn.liayun.dao.BookDao;import cn.liayun.dao.CategoryDao;import cn.liayun.dao.OrderDao;import cn.liayun.dao.UserDao;import cn.liayun.domain.Book;import cn.liayun.domain.Cart;import cn.liayun.domain.CartItem;import cn.liayun.domain.Category;import cn.liayun.domain.Order;import cn.liayun.domain.OrderItem;import cn.liayun.domain.PageBean;import cn.liayun.domain.QueryInfo;import cn.liayun.domain.QueryResult;import cn.liayun.domain.User;import cn.liayun.factory.DaoFactory;import cn.liayun.service.BusinessService;public class BusinessServiceImpl implements BusinessService {
private CategoryDao cDao = DaoFactory.getInstance().createDao(CategoryDao.class); private BookDao bDao = DaoFactory.getInstance().createDao(BookDao.class); private UserDao uDao = DaoFactory.getInstance().createDao(UserDao.class); private OrderDao oDao = DaoFactory.getInstance().createDao(OrderDao.class); /******************************************** * 分类相关的服务 ********************************************/ @Override public void addCategory(Category c) {
cDao.add(c); } @Override public Category findCategory(String id) {
return cDao.find(id); } @Override public List
getAllCategory() {
return cDao.getAll(); } /******************************************** * 图书相关的服务 ********************************************/ @Override public void addBook(Book book) {
bDao.add(book); } @Override public Book findBook(String id) {
return bDao.find(id); } @Override public PageBean bookPageQuery(QueryInfo info) {
QueryResult result = bDao.pageQuery(info.getStartindex(), info.getPagesize(), info.getWhere(), info.getQueryvalue()); PageBean bean = new PageBean(); bean.setCurrentpage(info.getCurrentpage()); bean.setList(result.getList()); bean.setPagesize(info.getPagesize()); bean.setTotalrecord(result.getTotalrecord()); return bean; } public List
getAllBook() {
return bDao.getAll(); } /******************************************** * 用户相关的服务 ********************************************/ @Override public void addUser(User user) {
uDao.add(user); } @Override public User findUser(String username, String password) {
return uDao.find(username, password); } @Override public User findUser(String id) {
return uDao.find(id); } /******************************************** * 订单相关的服务 ********************************************/ //使用用户的购物车来生成一个订单,然后存入数据库中 @Override public void saveOrder(Cart cart, User user) {
Order order = new Order(); order.setId(UUID.randomUUID().toString()); order.setOrdertime(new Date()); order.setPrice(cart.getPrice()); order.setStatus(false); order.setUser(user); //定义一个集合,用于保存所有订单项 Set
oitems = new HashSet
(); //用购物车中的购物项生成订单项 Set
> set = cart.getMap().entrySet(); for (Map.Entry
entry : set) { //得到每一个购物项 CartItem citem = entry.getValue(); OrderItem oitem = new OrderItem(); //用购物车中的购物项生成订单项 oitem.setBook(citem.getBook()); oitem.setId(UUID.randomUUID().toString()); oitem.setPrice(citem.getPrice()); oitem.setQuantity(citem.getQuantity()); oitems.add(oitem); } order.setOrderitems(oitems); oDao.add(order); } @Override public Order findOrder(String id) { return oDao.find(id); } @Override public List
getOrderByStatus(boolean status) { return oDao.getAll(status); } //更新订单状态 public void updatOrder(String id, boolean status) { oDao.update(id, status); } }

测试service层

开发完业务逻辑层,一定要对程序已编写好的部分代码进行测试,做一步,测试一步,以免整个程序完成后由于页面太多或者是代码量太大给查找错误造成更大的负担!

为了方便进行测试,先清空所有数据库表中的记录。然后,在juint.test包下创建出一个BusinessServiceTest类,该类的具体代码如下:

package junit.test;import org.junit.Test;import cn.liayun.domain.Book;import cn.liayun.domain.Cart;import cn.liayun.domain.Category;import cn.liayun.domain.PageBean;import cn.liayun.domain.QueryInfo;import cn.liayun.domain.User;import cn.liayun.service.impl.BusinessServiceImpl;import cn.liayun.utils.JdbcUtils;public class BusinessServiceTest {
private BusinessServiceImpl service = new BusinessServiceImpl(); @Test public void testAddCategory() {
Category c = new Category(); c.setId("1"); c.setName("图书管理系统"); c.setDescription("图书管理系统的实现"); service.addCategory(c); JdbcUtils.commitTransaction(); } @Test public void testFindCategory() {
service.findCategory("1");//作断点调试 } @Test public void testGetAllCategory() {
service.getAllCategory();//作断点调试 } @Test public void testAddBook() {
Category c = new Category(); c.setId("1"); c.setName("图书管理系统"); c.setDescription("图书管理系统的实现"); Book book = new Book(); book.setAuthor("老张"); book.setCategory(c); book.setDescription("图书管理系统"); book.setId("34323"); book.setImage("1.jpg"); book.setName("关于图书管理系统的实现与开发"); book.setPrice(89); service.addBook(book); JdbcUtils.commitTransaction(); } @Test public void testFindBook() {
service.findBook("34323");//作断点调试 } @Test public void testPageQuery() {
QueryInfo info = new QueryInfo(); info.setCurrentpage(1); info.setPagesize(3); /*info.setQueryname("category_id"); info.setQueryvalue("1");*/ PageBean bean = service.bookPageQuery(info); System.out.println(bean);//作断点调试 } @Test public void testAddUser() {
User user = new User(); user.setAddress("广州黄埔"); user.setCellphone("15689893333"); user.setEmail("yemeimei@163.com"); user.setId("1"); user.setPassword("123"); user.setPhone("15071236745"); user.setUsername("yemeimei"); service.addUser(user); JdbcUtils.commitTransaction(); } @Test public void testSaveOrder() {
User user = new User(); user.setAddress("广州黄埔"); user.setCellphone("15689893333"); user.setEmail("yemeimei@163.com"); user.setId("1"); user.setPassword("123"); user.setPhone("15071236745"); user.setUsername("yemeimei"); Cart cart = new Cart(); Book book = new Book(); book.setAuthor("老张"); book.setCategory(null); book.setDescription("图书管理系统"); book.setId("34323"); book.setImage("1.jpg"); book.setName("关于图书管理系统的实现与开发"); book.setPrice(89); cart.add(book); service.saveOrder(cart, user); JdbcUtils.commitTransaction(); } @Test public void testFindOrder() {
service.findOrder("97666f18-0303-472d-94d8-be2130fdba1b");//作断点调试 }}

至此,对web层提供服务的service层总算是开发好了!

转载地址:https://liayun.blog.csdn.net/article/details/91287013 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java Web基础入门第九十讲 在线网上书店(五)——实现分类管理模块
下一篇:Java Web基础入门第八十八讲 在线网上书店(三)——编写dao层

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月09日 16时53分55秒