ibatis实现Iterate的使用

2024-03-02 22:48
文章标签 实现 使用 ibatis iterate

本文主要是介绍ibatis实现Iterate的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

<iterate  

 

    property="" /*可选,   

 

        从传入的参数集合中使用属性名去获取值,   


        这个必须是一个List类型,   


        否则会出现OutofRangeException,   


        通常是参数使用java.util.Map时才使用,   


        如果传入的参数本身是一个java.util.List, 不能只用这个属性.  

 

        不知道为啥官网: http://ibatis.apache.org/docs/dotnet/datamapper/ch03s09.html#id386679  

 

        说这个属性是必须的, 但是测试的时候是可以不设置这个属性的, 还望那位大虾知道, 讲解一下.  

 

        */  

 

    conjunction="" /*可选,   

 

        iterate可以看作是一个循环,   

 

        这个属性指定每一次循环结束后添加的符号,   

 

         比如使每次循环是OR的, 则设置这个属性为OR*/  

 

    open="" /*可选, 循环的开始符号*/  

 

    close="" /*可选, 循环的结束符号*/  

 

    prepend="" /*可选, 加在open指定的符号之前的符号*/  

 

>

 

</iterate> 

<!-- 批量删除对象的时候,iterate不要property属性 -->

<delete id="delStudybook" parameterClass="java.util.List">

 delete FROM STUDYBOOK WHERE ID IN

 <iterate conjunction="," open="(" close=")">

  #bookList[]#

 </iterate>

</delete>

注意要property的错误

Caused by: com.ibatis.common.beans.ProbeException: Error getting ordinal list from JavaBean. Cause java.lang.StringIndexOutOfBoundsException: String index out of range: -1

//另外:如果parameterClass="java.util.List"类型不匹配的话

报错Caused by: java.sql.SQLException: Invalid parameter object type.  Expected 'java.util.Map' but found 'java.util.ArrayList'.

===============================

<!--批量修改对象,iterate必须包括property属性-->

<update id="updateUsersIterate" parameterClass="java.util.Map">

 update users set user_name=#userInfo.user_name# where user_id in

 <iterate property="list" conjunction="," open="(" close=")">

  #list[]#

 </iterate>

</update>

注意不要property属性的错误

Cause: com.ibatis.sqlmap.client.SqlMapException: ParameterObject or property was not a Collection, Array or Iterator.

===============================

 

<!-- Iterate的使用,根据多个匹配条件查询,类似in(a,b,c)-->

<select id="selectByIterate" parameterClass="java.util.List" resultClass="user">

 SELECT * FROM USERS WHERE USER_ID IN

 <iterate conjunction="," open="(" close=")">

  #ids[]#

 </iterate>

</select>

注意:不要property属性,否则报错。String index out of range: -1

        2. 但是,若参数有多个传入的一个是List,另一个不是, parameterClass为map时,需要property属性区分要遍历的  集合。

=================================================

 

<!--批量增加对象-->

