添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

foreach 通俗讲解,就是循环,既然是循环又想和 mysql 扯上一点点关系。那么就只能运用到 sql语句 in 条件中。

foreach各种属性

属性 含义
item 集合中每一个元素进行迭代时的别名
index 指定一个名称,用于表示迭代过程中,每次迭代到的位置
collection 指定入参的集合是什么类型
array、list、Map类型的键(key)
separator 每次迭代之间以什么符号作为分隔符
close 该语句以什么结束
open 该语句以什么开始

foreach迭代数组类型的入参

	<select id="selectUserArray" resultType="domain.User">
        select * from shop where id in
        <foreach collection="array" item="a" open="(" separator="," close=")">
        </foreach>
    </select>

foreach迭代List类型的入参

	<select id="selectUserList" resultType="domain.User">
        select * from shop where id in
        <foreach collection="list" item="a" open="(" separator="," close=")">
        </foreach>
    </select>

foreach迭代Map类型的入参

	<select id="selectUserMap" resultType="domain.User">
        select * from shop where id in
        <foreach collection="id" item="a" open="(" separator="," close=")">
        </foreach>
    </select>

总结上述collection三种类型入参

  1. MyBatis接受的参数类型:基本类型、对象、List、数组、Map
  2. 无论MyBatis的入参是哪种参数类型,MyBatis都会将参数放在一个Map中,对于单参数入参的情况:
    1. 若入参为基本类型:变量名作为key,变量值作为value,此时生成的Map只有一个元素。
    2. 若入参为对象:变量名作为key,变量值作为value,此时生成的Map只有一个元素。
    3. 若入参为List:默认list作为key,该List即为value
    4. 若入参为数组:默认array作为key,该数组即为value
    5. 若入参为Map:键值不变

choose(when、otherwise)多条件查询

  该标签与java中switch语句非常类型。
  choose 等同于 switch
  when 等同于 case
  otherwise 等同于 default
  因此,用法也是一样的。多条件查询,这么多条件只能选择一个,如果上述所有条件(when)都不满足,默认使用otherwise条件。

具体xml编写如下:

	<select id="selectUserChoose" resultType="domain.User">
        select * from shop
        <where>
            <choose>
                <when test="num != null and num != ''">
                    and num = #{num}
                </when>
                <when test="price != 0">
                    and price = #{price}
                </when>
                <when test="Date != null">
                    and Date = #{Date}
                </when>
                <otherwise>
                    1 = 1
                </otherwise>
            </choose>
        </where>
    </select>
                    使用场景  foreach通俗讲解,就是循环,既然是循环又想和mysql扯上一点点关系。那么就只能运用到sql语句的 in条件中。foreach各种属性属性含义item集合中每一个元素进行迭代时的别名index指定一个名称,用于表示迭代过程中,每次迭代到的位置collection指定入参的集合是什么类型array、list、Map类型的键(key)separator每次迭代之间以什么符号作为分隔符close该语句以什么结束open该语句以什
				
SQL语句拼接 在前面的配置中,无论是基本的增删查改,还是关联嵌套,集合嵌套查询使用SQL语句都是很基础的,表关系之间的数据操作。翻回自己大一时写的代码,从一开始的SQL语句直接拼接,如: String sql = "Update user Set username = " + username + ", gender = " + gender + " Where id = " + id;...
foreach 作用是对一个集合进行遍历,通常是在构建 IN 条件语句的时候。 foreach 元素的功能是非常强大的,它允许你指定一个集合,声明可以用在元素体内的集合项和索引变量。它也允许你指定开闭匹配的字符串以及在迭代中间放置分隔符。这个元素是很智能的,因此它不会偶然地附加多余的分隔符。 注意 你可以将一个 List 实例或者数组作为参数对象传给 MyBatis,当你这么做的时候,MyBa...
SELECT * FROM PR_T_USER_PUNCH_CARD_DETAILS PUPCD LEFT JOIN PR_T_USER_PUNCH_CARD PUPC ON PUPC.ID = PUPCD.UPC_ID WHERE PUPCD.UPC_ID IN <foreach item="split" index="index" col...
动态SQL if和where标签在Mybatis中的语法 如果我们需要拼接where条件,又不希望客户端传递的错误信息,需要更加智能的where标签如果有后面的语句,就自动添加where,并且如果后面的语句开头是and or 它可以自动去掉 <where> <if test=" "> 判断的内容 </if&...
Map&lt;String, Object&gt; searchMap = new HashMap&lt;&gt;(); searchMap.put("borrowId", borrowId); List&lt;String&gt; stateList = new ArrayList&lt;&gt;();...
public class EquipmentDto extends PageDTO { private String keyWord; private Long departmentId; private List departmentIds; public String getKeyWord() { return keyWord; public void setKeyWord(String ...
Foreach是一种在SQL语句中迭代一个集合的方法,通常用于构建in条件。它可以帮助我们处理一些需要迭代条件集合来生成SQL语句的情况。通过使用foreach标签,我可以在SQL语句中迭代一个集合,并将集合中的每个元素作为条件的一部分来生成查询结果。 在具体的实现中,可以使用left join的方式将前两个表进行关联查询,并通过foreach语句迭代第三个表中的内容。这样可以确保查询结果包含了所有关联条件满足的数据。 需要注意的是,在使用foreach时,如果数据量过大,可能会导致查询速度变慢甚至崩溃。因此,在处理大数据量的情况下,可以考虑优化查询语句或者采用其他更适合的查询方法以提高性能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [php优化foreach中的sql查询](https://blog.csdn.net/admin_web/article/details/125554030)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Mybatis动态SQL使用foreach完成复杂查询](https://blog.csdn.net/weixin_40003767/article/details/114606229)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]