Springboot + MySql + MyBatis 以注解形式实现多条件动态模糊查询并分页

服务端:
1.创建SqlMapper.class

package com.symapgis.lycp.mapper;

import com.symapgis.lycp.entity.*;

public class SqlMapper {
 /**
     * 变更表多条件模糊查询
     *
     * @param chan  传入的对象
     * @param strat  分页从第几页开始
     * @param size  分页,每页多少条
     * @return
     */
    public String selectByChangeIF(Change chan, int strat, int size) {
        StringBuffer sql = new StringBuffer("select * from changetable where 1=1 ");
        if (chan.getChanApplication() != null && !("".equals(chan.getChanApplication()))) {
        
        //LIKE '%******%'
        
            sql.append(" AND chan_application LIKE '%" + chan.getChanApplication() + "%'");
        }
        if (chan.getChanAffiliate() != null && !("".equals(chan.getChanAffiliate()))) {
            sql.append(" AND chan_affiliate LIKE '%" + chan.getChanAffiliate() + "%'");
        }

        if (chan.getChanWeizhichange() != null && !("".equals(chan.getChanWeizhichange()))) {
            sql.append(" AND chan_weizhichange='" + chan.getChanWeizhichange() + "'");
        }
        if (chan.getChanCqsm() != null && !("".equals(chan.getChanCqsm()))) {
            sql.append(" AND chan_cqsm='" + chan.getChanCqsm() + "'");
        }

		//日期格式, 以具体到某一天为例  LIKE '2019-08-13%'  

        if (chan.getChanApplicationTime() != null && !("".equals(chan.getChanApplicationTime()))) {
            sql.append(" AND chan_application_time LIKE '" + chan.getChanApplicationTime() + "%'");
        }

        if (chan.getChanYsResult() != null && !("".equals(chan.getChanYsResult()))) {
            sql.append(" AND chan_ys_result='" + chan.getChanYsResult() + "'");
        }

		//分页语句
        sql.append(" ORDER BY chan_application_time DESC LIMIT " + strat + "," + size);
        return sql.toString();
    }

    /**
     * 变更表配合模糊查询返回数量
     *
     * @param chan
     * @return
     */
    public String selectByChangeIFCount(Change chan) {
        StringBuffer sql = new StringBuffer("SELECT COUNT(*) from (SELECT * from changetable where 1=1 ");
        if (chan.getChanApplication() != null && !("".equals(chan.getChanApplication()))) {
            sql.append(" AND chan_application LIKE '%" + chan.getChanApplication() + "%'");
        }
        if (chan.getChanAffiliate() != null && !("".equals(chan.getChanAffiliate()))) {
            sql.append(" AND chan_affiliate LIKE '%" + chan.getChanAffiliate() + "%'");
        }

        if (chan.getChanWeizhichange() != null && !("".equals(chan.getChanWeizhichange()))) {
            sql.append(" AND chan_weizhichange='" + chan.getChanWeizhichange() + "'");
        }
        if (chan.getChanCqsm() != null && !("".equals(chan.getChanCqsm()))) {
            sql.append(" AND chan_cqsm='" + chan.getChanCqsm() + "'");
        }

        if (chan.getChanApplicationTime() != null && !("".equals(chan.getChanApplicationTime()))) {
            sql.append(" AND chan_application_time LIKE '" + chan.getChanApplicationTime() + "%'");
        }

        if (chan.getChanYsResult() != null && !("".equals(chan.getChanYsResult()))) {
            sql.append(" AND chan_ys_result='" + chan.getChanYsResult() + "'");
        }
        sql.append(" ORDER BY chan_application_time DESC ) as a");
        return sql.toString();
   		 }
    }

拼接后为:

//分页模糊查询语句
select * from changetable where 1=1 AND chan_application LIKE '%2019%' AND chan_affiliate LIKE '%19%' AND chan_weizhichange='是' AND chan_cqsm='买断' AND chan_application_time LIKE '2019-08-06%' AND chan_ys_result='1' ORDER BY chan_application_time DESC LIMIT 0,10

//返回模糊查询数量语句
SELECT COUNT(*) from (SELECT * from changetable where 1=1 AND chan_application LIKE '%2019%' AND chan_affiliate LIKE '%19%' AND chan_weizhichange='是' AND chan_cqsm='买断' AND chan_application_time LIKE '2019-08-06%' AND chan_ys_result='1' ORDER BY chan_application_time DESC ) as a

2.Mapper层

创建接口

@Mapper
public interface ChangeMapper {
/**
     * 多条件模糊查询
     * @param chan
     * @param start
     * @param size
     * @return
     * 注意  type 为创建的类名  method 为方法名
     */
    @SelectProvider(type=SqlMapper.class,method="selectByChangeIF")
    List selectByChangeIF(Change chan,@Param("strat") int start, @Param("size") int size);

    /**
     * 多条件模糊查询,返回数量
     * @param chan
     * @param start
     * @param size
     * @return
     */
    @SelectProvider(type=SqlMapper.class,method="selectByChangeIFCount")
    int selectByChangeIFCount(Change chan);
}

3.Controller层

import net.sf.json.JSONObject;
import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/Change")
public class ChangeController {
	@Autowired
    private ChangeService chanser;
    
    @ResponseBody
    @RequestMapping("/selectByChangeIf/{chanObj}")
    public Object selectByIF(@PathVariable("chanObj") String chanObj) {
        Map map = new HashMap<>();
	
		//接收前端发送来的JSON,转换为对象	

        JSONObject jsonobj = JSONObject.fromObject(chanObj);

        Change chan = new Change();

        chan.setChanApplication((String) jsonobj.get("chanApplication"));
        chan.setChanAffiliate((String) jsonobj.get("chanAffiliate"));
        chan.setChanWeizhichange((String) jsonobj.get("chanWeizhichange"));
        chan.setChanCqsm((String) jsonobj.get("chanCqsm"));
        chan.setChanApplicationTime((String) jsonobj.get("chanApplicationTime"));
        chan.setChanYsResult((String) jsonobj.get("chanYsResult"));

        int start = (int) jsonobj.get("start");
        int size = (int) jsonobj.get("size");

        map.put("ChangePageList", chanser.selectByChangeIF(chan, start, size));
        map.put("ChangePageListCount", chanser.selectByChangeIFCount(chan, start, size));
        return map;
    }
}

前端发送的JSON:

{chanApplication: "2019", chanAffiliate: "19", chanWeizhichange: "是", chanCqsm: "买断", chanApplicationTime: "2019-08-06", …}
chanAffiliate: "19"
chanApplication: "2019"
chanApplicationTime: "2019-08-06"
chanCqsm: "买断"
chanWeizhichange: "是"
chanYsResult: "1"
size: 10
start: 0

注意引用的JSON

import net.sf.json.JSONObject;

//在pom.xml引入jar包
		
            net.sf.json-lib
            json-lib
            2.2.3
            jdk15
        

前端:
利用JQuery发送请求

$('#submit').click(function() {

		//获取form表单中的内容
        var d = {};
        var t = $('form').serializeArray();
        $.each(t, function() {
            d[this.name] = this.value;
        });
        var chanObj = d;
        chanObj.start = 0;
        chanObj.size = 10;
        console.log(chanObj);
        $.ajax({
            url: "/Change/selectByChangeIf/" + JSON.stringify(chanObj),
            type: "post",
            contentType: "application/json",
            dataType: "json",
            data: {moveObj: JSON.stringify(chanObj)},
            success: function (res) {
                console.log(res);
               }
       })
 })

2.form表单

·

你可能感兴趣的:(Spring,boot,项目)