mybatis-sql实战总结

时间:2024-07-20 19:31:43

mybatis-sql实战总结

  • 动态条件查询
  • 怎么List遍历集合进行拼接?

动态条件查询

动态条件查询总结
注意点:
1.可以用where 1=1 也可以用 防止出现后面没有条件的情况
2.模糊查询用concat拼接
A.SSTRING10 like concat(#{adAccEntrie.sstring10},‘%’)
3. 对于前端传来的日期参数,使用STR_TO_DATE来转为统一的格式
STR_TO_DATE( #{adAccEntrie.date01}, ‘%Y-%m-%d’)

4.对于String类型的字段,不但要判断是不是null,还要判断是不是空字符串””.
对于集合类型的字段,如List,不但要判断是不是null,还需要判断是不是空的集合,用size判断就行。
对于Date类型的字段,只需要判断是不是null就行了。

//String类型怎么判断拼接
<if test="adAccEntrie.sstring08 != null and adAccEntrie.sstring08 != ''">
                AND A.SSTRING08 = #{adAccEntrie.sstring08}<!--来源系统-->
</if>
//集合类型字段判断怎么拼接                   
<if test="ids != null and ids.size() > 0">
  AND ID IN
  <foreach collection="ids" item="id" open="(" close=")" separator=",">
    #{id}
  </foreach>
</if>
//Date类型字段判断怎么拼接
<if test="adAccEntrie.date01 != null and adAccEntrie.date02  != null">
                AND A.DATE01 BETWEEN STR_TO_DATE( #{adAccEntrie.date01}, '%Y-%m-%d') AND STR_TO_DATE( #{adAccEntrie.date02}, '%Y-%m-%d' )<!--记账日期-->
            </if>

5.如果只查一个表 select *就足够了,但是如果有多个表select A.*就能查出指定表的所有字段了。

<!--    账户明细查询-->
    <select id="getAccEntrieListByParam" resultMap="AdAccEntrieMap">
        SELECT A.*
        FROM Ad_Acc_Entrie A
        <where>
            <if test="adAccEntrie.sstring08 != null and adAccEntrie.sstring08 != ''">
                AND A.SSTRING08 = #{adAccEntrie.sstring08}<!--来源系统-->
            </if>
            <if test="adAccEntrie.date01 != null and adAccEntrie.date02  != null">
                AND A.DATE01 BETWEEN STR_TO_DATE( #{adAccEntrie.date01}, '%Y-%m-%d') AND STR_TO_DATE( #{adAccEntrie.date02}, '%Y-%m-%d' )<!--记账日期-->
            </if>
            <if test="adAccEntrie.sstring01 != null and adAccEntrie.sstring01 != ''">
                AND A.SSTRING01 = #{adAccEntrie.sstring01}<!--借贷标识-->
            </if>
            <if test="adAccEntrie.mstring11 != null and adAccEntrie.mstring11 != ''">
                AND A.MSTRING11 = #{adAccEntrie.mstring11}<!--管理机构-->
            </if>
            <if test="adAccEntrie.sstring10 != null and adAccEntrie.sstring10 !=''">
                AND A.SSTRING10 like concat(#{adAccEntrie.sstring10},'%')<!--业务项目类型-->
            </if>
            <if test="adAccEntrie.lstring01 != null and adAccEntrie.lstring01 !=''">
                AND A.LSTRING01 like concat(#{adAccEntrie.lstring01},'%')<!--凭证类别-->
            </if>
            <if test="adAccEntrie.mstring07 != null and adAccEntrie.mstring07 != ''">
                AND A.MSTRING07 = #{adAccEntrie.mstring07}<!--业务号码-->
            </if>
            <if test="adAccEntrie.sstring17 != null and adAccEntrie.sstring17 != ''">
                AND A.SSTRING17 = #{adAccEntrie.sstring17}<!--业务场景编码-->
            </if>
            <if test="adAccEntrie.mstring02 != null and adAccEntrie.mstring02 != ''">
                AND A.MSTRING02 = #{adAccEntrie.mstring02}<!--科目代码-->
            </if>
        </where>

        limit #{ph.page},#{ph.rows}
        
    </select>

怎么List遍历集合进行拼接?

最终会拼接成 (元素1,元素2,元素3,元素4,元素5,…,元素n)

<if test="ids != null and ids.size() > 0">
  AND ID IN
  <foreach collection="ids" item="id" open="(" close=")" separator=",">
    #{id}
  </foreach>
</if>