使用mybatis完成高级查询(多条件查询)的核心代码

本文介绍了如何利用Mybatis进行多条件高级查询。通过实例展示了query对象的构建,ProductMapper.xml中的配置,DAO接口的方法设计,以及在ProductServlet类中调用查询方法的过程。同时,提到了mybatis核心配置文件的设置,以及前端页面展示数据的处理方式。
摘要由CSDN通过智能技术生成
1.创建一个Query对象(查询对象)
    里面放一些查询的条件,它就是一个JavaBean
  创建一个包 cn.itsource.query 和我们的domain在同一级
  取名就为XxxQuery  -> ProductQuery /TeacherQuery

2.查询的时候需要从前台传入Query对象 
     List<Product> queryAll(ProductQuery query)

3.mapper的配置是完成高级查询(一定把query传过来)
     <where>
          <if test="条件是否存在">
                and 条件
         </if>
    </where>
4.前台准备一个查询表单(下例)
    <form action="/product" method="post">
        名称:<input type="text" name="productName" value="${query.productName}" />
         从<input type="number" name="minSalePrice" value="${query.minSalePrice}" >
              到<input type="number" name="maxSalePrice" value="${query.maxSalePrice}" >
        <input type="submit" value="..查询.." />
    </form>
    value中是做回显的
    注意:所有的name是都Query对象中的属性
5.在Servlet要提收并且封装Query对象(下例)
    ProductQuery query = new ProductQuery();
    //接收商品名称参数,并且放到query对象
    String productName = req.getParameter("productName");
    if(isNotBlank(productName)){
        query.setProductName(productName);
    }
    注意:调用的时候要使用传入query的那一个方法 

query对象:

package cn.itsource.query;

/**
 *  封装商品的查询条件
 * */
public class ProductQuery {
   
    //商品名称
    private String productName;
    //商品最低价格
    private Double minSalePrice;
    //商品最高价格
    private Double maxSalePrice;

    public String getProductName() {
        return productName;
    }
    public void setProductName(String productName) {
        this.productName = productName;
    }
    public Double getMinSalePrice() {
        return minSalePrice;
    }
    public void setMinSalePrice(Double minSalePrice) {
        this.minSalePrice = minSalePrice;
    }
    public Double getMaxSalePrice() {
        return maxSalePrice;
    }
    public void setMaxSalePrice(Double maxSalePrice) {
        this.maxSalePrice = maxSalePrice;
    }

    /**
     *  提供一个判断条件方法  用于在对象映射文件中直接使用(${whereSql})
     *   select * from product  ${whereSql}
     * 
     *    动态拼接字符串(sql条件) 第一个条件必须是where开头,后面的必须是and
     *    1=1这种方法不是很好。查询效率很低!
     * */
    /*
    public String getWhereSql(){
        StringBuffer whereSql = new StringBuffer(" where 1=1 "); 
        if(productName!=null && !"".equals(productName)){
            whereSql.append("and productName like '%").append(productName).append("%'");
        }
        if(minSalePrice!=null){
            whereSql.append("and salePrice >").append(minSalePrice);
        }
        if(maxSalePrice!=null){
            whereSql.append("and salePrice <").append(maxSalePrice);
        }
        return whereSql.toString();
    }
    */

    /**
     *  第二种方法拼接sql
     * */
    /*
    public String getWhereSql(){
        StringBuffer whereSql = new StringBuffer(); 
        if(productName!=null && !"".equals(productName)){
            whereSql.append("and productName like '%").append(productName).append("%'");
        }
        if(minSalePrice!=null){
            whereSql.append("and salePrice >").append(minSalePrice);
        }
        if(maxSalePrice!=null){
            whereSql.append("and salePrice <").append(maxSalePrice);
        }
        //String replaceFirst(String replaceFirst,String replaceMent) 将第一个替换成你想要的 将and替换成where
        return whereSql.toString().replaceFirst("and", "where");
    }
    */
}

ProductMapper.xml配置文件:


                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值