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

http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。
foreach元素的属性主要有 item,index,collection,open,separator,close。
    item表示集合中每一个元素进行迭代时的别名,
    index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,
    open表示该语句以什么开始,
    separator表示在每次进行迭代之间以什么符号作为分隔符,
    close表示以什么结束。

foreach使用collection属性有三种情况:

1. 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
2. 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
3. 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,会把它封装成一个Map的, map的key就是参数名 ,所以这个时候collection属性值 就是传入的List或array对象 在自己封装的map里面的key 。

 //可变数组
    public List<Userinfos> getUserArray(Integer...rids);
   //list
    public List<Userinfos> getUserArrayList(List<Integer> rids);
    //Map
    public List<Userinfos> getUserArrayMap(Map<String,Object> rids);

1.单参数 array数组的类型

    <!--array-->
    <select id="getUserArray" resultType="Userinfos">
         select * from userinfos  where userRole in
         <foreach collection="array" item="rids"  open="(" separator="," close=")">
                #{rids}
         </foreach>
    </select>

2.单参数 List的类型

 <!--list-->
    <select id="getUserArrayList" resultType="Userinfos">
        select * from userinfos  where userRole in
        <foreach collection="list" item="rids"  open="(" separator="," close=")">
            #{rids}
        </foreach>
    </select>

3.自己把参数封装成Map的类型

<!--collection的值为ids,是传入的参数Map的key map.put("inss",inss); <select id="getUserArrayMap" resultType="Userinfos"> select * from userinfos where userRole in <foreach collection="inss" item="rids" open="(" separator="," close=")"> #{rids} </foreach> </select>
 private static void all3() {
        SqlSession session = MyBatisUtil.createSession();
        //获得mapper接口
        UsersMapper mapper = session.getMapper(UsersMapper.class);
        //调用方法
        List<Userinfos> list = null;
        try {
            //array
//            list = mapper.getUserArray(1,2);
            //list
//             List<Integer> ins =Arrays.asList(1,3);
//             list = mapper.getUserArrayList(ins);
            //map
            Map<String,Object> map =new HashMap<>();
            //注意是个集合哦!
            List<Integer> inss = Arrays.asList(1,2);
            //map中存放的Value是集合
            map.put("inss",inss);
            list = mapper.getUserArrayMap(map);
            for (Userinfos user : list
                System.out.println(user);
            MyBatisUtil.closeSession(session);
        } catch (Exception e) {
            e.printStackTrace();
                    http://www.mybatis.org/mybatis-3/zh/dynamic-sql.htmlforeach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach元素的属性主要有 item,index,collection,open,separator,close。    item表示集合中每一个元素进行迭代时的别名,    index指定一个名字...
首先定位问题,通过查找日志找到这部分内容
### Error querying database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near 'IN'.
### The error may exist in com/qiyuesuo/org/role/relation/RoleRelationDao.xml
### T
Author:kak
         MySql动态语句foreach,当传入参数为数组或者集合时需要通过foreach标签进行遍历,其主要是在in条件中,可以在SQL语句中迭代一个集合;
<foreach collection="dto.orderStatusList" item="item" index="index" open="("
传入集合
使用场景
在实际开发过程中,我们往往需要编写复杂的SQL语句,拼接稍有不注意就会导致错误,Mybatis给开发者提供了动态SQL,大大降低了拼接SQL导致的错误。
动态标签
if标签通常用那个胡where语句,update语句,insert语句中,通过判断参数值来决定是否使用某个查询条件,判断是否更新某一个字段或插入某个字段
				
mybatis使用foreach遍历空list空指针,笨法子解决 今天在使用foreach遍历list时,因为需要在list中追加数据,先是实例化一个arrayList(),然后在while循环里查找数据,向arrayList()中插入数据,当查到10条数据后,退出循环。大概是下面这样 List&lt;Map&lt;String, Object&gt;&gt; result = new Array...
MyBatis动态SQLforeach标签用于对集合进行遍历,常见的使用场景是构建IN条件语句。通过将要遍历集合传入collection属性,可以在foreach标签内部使用item和index来引用集合中的元素和索引。可以使用open、separator和close属性来指定循环体的开头、分隔符和结尾。其中,open属性用于指定循环体的开头,separator属性用于指定循环体中元素之间的分隔符,close属性用于指定循环体的结尾。在循环体内部,可以使用#{item}来引用集合中的元素。 举个例子,如果我们有一个名为list的集合,我们可以使用foreach标签来构建一个IN条件的SQL语句: SELECT * FROM table_name WHERE column_name IN <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item} </foreach> 这样,MyBatis会自动将集合中的元素逐个替换到SQL语句中,生成相应的查询语句。 Spring Boot运行发生异常:Factory method 'dataSource' threw exception; nested exception is org.springframe 51525 Spring+Mybatis 查询所有数据时发生异常:org.apache.ibatis.reflection.ReflectionException: There is no getter for 36064 Python 运行selenium发生异常: session not created: This version of ChromeDriver only supports Chrome versio 王权霸业s: https://googlechromelabs.github.io/chrome-for-testing/#stable这个网页有 Java 华为真题-选修课 imyiligege: 代码排序有个小bug Collections.sort(list, new Comparator<Students>() { @Override public int compare(Students o1, Students o2) { //先按成绩之和降序 int i = o2.getScore() - o1.getScore(); if (i != 0){ return i; //成绩相同,按学号升序 return Integer.valueOf(o1.getNo()) - Integer.valueOf(o2.getNo()); Python 运行selenium发生异常: session not created: This version of ChromeDriver only supports Chrome versio zhouyn1102: 版本114以上的没有咋办呀 Python 模块手动制作发布压缩包_安装 qq_45825460: 在解压后文件执行安装命令出现这个 packagetest1-1.0>python setup.py install C:\Python\lib\site-packages\setuptools\command\install.py:37: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools. setuptools.SetuptoolsDeprecationWarning, C:\Python\lib\site-packages\setuptools\command\easy_install.py:147: EasyInstallDeprecationWarning: easy_install command is deprecated. Use build and pip and other standards-based tools. EasyInstallDeprecationWarning, zip_safe flag not set; analyzing archive contents... Python 模块手动制作发布压缩包_安装 qq_45825460: >>>python setup.py sdist warning: sdist: standard file not found: should have one of README, README.rst, README.txt, README.md