Mybatis(动态sql)

这里写了一个带条件的动态模糊查询,大家首先联想的是不是当这个查询为空得判断是否为空?用if标签来判断

select a.id,
           a.billcode,
           a.productname,
           a.totalprice,
           a.ispayment,
           a.creationdate,
           b.proname
             from smbms_bill a
            inner join smbms_provider b on a.providerid = b.id

      where 1=1

    注意:这里不能写为null

and     a.productname  like  '%${qname}%'

   注意:这里的请选择指的JSP动态页面中下拉框的选项 value="请选择"

and     b.proname=#{qid}

and  a.ispayment=#{ispay}

if标签表示判断,如果符合条件,则执行条件内容

这里的qname,qid,ispay是通过接口中的方法用Hashmap集合存的  

HashMap map=new HashMap();

我们只知道键是String类型,并不知道值是什么类型。所以定义一个Object

然后servlet中存的map.put("qname", "%"+queryProductName+"%");
                    //map.put("qname", queryProductName);
                      map.put("qid", queryProviderId);
                      map.put("ispay",queryIsPayment );

然后用where+if标签代替

where标签,表示条件的连接符.如果判断条件都不成立的时候,自动把where关键字去掉

如果成立的时候,会自动的把where 关键字后面的and连接符去掉

然后在利用trim标签代替

trim表示去掉多余的指定的字符,prefix表示前缀,suffix表示后缀,suffixOverrides去除字段之后的指定字符

      prefixOverrides去除字段之前的指定字符

set标签 ,选择性修改。


        update smbms_bill
        
            
            billcode=#{billcode},
            

            
                   productname=#{productname},
            

             
                productunit=#{productunit},
            

            
            productcount=#{productcount},
            

            
            totalprice=#{totalprice},
            

            
            ispayment=#{ispayment}
            

        

    

Foreach标签,适用于批量查询和批量删除  (查询与删除同理)

注意:使用foreach,接口的参数类型有两种,第一种是list集合,第二种是数组array类型。

这里使用的是第二种数组List  getAllUserInfoByForeach(String[] str);//批量查询 

然后在使用另一种list集合

//批量查询

   public List selectProdcutByForeach(List pList);

   <select id="selectProdcutByForeach" parameterType="java.util.List" resultType="product">

      select

        <include refid="basesql"/>

      from product

      <where>

        id in

        <foreach collection="list" open="(" item="aid" separator="," close=")">

           #{aid}

        foreach>

      where>

   select>

 

Choose标签(不建议使用)

Choose+when+otherwise联合使用

当有一个when条件成立的时候则执行,那么之后的when条件不管成立与否均不在执行

      当所有的when条件都不成立的时候,则执行otherwise条件

<select id="selectProductBySearchdong" parameterType="product" resultType="product">

      select

        <include refid="basesql"/>

      from product

   <where>

      <choose>

        <when test="price>0">

           and price=#{price}

        when>

        <when test="name!=null">

           or name like '%${name}%'

        when>

        <otherwise>

           and description=#{description}

        otherwise>

      choose>

   where>

   select>

 

 

 

你可能感兴趣的:(Mybatis,Mybatis)