MyBatis 批量操作
来源:互联网 发布:金丝绒连衣裙新款淘宝 编辑:程序博客网 时间:2024/06/03 18:58
我们在做项目的时候经常会对数据批量的增删改查,有的时候还在城程序中使用for循环进行操作,这种方法并没有错但是性能稍微低了一点。直接在.xml中进行批量的操作相对于在程序中进行循环性能稍好一些,下面就简单介绍一下MyBatis中的批量操作:
一、批量添加
<insert id="addRecordDetails" parameterType="java.util.List"> INSERT INTO star_test_record_details (id, details_create_time, details_modify_time, paper_id, question_id, user_id, answer_key, answer_results, question_score, records_id) VALUE <foreach collection="list" item="item" index="index" separator=","> ( #{item.id,jdbcType=VARCHAR}, #{item.detailsCreateTime,jdbcType=VARCHAR}, #{item.detailsModifyTime,jdbcType=VARCHAR}, #{item.paperId,jdbcType=VARCHAR}, #{item.questionId,jdbcType=VARCHAR}, #{item.userId,jdbcType=VARCHAR}, #{item.answerKey,jdbcType=VARCHAR}, #{item.answerResults,jdbcType=VARCHAR}, #{item.questionScore,jdbcType=VARCHAR}, #{item.recordsId,jdbcType=VARCHAR}) </foreach> </insert>
注意:上面传入的list集合中的每个元素都是一个对象,所以item代表的是集合中的每个元素只不过元素的类型为对象,插入数据库时要获得对象中的每个元素item.xxx(xxx要和对象中的属性保持一致)
二、批量删除
<delete id="deleteByIdList" parameterType="java.util.List"> DELETE FROM star_test_questions WHERE id IN <foreach collection="list" index="index" item="item" open="(" separator="," close=")"> #{item,jdbcType=VARCHAR} </foreach> </delete>
注意:上面传入集合的类型为String类型所以这里的item代表集合中的每个元素,元素的类型为String
三、批量修改
<update id="updateByIdList" parameterType="java.util.List"> UPDATE star_test_questions SET question_state = 1 WHERE id IN <foreach collection="list" index="index" item="item" open="(" separator="," close=")"> #{item,jdbcType=VARCHAR} </foreach> </update>
四、批量查询(可以使用在多表查询中)
<select id="selectQuestionAndOption" parameterType="java.util.List" resultMap="questionAndOptionMap"> SELECT que.id as qid, que.question_content, que.paper_type, que.question_answer, que.question_points, op.id as oid ,op.question_id, op.option_content FROM star_test_questions que ,star_test_option op WHERE que.id IN <foreach collection="list" index="index" item="item" open="(" separator="," close=")"> #{item,jdbcType=VARCHAR} </foreach> AND op.question_id = que.id AND que.paper_type = 0 </select> <resultMap id="questionAndOptionMap" type="cn.demo.model.StartTestQuestion"> <id column="qid" jdbcType="VARCHAR" property="id" /> <result column="question_content" jdbcType="VARCHAR" property="questionContent" /> <result column="paper_type" jdbcType="VARCHAR" property="paperType" /> <result column="question_answer" jdbcType="VARCHAR" property="questionAnswer" /> <result column="question_points" jdbcType="VARCHAR" property="questionPoints" /> <result column="question_order" jdbcType="VARCHAR" property="questionOrder" /> <collection property="startTestOptionList" ofType="cn.demo.model.StartTestOption"> <id column="oid" jdbcType="VARCHAR" property="id" /> <result column="question_id" jdbcType="VARCHAR" property="questionId" /> <result column="option_content" jdbcType="VARCHAR" property="optionContent" /> </collection> </resultMap>
最后对foreach元素属性进行说明:
item:表示集合中每个元素进行迭代的时的别名
index:指定一个名字,用于表示在迭代的过程中每次迭代到的位置
open:表示该语句以什么开始
separator:表示在每次进行迭代之间以什么符号作为分隔 符,
close:表示以什么结束
collection:表示传入集合的参数类型,在不同的情况下该属性值是不同的,一般分为以下三种情况:
1)如果传入的参数是单参数且参数类型是一个list时,collection为list(上面的都是这种类型)
2)如果传入的是单参数且参数的类型为array数组时collection为array
例如:
<delete id="deleteByArray" parameterType="java.util.ArrayList"> DELETE FROM star_test_questions WHERE id IN <foreach collection="array" index="index" item="item" open="(" separator="," close=")"> #{item,jdbcType=VARCHAR} </foreach> </delete>
此时我传入的参数是下面这样的
String[] ids = new String[] {"1","2","3"};
3) 如果传入的参数是多个封装成map,例如:
<select id="selectByMap" parameterType="java.util.HashMap" resultType="java.lang.String"> SELECT question_content FROM star_test_questions WHERE question_state = #{questionState,jdbcType=VARCHAR} AND id IN <foreach collection="idList" item="item" index="index" open="(" separator="," close=")"> #{item,jdbcType=VARCHAR} </foreach>
此时我传入的参数是这样的:
Map paraMap = new HashMap();paraMap.put("questionState","1");//questionIdList是一个String类型的集合paraMap.put("idList",questionIdList);
注意:参数名和map中的key值保持一致。
阅读全文
0 0
- MyBatis批量操作
- mybatis 批量操作
- Mybatis foreach 批量操作
- mybatis批量操作
- Mybatis批量操作
- mybatis 批量操作
- mybatis 批量的操作
- Mybatis 批量操作
- Mybatis批量操作写法
- mybatis批量操作
- mybatis批量操作
- mybatis批量操作
- mybatis批量操作
- mybatis批量操作
- MyBatis批量操作_MySql
- MyBatis批量操作_ORACLE
- MyBatis批量操作整合
- Mybatis foreach 批量操作
- 从0开始学Python--0x01. Python安装
- unity-ugui的text字体模糊解决办法
- 最小路径和
- JAVA调用外部程序错误
- Storm之——Kafka+Storm+HDFS整合实战
- MyBatis 批量操作
- Android开发之Intent数据的传递
- C语言实现约瑟夫环
- 如何将自己的代码上传到GitHub托管
- (算法分析Week9)Regular Expression Matching[Hard]
- 操作系统概念第6章题目
- 老码农看到的技术债务
- 递归练习
- Android自定义控件6----继承ViewGroup自定义侧滑菜单