MyBatis动态匹配搜索

问题描述:前端页面一个搜索框中用户,输入查询的数据。那么问题来了,比如,不确定用户输入的是姓名,手机号,工号,车牌号,车架号,二维码,地址等。那么在不确定用户到底输入值是什么的情况下,如何将查询结果返回到前端页面?
解决问题的方法:用Mybatis 的 动态Sql 拼接。
现在给出相关代码:
controller 层代码,注意这里传的是一个对象Car

@RequiresPermissions("admin:car:list")
    @RequestMapping(value="/car/list",method=RequestMethod.POST,produces="application/json;charset=UTF-8")
    @ResponseBody
    public PageDataResult loadData(Integer page, Integer rows,String key){
        Car car = new Car();

        if(StringUtils.isNotEmpty(key))
        {
            car.setUsername("%"+key+"%");
            car.setJobnumber("%"+key+"%");
            car.setCarnumber("%"+key+"%");
            car.setUsermobile("%"+key+"%");
            car.setChejianumber("%"+key+"%");
            car.setRcode("%"+key+"%");
        }
        PageDataResult result = car_Service.getItemList(page, rows, car);
        List<Car> List = (List<Car>)result.getRows();
        result.setRows(List);
        return result;
    }

service 层代码


    /**
     *  分页插件
     * @param page
     * @param rows
     * @param key
     * @return
     */
    PageDataResult getItemList(int page, int rows,Car car);

serviceImpl层代码:

    public PageDataResult getItemList(int page, int rows, Car key) {
        // TODO Auto-generated method stub
//      CarExample example = new CarExample();
//      Criteria criteria = example.createCriteria();
//      //对车辆号码进行模糊查询
//      criteria.andUsermobileLike("%"+key+"%");
        //分页处理
        PageHelper.startPage(page, rows);
//      carMapper.selectByContiditions(key);

//      List<Car> list = carMapper.selectByExample(example);

        List<Car> list = carMapper.selectByContiditions(key);
        //创建一个返回值对象
        PageDataResult result = new PageDataResult();
        result.setRows(list);
        //取记录总条数
        PageInfo<Car> pageInfo = new PageInfo<>(list);
        result.setTotal(pageInfo.getTotal());
        return result;
    }

dao 层代码:

  List<Car> selectByContiditions(Car key);

Mapper.xml 代码:

    <!-- 多条件查询 selectByContiditions -->
    <select id="selectByContiditions" resultType="java.util.Map">
        SELECT
            <include refid="Base_Column_List" />
        FROM
            cx_car
        WHERE
            1 = 1
        AND
            kdgs = '顺丰'
        <if test="username != null">
            and username like #{username}
        </if>
        <if test="jobnumber != null">
            or jobnumber like #{jobnumber}
        </if>
        <if test="carnumber != null">
            or  carnumber like #{carnumber}
        </if>
        <if test="usermobile != null">
            or usermobile  like #{usermobile}
        </if>
        <if test="chejianumber != null">
            or chejianumber like #{chejianumber}
        </if>
        <if test="rcode != null">
            or rcode like #{rcode}
        </if>
        GROUP BY
            carnumber
        ORDER BY
        id DESC
    </select>

至此,Mybatia动态拼接Sql完成。
对比,单个字段的模糊查询:
Controller层代码:

    @RequiresPermissions("admin:carnote:list")
    @RequestMapping(value="/carnote/list",method=RequestMethod.GET)
    public ModelAndView list(Integer page, Integer rows,String key,ModelMap map){

        try {
            key = new String(key.getBytes("iso-8859-1"), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        }

        map.put("key", key);
        map.put("pageSize", this.pageSize);
        return new ModelAndView("/admin/carnote/list",map);
    }


    @RequiresPermissions("admin:carnote:list")
    @RequestMapping(value="/carnote/list",method=RequestMethod.POST,produces="application/json;charset=UTF-8")
    @ResponseBody
    public PageDataResult loadData(Integer page, Integer rows,String key){
        PageDataResult result = carNoteService.getItemList(page, rows, key);
        List<CarNote> List = (List<CarNote>)result.getRows();       
        result.setRows(List);
        return result;
    }

Service 层:

/**
     *  分页插件
     * @param page
     * @param rows
     * @param key
     * @return
     */
    PageDataResult getItemList(int page, int rows,String key);

ServiceImpl 代码:

    public PageDataResult getItemList(int page, int rows, String key) {
        // TODO Auto-generated method stub
        CarNoteExample example = new CarNoteExample();
        Criteria criteria =  example.createCriteria();

        criteria.andTitleLike(key+"%");
        //分页处理
        PageHelper.startPage(page, rows);
        List<CarNote> list = carNoteMapper.selectByExample(example);
        //创建一个返回值对象
        PageDataResult result = new PageDataResult();
        result.setRows(list);
        //取记录总条数
        PageInfo<CarNote> pageInfo = new PageInfo<>(list);
        result.setTotal(pageInfo.getTotal());
        return result;
    }

Dao 层代码:

    List<CarNote> selectByExample(CarNoteExample example);

Mapper.xml 代码

<select id="selectByExample" resultMap="BaseResultMap" parameterType="com.happydeer.pojo.CarNoteExample" >
    select
    <if test="distinct" >
      distinct
    </if>
    <include refid="Base_Column_List" />
    from cx_note
    <if test="_parameter != null" >
      <include refid="Example_Where_Clause" />
    </if>
    order by id desc
  </select>

至此对比完毕。
动态拼接实现了多条件搜索功能。
《end》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值