实战SSM_O2O商铺_39【前端展示】首页轮播图和一级商铺Dao+Service+Controller层的实现
生活随笔
收集整理的這篇文章主要介紹了
实战SSM_O2O商铺_39【前端展示】首页轮播图和一级商铺Dao+Service+Controller层的实现
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 概述
- HeadLine Dao層
- 接口
- 映射文件
- 單元測試
- HeadLine Service層
- 接口
- 實現(xiàn)類
- 單元測試
- ShopCategory Dao層完善
- 映射文件完善
- 單元測試
- Controller層
- MainPageController
- 測試
- Github地址
概述
接下來我們來完成前端展示模塊部分的功能,極其丑陋的頁面原型如下
可以分析得出,主頁中輪播圖需要從后臺加載數(shù)據(jù),同樣的一級類別(即parent_id = null )的商鋪信息也需要從后臺加載數(shù)據(jù)
HeadLine Dao層
接口
package com.artisan.o2o.dao;import java.util.List;import org.apache.ibatis.annotations.Param;import com.artisan.o2o.entity.HeadLine;public interface HeadLineDao {/*** * * @Title: selectHeadLineList* * @Description: 根據(jù)enable_status查詢符合條件的頭條信息* * @param headLineConditon* @return* * @return: List<HeadLine>*/List<HeadLine> selectHeadLineList(@Param("headLineConditon") HeadLine headLineConditon); }映射文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.artisan.o2o.dao.HeadLineDao"><select id="selectHeadLineList" resultType="HeadLine">SELECTline_id,line_name,line_link,line_img,priority,enable_status,create_time,last_edit_timeFROMtb_head_line<where><if test="headLineConditon.enableStatus != null">and enable_status = #{headLineConditon.enableStatus}</if></where>ORDER BY priority DESC </select> </mapper>單元測試
模擬數(shù)據(jù):
package com.artisan.o2o.dao;import java.util.List;import org.junit.Assert; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired;import com.artisan.o2o.BaseTest; import com.artisan.o2o.entity.HeadLine;public class HeadLineDaoTest extends BaseTest {@Autowiredprivate HeadLineDao headLineDao;@Testpublic void testSelectHeadLineList() {HeadLine headLineConditon = new HeadLine();// 狀態(tài) 0 不可用 1 可用headLineConditon.setEnableStatus(0);// 查詢不可用的頭條信息List<HeadLine> headLineList = headLineDao.selectHeadLineList(headLineConditon);Assert.assertEquals(2, headLineList.size());for (HeadLine headLine : headLineList) {System.out.println(headLine);}// 查詢可用的頭條信息headLineConditon.setEnableStatus(1);headLineList = headLineDao.selectHeadLineList(headLineConditon);Assert.assertEquals(3, headLineList.size());for (HeadLine headLine : headLineList) {System.out.println(headLine);}// 查詢?nèi)繝顟B(tài)的頭條信息headLineList = headLineDao.selectHeadLineList(new HeadLine());Assert.assertEquals(5, headLineList.size());for (HeadLine headLine : headLineList) {System.out.println(headLine);}} }單元測試日志:
JDBC Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@7e6ef134] will not be managed by Spring ==> Preparing: SELECT line_id, line_name, line_link, line_img, priority, enable_status, create_time, last_edit_time FROM tb_head_line WHERE enable_status = ? ORDER BY priority DESC ==> Parameters: 0(Integer) <== Columns: line_id, line_name, line_link, line_img, priority, enable_status, create_time, last_edit_time <== Row: 4, test4, aa, bb, 96, 0, null, null <== Row: 5, test5, cc, dd, 95, 0, null, null <== Total: 2 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4716be8b] HeadLine [lineId=4, lineName=test4, lineLink=aa, lineImg=bb, priority=96, enableStatus=0, createTime=null, lastEditTime=null] HeadLine [lineId=5, lineName=test5, lineLink=cc, lineImg=dd, priority=95, enableStatus=0, createTime=null, lastEditTime=null] Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@21a21c64] was not registered for synchronization because synchronization is not active JDBC Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@42bc14c1] will not be managed by Spring ==> Preparing: SELECT line_id, line_name, line_link, line_img, priority, enable_status, create_time, last_edit_time FROM tb_head_line WHERE enable_status = ? ORDER BY priority DESC ==> Parameters: 1(Integer) <== Columns: line_id, line_name, line_link, line_img, priority, enable_status, create_time, last_edit_time <== Row: 1, test1, xxx, yyy, 99, 1, null, null <== Row: 2, test2, x, y, 98, 1, null, null <== Row: 3, test3, xx, yy, 97, 1, null, null <== Total: 3 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@21a21c64] HeadLine [lineId=1, lineName=test1, lineLink=xxx, lineImg=yyy, priority=99, enableStatus=1, createTime=null, lastEditTime=null] HeadLine [lineId=2, lineName=test2, lineLink=x, lineImg=y, priority=98, enableStatus=1, createTime=null, lastEditTime=null] HeadLine [lineId=3, lineName=test3, lineLink=xx, lineImg=yy, priority=97, enableStatus=1, createTime=null, lastEditTime=null] Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@74f5ce22] was not registered for synchronization because synchronization is not active JDBC Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@16fdec90] will not be managed by Spring ==> Preparing: SELECT line_id, line_name, line_link, line_img, priority, enable_status, create_time, last_edit_time FROM tb_head_line ORDER BY priority DESC ==> Parameters: <== Columns: line_id, line_name, line_link, line_img, priority, enable_status, create_time, last_edit_time <== Row: 1, test1, xxx, yyy, 99, 1, null, null <== Row: 2, test2, x, y, 98, 1, null, null <== Row: 3, test3, xx, yy, 97, 1, null, null <== Row: 4, test4, aa, bb, 96, 0, null, null <== Row: 5, test5, cc, dd, 95, 0, null, null <== Total: 5 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@74f5ce22] HeadLine [lineId=1, lineName=test1, lineLink=xxx, lineImg=yyy, priority=99, enableStatus=1, createTime=null, lastEditTime=null] HeadLine [lineId=2, lineName=test2, lineLink=x, lineImg=y, priority=98, enableStatus=1, createTime=null, lastEditTime=null] HeadLine [lineId=3, lineName=test3, lineLink=xx, lineImg=yy, priority=97, enableStatus=1, createTime=null, lastEditTime=null] HeadLine [lineId=4, lineName=test4, lineLink=aa, lineImg=bb, priority=96, enableStatus=0, createTime=null, lastEditTime=null] HeadLine [lineId=5, lineName=test5, lineLink=cc, lineImg=dd, priority=95, enableStatus=0, createTime=null, lastEditTime=null]HeadLine Service層
接口
package com.artisan.o2o.service;import java.util.List;import com.artisan.o2o.entity.HeadLine;public interface HeadLineService {/*** * * @Title: queryHeadLineList* * @Description: 查詢headLine* * @param headLineConditon* * @return: List<HeadLine>*/List<HeadLine> queryHeadLineList(HeadLine headLineConditon); }實現(xiàn)類
package com.artisan.o2o.service.impl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import com.artisan.o2o.dao.HeadLineDao; import com.artisan.o2o.entity.HeadLine; import com.artisan.o2o.service.HeadLineService;@Service public class HeadLineServiceImpl implements HeadLineService {@AutowiredHeadLineDao headLineDao;@Overridepublic List<HeadLine> queryHeadLineList(HeadLine headLineConditon) {return headLineDao.selectHeadLineList(headLineConditon);}}單元測試
package com.artisan.o2o.service;import java.util.List;import org.junit.Assert; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired;import com.artisan.o2o.BaseTest; import com.artisan.o2o.entity.HeadLine;public class HeadLineServiceTest extends BaseTest {@Autowiredprivate HeadLineService headLineService;@Testpublic void testQueryHeadLineList() {HeadLine headLineConditon = new HeadLine();// 狀態(tài) 0 不可用 1 可用headLineConditon.setEnableStatus(0);// 查詢不可用的頭條信息List<HeadLine> headLineList = headLineService.queryHeadLineList(headLineConditon);Assert.assertEquals(2, headLineList.size());for (HeadLine headLine : headLineList) {System.out.println(headLine);}// 查詢可用的頭條信息headLineConditon.setEnableStatus(1);headLineList = headLineService.queryHeadLineList(headLineConditon);Assert.assertEquals(3, headLineList.size());for (HeadLine headLine : headLineList) {System.out.println(headLine);}} }檢查是否符合預期,單元測試正常
ShopCategory Dao層完善
因為按照設(shè)計,首頁展示的商品類別是一級商品類別,即parent_id為null的商鋪類別信息。 因此需要擴招之前寫好的Dao層的SQL映射文件。
映射文件完善
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.artisan.o2o.dao.ShopCategoryDao"><select id="queryShopCategoryList" resultType="com.artisan.o2o.entity.ShopCategory">SELECTshop_category_id ,shop_category_name,shop_category_desc,shop_category_img,priority,create_time,last_edit_time,parent_idFROMtb_shop_category<where><!-- 首頁查詢一級類別的商鋪信息 --><if test="shopCategoryCondition == null">and parent_id is null</if><!-- 控制層getshopinitinfo的方法 shopCategoryService.getShopCategoryList(new ShopCategory());只能選擇二級商鋪類別,不能掛載一級商鋪類別大類目錄下--><if test="shopCategoryCondition != null">and parent_id is not null</if><!-- 如果傳遞了父類的id,則查詢對應(yīng)父類下的目錄 --><if test="shopCategoryCondition != null and shopCategoryCondition.parent != null">and parent_id = #{shopCategoryCondition.parent.shopCategoryId}</if></where> ORDER BY priority DESC </select> </mapper>單元測試
package com.artisan.o2o.dao;import java.util.List;import org.junit.Assert; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired;import com.artisan.o2o.BaseTest; import com.artisan.o2o.entity.ShopCategory;public class ShopCategoryDaoTest extends BaseTest {@AutowiredShopCategoryDao shopCategoryDao;@Testpublic void testQueryShopCategoryList() {// shopCategoryCondition 不為null的情況,查詢parent_id is not null 的數(shù)據(jù)ShopCategory shopCategory = new ShopCategory();List<ShopCategory> categoryList = shopCategoryDao.queryShopCategoryList(shopCategory);Assert.assertEquals(2, categoryList.size());for (ShopCategory shopCategory2 : categoryList) {System.out.println(shopCategory2);}// shopCategoryCondition.parent 不為null的情況// 查詢parent=1的店鋪目錄ShopCategory child = new ShopCategory();ShopCategory parent = new ShopCategory();parent.setShopCategoryId(1L);child.setParent(parent);categoryList = shopCategoryDao.queryShopCategoryList(child);Assert.assertEquals(2, categoryList.size());for (ShopCategory shopCategory2 : categoryList) {System.out.println(shopCategory2);}// 查詢 parent is null 的情況categoryList = shopCategoryDao.queryShopCategoryList(null);Assert.assertEquals(1, categoryList.size());System.out.println(categoryList.get(0));}}檢查是否符合預期,單元測試正常
Controller層
MainPageController
package com.artisan.o2o.web.frontend;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody;import com.artisan.o2o.entity.HeadLine; import com.artisan.o2o.entity.ShopCategory; import com.artisan.o2o.enums.HeadLineStateEnum; import com.artisan.o2o.enums.ShopCategoryStateEnum; import com.artisan.o2o.service.HeadLineService; import com.artisan.o2o.service.ShopCategoryService;@Controller @RequestMapping("/frontend") public class MainPageController {@Autowiredprivate HeadLineService headLineService;@Autowiredprivate ShopCategoryService shopCategoryService;@RequestMapping(value = "/listmainpage", method = RequestMethod.GET)@ResponseBodypublic Map<String, Object> listMainPage() {Map<String, Object> modelMap = new HashMap<String, Object>();List<ShopCategory> shopCategoryList = new ArrayList<ShopCategory>();List<HeadLine> headLineList = new ArrayList<HeadLine>();try {// 查詢狀態(tài)為1的可見的headLine信息HeadLine headLineConditon = new HeadLine();headLineConditon.setEnableStatus(1);headLineList = headLineService.queryHeadLineList(headLineConditon);modelMap.put("headLineList", headLineList);} catch (Exception e) {e.printStackTrace();modelMap.put("errMsg", HeadLineStateEnum.INNER_ERROR.getStateInfo());}try{// 查詢parentId為null的一級類別shopCategoryList = shopCategoryService.getShopCategoryList(null);modelMap.put("shopCategoryList", shopCategoryList);} catch (Exception e) {e.printStackTrace();modelMap.put("success", false);modelMap.put("errMsg", ShopCategoryStateEnum.INNER_ERRO.getStateInfo());}modelMap.put("success", true);return modelMap;} }測試
啟動tomcat,訪問 http://localhost:8080/o2o/frontend/listmainpage
得到JSON字符串如下
{"shopCategoryList": [{"shopCategoryId": 1,"shopCategoryName": "咖啡奶茶","shopCategoryDesc": "咖啡奶茶大類","shopCategoryImg": "/xxxx/xxxx","priority": 0,"createTime": 1526580836000,"lastEditTime": 1526580838000,"parent": null}],"success": true,"headLineList": [{"lineId": 1,"lineName": "test1","lineLink": "xxx","lineImg": "yyy","priority": 99,"enableStatus": 1,"createTime": null,"lastEditTime": null},{"lineId": 2,"lineName": "test2","lineLink": "x","lineImg": "y","priority": 98,"enableStatus": 1,"createTime": null,"lastEditTime": null},{"lineId": 3,"lineName": "test3","lineLink": "xx","lineImg": "yy","priority": 97,"enableStatus": 1,"createTime": null,"lastEditTime": null}] }符合預期。后端完成,接下來我們來試下View層的邏輯。
Github地址
代碼地址: https://github.com/yangshangwei/o2o
總結(jié)
以上是生活随笔為你收集整理的实战SSM_O2O商铺_39【前端展示】首页轮播图和一级商铺Dao+Service+Controller层的实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实战SSM_O2O商铺_38【商品类别】
- 下一篇: 实战SSM_O2O商铺_40【前端展示】