文章目录

  • 概述
  • ShopService接口新增接口方法
  • ShopServie接口实现类
  • 分页工具类
  • 单元测试
  • Github地址

概述

ShopService接口中仅需要定义一个接口方法,在该接口方法的实现类中调用DAO层的两个方法 selectShopList 和 selectShopCount ,并将数据封装到ShopExecution中,以便控制层获取数据,在View层做展示。

ShopExecution 这里增加了一个空构造函数,方便实例化并调用set方法,将shopList和shopCount 封装到ShopExecution 中


ShopService接口新增接口方法

 /*** * * @Title: getShopList* * @Description: 获取商铺列表. 在这一个方法中同样的会调用查询总数的DAO层方法,封装到ShopExecution中* * @param shopCondition* @param pageIndex*            前端页面 只有第几页 第几页 定义为pageIndex* @param pageSize*            展示的行数* @throws ShopOperationException* * @return: ShopExecution*/ShopExecution getShopList(Shop shopCondition, int pageIndex, int pageSize) throws ShopOperationException;;

ShopServie接口实现类

@Overridepublic ShopExecution getShopList(Shop shopCondition, int pageIndex, int pageSize) throws ShopOperationException {// 前台页面插入的pageIndex(第几页), 而dao层是使用 rowIndex (第几行) ,所以需要转换一下int rowIndex = PageCalculator.calculateRowIndex(pageIndex, pageSize);List<Shop> shopList = new ArrayList<Shop>();ShopExecution se = new ShopExecution();// 查询带有分页的shopListshopList = shopDao.selectShopList(shopCondition, rowIndex, pageSize);// 查询符合条件的shop总数int count = shopDao.selectShopCount(shopCondition);// 将shopList和 count设置到se中,返回给控制层if (shopList != null) {se.setShopList(shopList);se.setCount(count);} else {se.setState(ShopStateEnum.INNER_ERROR.getState());}return se;}

分页工具类

负责将前台的PageIndex转换为DAO层的rowIndex.

package com.artisan.o2o.util;/*** * * @ClassName: PageCalculator* * @Description: 将前台使用的pageIndex 转换为 dao层使用的 rowIndex* * @author: Mr.Yang* * @date: 2018年6月7日 上午12:24:38*/
public class PageCalculator {public static int calculateRowIndex(int pageIndex, int pageSize) {return (pageIndex > 0) ? (pageIndex - 1) * pageSize : 0;}
}

单元测试

tb_shop中的数据

@Testpublic void testGetShopList() {Shop shopCondition = new Shop();PersonInfo personInfo = new PersonInfo();personInfo.setUserId(1L);shopCondition.setOwner(personInfo);shopCondition.setShopName("咖啡");// 符合 shop_name like '%咖啡%' 且 owner_id =1 有3条数据,// 第二个参数 和 第三个参数 从pageIndex=1 第一页取数据,取2条 pageSize=2ShopExecution se = shopService.getShopList(shopCondition, 1, 2);// 按照tb_shop中的数据筛选 符合条件的数据3条, 从第一页开始取2条,se.getShopList().size() 应该有2条数据,Assert.assertNotNull(se);Assert.assertEquals(2, se.getShopList().size());Assert.assertEquals(3, se.getCount());// 按照tb_shop中的数据筛选 符合条件的数据3条, 从第2页开始取2条,se.getShopList().size()// 应该只有1条数据,总数仍为3se = shopService.getShopList(shopCondition, 2, 2);Assert.assertNotNull(se);Assert.assertEquals(1, se.getShopList().size());Assert.assertEquals(3, se.getCount());}
JDBC Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@24ba9639] will not be managed by Spring
==>  Preparing: SELECT s.shop_id, s.shop_name, s.shop_desc, s.shop_addr, s.phone, s.shop_img, s.priority, s.create_time, s.last_edit_time, s.enable_status, s.advice, a.area_id, a.area_name, sc.shop_category_id, sc.shop_category_name FROM tb_shop s, tb_area a, tb_shop_category sc WHERE s.shop_name like '%咖啡%' and s.owner_id = ? AND s.area_id = a.area_id AND s.shop_category_id = sc.shop_category_id ORDER BY s.priority DESC LIMIT ? , ?
==> Parameters: 1(Long), 0(Integer), 2(Integer)
<==    Columns: shop_id, shop_name, shop_desc, shop_addr, phone, shop_img, priority, create_time, last_edit_time, enable_status, advice, area_id, area_name, shop_category_id, shop_category_name
<==        Row: 24, 咖啡点, 小工匠的咖啡店, NanJing, 9876553, \upload\item\shopImage\24\2018052118095757182.jpg, 99, 2018-05-21 18:09:57.0, 2018-05-21 18:09:57.0, 0, 审核中, 1, 北京, 1, 咖啡奶茶
<==        Row: 25, 咖啡店Improve, 小工匠的咖啡店Improve, NanJing-Improve, 9876553, \upload\item\shopImage\25\2018052214472089649.jpg, 99, 2018-05-22 14:46:16.0, 2018-05-22 14:46:18.0, 0, 审核中Improve, 1, 北京, 1, 咖啡奶茶
<==      Total: 2
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@74bf1791]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@12f9af83] was not registered for synchronization because synchronization is not active
JDBC Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@7e6ef134] will not be managed by Spring
==>  Preparing: SELECT count(1) FROM tb_shop s, tb_area a, tb_shop_category sc WHERE s.shop_name like '%咖啡%' and s.owner_id = ? AND s.area_id = a.area_id AND s.shop_category_id = sc.shop_category_id
==> Parameters: 1(Long)
<==    Columns: count(1)
<==        Row: 3
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@12f9af83]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7f132176] was not registered for synchronization because synchronization is not active
JDBC Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@2631f68c] will not be managed by Spring
==>  Preparing: SELECT s.shop_id, s.shop_name, s.shop_desc, s.shop_addr, s.phone, s.shop_img, s.priority, s.create_time, s.last_edit_time, s.enable_status, s.advice, a.area_id, a.area_name, sc.shop_category_id, sc.shop_category_name FROM tb_shop s, tb_area a, tb_shop_category sc WHERE s.shop_name like '%咖啡%' and s.owner_id = ? AND s.area_id = a.area_id AND s.shop_category_id = sc.shop_category_id ORDER BY s.priority DESC LIMIT ? , ?
==> Parameters: 1(Long), 2(Integer), 2(Integer)
<==    Columns: shop_id, shop_name, shop_desc, shop_addr, phone, shop_img, priority, create_time, last_edit_time, enable_status, advice, area_id, area_name, shop_category_id, shop_category_name
<==        Row: 28, Modify咖啡店, Modify小工匠的咖啡店28, Modify-NanJing218, 12345628, \upload\item\shopImage\28\2018060500333541696.jpg, 78, 2018-05-28 23:13:37.0, 2018-06-06 20:56:31.0, 0, null, 2, 上海, 2, 咖啡
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7f132176]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@bcef303] was not registered for synchronization because synchronization is not active
JDBC Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@33308786] will not be managed by Spring
==>  Preparing: SELECT count(1) FROM tb_shop s, tb_area a, tb_shop_category sc WHERE s.shop_name like '%咖啡%' and s.owner_id = ? AND s.area_id = a.area_id AND s.shop_category_id = sc.shop_category_id
==> Parameters: 1(Long)
<==    Columns: count(1)
<==        Row: 3
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@bcef303]