<insert id="BarkInsertUsers" parameterClass="java.util.List">

 insert all

 <iterate conjunction="">

 into users(user_id,user_name,password,address,telephone,email,create_date)

 values(#list[].user_id#,#list[].user_name#,#list[].password#,

 #list[].address#,#list[].telephone#,#list[].email#,#list[].create_date#)

 </iterate>

 <!--必须要加上 -->

  select * from dual

</insert>

 

注意:本打算使主键实现自动增长,但是使用了hibernate_sequence.NEXTVAL,报错

违反唯一约束条件 (SCOTT.SYS_C0010057),请高手指点下。

==================================================

 

测试上边的配置SQL语句。

 

 //删除书籍的信息

 public int deleteStudyBook(List<Integer> bookList){

 

        try {

return this.client.delete("delStudybook",bookList);

} catch (SQLException e) {

e.printStackTrace();

return 0;

}

 }

 



 //修改用户的信息

 public int updateUsers(Map<String,Object> map){

        try {

return this.client.delete("updateUsersIterate",map);

} catch (SQLException e) {

e.printStackTrace();

return 0;

 }

 

 

//使用Iterate实现批量插入数据

 public void barkInsert(List<Users> list){

 try {

this.client.insert("BarkInsertUsers",list);

} catch (SQLException e) {

e.printStackTrace();

}

 }

 

=========================

 

//测试iterate实现类似in的功能查询

public void queryByIterate(List<Integer> ids){

try {

List<Users> list=this.client.queryForList("selectByIterate",ids);

for (Users user : list) {

System.out.println("user====I"+user.toString());

}

} catch (Exception e) {

e.printStackTrace();

}

}

=========================

Test测试类中的测试过程


//测试的删除

List<Integer> list=new ArrayList<Integer>();

list.add(1);

list.add(2);

//删除书籍

dao.deleteStudyBook(list);

----------------------------------------------------


//测试修改用户信息

Map<String,Object> map=new HashMap<String,Object>();

//设置修改的字段

Users user=new Users();

user.setUser_name("aaaaaaaaaaaaaaaaa");

List<Integer> list1=new ArrayList<Integer>();

list1.add(1);

list1.add(2);

map.put("userInfo",user);

map.put("list",list1);

dao.updateUsers(map);

----------------------------------------------------------

             //测试查询的方法

 

     List<Integer> list=new ArrayList<Integer>();

list.add(1);

list.add(2);

dao.queryByIterate(list);

---------------------------------------------------------

 

 

          //测试批量插入记录

List<Users> userList=new ArrayList<Users>();

//方式一:不适用自动增长列(id设置值:#list[].user_id#)

Users user1=new Users(10,"bbbb","bbbb","bbbb","bbbb","bbbb","bbbb");

Users user2=new Users(11,"cccc","cccc","cccc","cccc","cccc","cccc");

dao.barkInsert(userList);

这篇关于ibatis实现Iterate的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/767674

相关文章

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

C#高效实现Word文档内容查找与替换的6种方法

《C#高效实现Word文档内容查找与替换的6种方法》在日常文档处理工作中,尤其是面对大型Word文档时,手动查找、替换文本往往既耗时又容易出错,本文整理了C#查找与替换Word内容的6种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图

Python如何实现高效的文件/目录比较

《Python如何实现高效的文件/目录比较》在系统维护、数据同步或版本控制场景中,我们经常需要比较两个目录的差异,本文将分享一下如何用Python实现高效的文件/目录比较,并灵活处理排除规则,希望对大... 目录案例一:基础目录比较与排除实现案例二:高性能大文件比较案例三:跨平台路径处理案例四:可视化差异报

python之uv使用详解

《python之uv使用详解》文章介绍uv在Ubuntu上用于Python项目管理,涵盖安装、初始化、依赖管理、运行调试及Docker应用,强调CI中使用--locked确保依赖一致性... 目录安装与更新standalonepip 安装创建php以及初始化项目依赖管理uv run直接在命令行运行pytho

Java整合Protocol Buffers实现高效数据序列化实践

《Java整合ProtocolBuffers实现高效数据序列化实践》ProtocolBuffers是Google开发的一种语言中立、平台中立、可扩展的结构化数据序列化机制,类似于XML但更小、更快... 目录一、Protocol Buffers简介1.1 什么是Protocol Buffers1.2 Pro

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

Java实现本地缓存的四种方法实现与对比

《Java实现本地缓存的四种方法实现与对比》本地缓存的优点就是速度非常快,没有网络消耗,本地缓存比如caffine,guavacache这些都是比较常用的,下面我们来看看这四种缓存的具体实现吧... 目录1、HashMap2、Guava Cache3、Caffeine4、Encache本地缓存比如 caff

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

Kotlin 枚举类使用举例

《Kotlin枚举类使用举例》枚举类(EnumClasses)是Kotlin中用于定义固定集合值的特殊类,它表示一组命名的常量,每个枚举常量都是该类的单例实例,接下来通过本文给大家介绍Kotl... 目录一、编程枚举类核心概念二、基础语法与特性1. 基本定义2. 带参数的枚举3. 实现接口4. 内置属性三、