springCloud+Vue改造品优购第二章--------品牌管理分页功能后端完成

分页+条件查询的实现方式大概有两类
- 封装成对象的方式
- 封装成Map的形式

这里采取封装成map传参的实现

具体代码如下

TbBrandMapper.xml

  <select id="getPage"  resultType="java.util.Map">
    select a.* from tb_brand a
    where 1 = 1
    <if test="params != null and params.name != null">
        and a.name = #{params.name}
    </if>
  </select>

TbBrandMapper

    /**
     * 分页条件查询
     * @param page  分页记录
     * @param params    参数map
     * @return
     */
    List<Map<String, Object>> getPage(Pagination page, @Param("params")Map<String, Object> params);

TbBrandService

public Page<Map<String, Object>> getPage(Map<String, Object> qieryMap);

TbBrandServiceImpl

@Override
    public Page<Map<String, Object>> getPage(Map<String, Object> queryParams) {
        Page<Map<String, Object>> page = new Page<>();
        page = InitPage.intanceFromMap(queryParams, page);
        return page.setRecords(this.baseMapper.getPage(page, queryParams));
    }   

TbBrandController

@RequestMapping("/page")
    public Page<Map<String, Object>> page(){
        logger.info("provider--->queryMap[ "+this.getParams().toString()+" ]");
        return brandService.getPage(this.getParams());
    }

此处的getParams方法请查阅https://blog.csdn.net/weiqiang2/article/details/81557900

服务调用

@SuppressWarnings("unchecked")
    @RequestMapping("/page")
    public Page<Map<String, Object>> page(){
        logger.info("queryMap[ "+this.getParams().toString()+" ]");
        Map<String, Object> queryMap = new HashMap<>();
        return template.getForObject(AppConsts.MANAGE_SERVICE_URL+"/brand/page"+InitPage.mapToQueryString(this.getParams()), Page.class, queryMap);
    }

注意:调用服务的时候不能直接传参,因为此处是get方式调用,如果直接传参,在服务处并不能够获取到参数。我们需要将其map类型的参数转为字符串拼接在URL后面。具体的方法请参考InitPage类。

分页工具类

package com.pyg.page;
/**
 *  @Create  on     2018年8月13日      下午8:58:25
 *  @Author: Wq
 *  @E-mail: 1432114216@qq.com
 */

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.plugins.pagination.Pagination;

public class InitPage {

    /**
     * 填充分页参数
     * @param map   请求参数map
     * @param page  
     * @return
     */
    @Deprecated
    public static <T> Page<T> init(Map<String,Object> map,Page<T> page){
        if(map.containsKey("current")) 
            page.setCurrent(Integer.valueOf(map.get("current").toString()));
        if(map.containsKey("size")) 
            page.setSize(Integer.valueOf(map.get("size").toString()));      
        if(map.containsKey("orderByField")) 
            page.setOrderByField(map.get("orderByField").toString());       
        if(map.containsKey("isAsc")) 
            page.setAsc(Boolean.valueOf(map.get("isAsc").toString()));
        return page;
    }

    /**
     * 反射赋值
     * @param map  数据源
     * @param page page对象
     * @return
     */
    public static <T> Page<T> intanceFromMap(Map<String,Object> map,Page<T> page){
        if(map!=null && page!=null){
            for(Map.Entry<String, Object> mp:map.entrySet()){
                try{
                    Field field = Pagination.class.getDeclaredField(mp.getKey());
                    if(field!=null){
                        String fieldType = field.getGenericType().getTypeName();
                        field.setAccessible(true);
                        switch(fieldType){
                        case "java.lang.String":
                            field.set(page, mp.getValue().toString());
                            break;
                        case "java.lang.Boolean":
                        case "boolean":
                            Boolean val = false;
                            if(mp.getValue().getClass().getTypeName().equals("java.lang.Integer")){
                                val = Integer.valueOf(mp.getValue().toString())>0?true:false;
                            }else{
                                val = Boolean.valueOf(mp.getValue().toString());
                            }
                            field.set(page,val);
                            break;
                        case "java.lang.Integer":
                        case "int":
                            field.set(page, Integer.valueOf(mp.getValue().toString()));
                            break;
                        }
                    }
                }catch(Exception e){}
            }
        }
        return page;
    }


    /**
     * 将Map转换成GET方式的查询条件
     * @param queryMap  map格式的参数
     * @return
     */
    public static String mapToQueryString(Map<String, Object> queryMap) {
        StringBuilder queryString = new StringBuilder();
        queryString.append("?");

        for(String param: queryMap.keySet()) {
            if(StringUtils.isNotBlank(queryMap.get(param).toString())) {
                queryString.append(param+"="+queryMap.get(param)+"&");
            }
        }
        return queryString.toString().substring(0, queryString.toString().length() - 1);
    }

    public static void main(String[] args) {
        Map<String, Object> map = new HashMap<>();
        map.put("name", "张三");
        map.put("age", "16");
        map.put("gender", "nan");
        map.put("sa", "sa");
        System.out.println(mapToQueryString(map));
    }
}

到这里,分页功能的后端已基本完成,前端Vue模块后续更新……..

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本文介绍了一个基于Spring Boot、Spring Cloud和Vue后端分离的项目实战。这个项目是一个简单的在线商城,包含了用户注册、登录、商展示、物车、订单管理功能。通过这个项目,读者可以深入理解前后端分离的架构模式和互联网应用的开发方式。 首先,文章介绍了前后端分离的基本概念和势。前后端分离是将应用的前端和后端代码分开来开发,使得前端和后端具有独立的开发周期和技术栈,进而提高了开发效率和代码质量。同时,前后端分离还可以提供更好的用户体验和灵活性,对于互联网应用来说尤为重要。 接下来,文章介绍了项目的架构和技术栈。项目采用了Spring Boot和Spring Cloud框架来实现后端代码,采用MyBatis作为ORM框架和Redis作为缓存中间件。同时,项目还采用了Vue.js作为前端框架和Element UI组件库来实现前端页面。通过这些开源框架和组件,可以快速搭建一个前后端分离的互联网应用。 然后,文章介绍了项目的核心功能和代码实现。在用户注册和登录方面,项目采用了Spring Security框架和JWT令牌来实现用户认证和授权,保证了用户信息的安全性。在商展示和物车方面,项目采用了Vue.js来实现前端页面和事件处理。在订单管理方面,项目采用了MyBatis Plus来实现订单数据的持久化和分页查询。 最后,文章介绍了项目的测试和化。通过对项目的压力测试和性能测试,文章发现项目还存在一些性能瓶颈和安全隐患,可以通过化数据库查询、缓存配置和代码实现来提高应用的性能和安全性。 总之,这篇文章介绍了一个基于Spring Boot、Spring Cloud和Vue后端分离的项目实战,通过实现一个在线商城的功能,展示了前后端分离的开发模式和互联网应用的开发技术栈。本文可以作为前后端分离开发的入门教程,也可以作为互联网应用开发的参考文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值