Github地址

代码地址: https://github.com/yangshangwei/o2o

实战SSM_O2O商铺_22【商铺列表】Service层开发相关推荐

  1. SpringBoot实现Java高并发秒杀系统之Service层开发(二)

    继上一篇文章:SpringBoot实现Java高并发秒杀系统之DAO层开发 我们创建了SpringBoot项目并熟悉了秒杀系统的表设计,下面我们将讲解一下秒杀系统的核心部分:Service业务层的开发 ...

  2. Spring整合Mybatis之DAO层、Service层开发

    3. Spring整合Mybatis编程DAO层开发 1. 项目引入相关依赖spring mybatis mysql mybatis-spring druid2. 编写spring.xml整合:spr ...

  3. 实战SSM_O2O商铺_18【商铺编辑】Service层开发

    文章目录 概述 结构 Service层接口及其实现类 单元测试 Github地址 概述 既然是商铺编辑,肯定要根据入参shopId获取shop信息,然后用户在客户端修改店铺信息后,提交到后台更新商铺信 ...

  4. 校园O2O商铺平台-店铺注册Service层和Controller层

    店铺注册之Service层的实现 正在更新 店铺注册功能之Controller层的实现 正在更新 店铺注册功能之Controller层的改造 正在更新

  5. 淘淘商城第54讲——商品搜索之service层开发

    首先我们在taotao-search-interface工程的SearchService接口中声明一个根据搜索条件去查询搜索结果的方法,如下图所示. 然后我们在taotao-search-servic ...

  6. SpringBoot实现Java高并发秒杀系统之DAO层开发(一)

    SpringBoot实现Java高并发秒杀系统之DAO层开发(一) 秒杀系统在如今电商项目中是很常见的,最近在学习电商项目时讲到了秒杀系统的实现,于是打算使用SpringBoot框架学习一下秒杀系统( ...

  7. 实战SSM_O2O商铺_41【前端展示】店铺列表页面Dao+Service+Controller层的实现

    文章目录 概述 Dao层 接口 映射文件 单元测试 Service层 接口方法 单元测试 Controller层 增加 ShopListController 单元测试 Github地址 概述 在完成了 ...

  8. 实战SSM_O2O商铺_36【商品】商品列表之Dao+Service+Controller层的实现

    文章目录 概述 Dao层 ProductDao.java ProductDao.xml 单元测试 Service层 ProductService.java ProductServiceImpl.jav ...

  9. 实战SSM_O2O商铺_42【前端展示】店铺列表页面View层的实现

    文章目录 概述 代码结构 shoplist.html shoplist.js shoplist.css common.js添加解析日期的公共方法 FrontEndController添加路由 联调测试 ...

最新文章

  1. gis 联合 融合_GIS技术进化 | 我们为何需要跨平台GIS技术体系?
  2. Wince6.0编译错误经验总结
  3. Python编程基础15:异常
  4. AcWing 240. 食物链
  5. Mysql的安全设置
  6. 2003 服务器自动重启设置,Win2003定时自动重启的完美方案
  7. 关于a标签下载文件变打开的解决方案
  8. Linux系统隐藏鼠标指针,如何在Linux / X11下隐藏鼠标指针?
  9. “移动媒体产品”的三个方向
  10. 黑马12期配套15年6天hadoop培训
  11. 【算法板子】普通平衡树(洛谷P3369)
  12. python #hsv空间中Hue色度/色调在色相环上的角#冷暖色调 在色相环上的范围
  13. wifidog+authpuppy认证流程详解
  14. 动态可视化十大排序算法之冒泡排序
  15. Faiss:Facebook开源的相似性搜索类库
  16. 运动控制算法c语言,VC平台下机器人虚拟运动控制及3D运动仿真的有效实现方法...
  17. 2021年江苏省高考成绩查询时间,2021年江苏高考成绩什么时候出来 公布时间
  18. QQ邮箱获取邮件客户端授权码
  19. 使命 愿景 价值观_公开发展您的使命或价值观的4个关键
  20. 小编带你简单了解一下加密技术原理:AES加密标准

热门文章

  1. 将单向链表按某值分成左边小、中间相等、右边大的形式
  2. 【转载】Few-shot learning(少样本学习)和 Meta-learning(元学习)概述
  3. 论文笔记:N-BEATS: NEURAL BASIS EXPANSION ANALYSIS FORINTERPRETABLE TIME SERIES FORECASTING
  4. 李宏毅线性代数笔记9:特征值与特征向量
  5. 深度学习核心技术精讲100篇(七十九)-深度学习应用实战案例:携程金融自动化迭代反欺诈模型体系
  6. 产品路线图的三种模型(RICE/MoSCoW/Kano),教你如何对需求进行优先级排序
  7. 强化学习(五)用时序差分法(TD)求解
  8. hadoop学习--K-Means(聚类算法)
  9. Python--strip()学习记录
  10. AWS re-Invent最新发布AI产品解析:场景为王