映射中iterate标签的使用

由于iterate标签的property属性的值必须为java.util.List,所有如果需要传递的参数类型为List型时,需要再包装一层后再传递给映射文件。

应用例子如下:

在映射文件中添加一个映射,如下:

  

调用中如下:

通过调试,得到了SQL语句如下:

通过以上实例,可以看出iterate标签各个属性的作用,其中prepend属性可以为任意字符,组合成SQL语句时,替换到所处的位置就行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`iterate_shared()` 函数是 Linux 文件系统的一个遍历目录项的函数,它的作用是遍历一个目录下所有的目录项。具体实现如下: ```c int iterate_shared(struct file *file, struct dir_context *ctx) { struct inode *inode = file_inode(file); struct super_block *sb = inode->i_sb; struct dentry *parent = file->f_path.dentry; struct dentry *dentry, *prev; int err = 0; spin_lock(&parent->d_lock); dentry = parent->d_subdirs; if (dentry) dget(dentry); spin_unlock(&parent->d_lock); while (dentry) { if (ctx->pos >= ctx->count) break; if (!dentry->d_inode) continue; if (dentry->d_name.len == 1 && dentry->d_name.name[0] == '.') goto next; if (dentry->d_name.len == 2 && dentry->d_name.name[0] == '.' && dentry->d_name.name[1] == '.') goto next; prev = ctx->pos; err = dir_emit(ctx, dentry->d_name.name, dentry->d_name.len, dentry->d_inode->i_ino, dentry->d_inode->i_mode); if (err) break; if (ctx->pos != prev) { spin_lock(&dentry->d_lock); if (d_unhashed(dentry)) { spin_unlock(&dentry->d_lock); goto next; } if (dentry->d_inode) inotify_inode_queue_event(dentry, IN_ACCESS, 0); spin_unlock(&dentry->d_lock); } next: spin_lock(&parent->d_lock); dentry = dentry->d_u.d_child.d_next; if (dentry) dget(dentry); spin_unlock(&prev->d_lock); dput(prev); } if (dentry) { spin_lock(&parent->d_lock); dput(dentry); spin_unlock(&parent->d_lock); } return err; } ``` 该函数有两个参数,第一个参数是一个 `file` 结构体,代表要遍历的目录文件。第二个参数是一个 `dir_context` 结构体,包含了遍历过程需要的一些信息,如遍历到的目录项数量、目录项的位置等。 函数的主要实现是通过遍历目录项链表,获取每个目录项的名称和 inode 号,并将这些信息传递给回调函数 `dir_emit()`,由回调函数进行处理。在遍历过程,会跳过当前目录和上级目录,同时会对每个目录项进行一些额外的处理,如判断目录项是否已经被卸载、是否需要发送事件通知等。 最后,该函数会返回一个错误码,表示遍历过程是否出现了错误,如内存分配失败、回调函数返回错误等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值