MySQL数据库 
批量操作主要使用的是Mybatis的foreach,遍历参数列表执行相应的操作,所以批量插入/更新/删除的写法是类似的,只是SQL略有区别而已。MySql批量操作需要数据库连接配置allowMultiQueries=true才可以。

(0)批量查询:

 <select id="selectUserDataList" parameterType="list" resultType="String">
select userData from tbl_hbb_user_info where mobile in (
<foreach collection="list" item="item" index="index"
separator=",">
#{item.mobile}
</foreach>
)
</select>

(1)批量插入

<insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true">
<foreach close="" collection="list" index="index" item="item" open="" separator=";">
insert into user (name, age,dept_code) values
(#{item.name,jdbcType=VARCHAR},
#{item.age,jdbcType=INTEGER},
#{item.deptCode,jdbcType=VARCHAR}
)
</foreach>
</insert>

上面演示的是MySql的写法(表主键自增的写法),因为MySql支持主键自增,所以直接设置useGeneratedKeys=true,即可在插入数据时自动实现主键自增;不需要自增时就不需要设置useGeneratedKeys,而且插入SQL包含所有字段即可。实际Mysql还有另外一种写法,就是拼接values的写法,这种方法我测试过比多条insert语句执行的效率会高些。不过需要注意一次批量操作的数量做一定的限制。具体写法如下:

<insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true">
insert into user (name, age,dept_code) values
<foreach collection="list" index="index" item="item" open="" close="" separator=",">
(#{item.name,jdbcType=VARCHAR},
#{item.age,jdbcType=INTEGER},
#{item.deptCode,jdbcType=VARCHAR}
)
</foreach>
</insert>

对于Oracle不支持主键自增,需要序列替换,所以在SQL写法上略有不同,需要在insert语句前加个
<selectKey>...</selectKey>告知Mybatis主键如何生成(selectKey中间的内容有省略,实际是生成主键的SQL)。

(2)批量更新

<update id="batchUpdate" parameterType="java.util.List">
<foreach close="" collection="list" index="index" item="item" open="" separator=";">
update user set name=#{item.name,jdbcType=VARCHAR},age=#{item.age,jdbcType=INTEGER}
where id=#{item.id,jdbcType=INTEGER}
</foreach>
</update>

(3)批量删除

<delete id="batchDelete" parameterType="java.util.List">
<foreach close="" collection="list" index="index" item="item" open="" separator=";">
delete from user
where id=#{item.id,jdbcType=INTEGER}
</foreach>
</delete>

二、模糊查询

<select id="selectLikeName" parameterType="java.lang.String" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from user
where name like CONCAT('%',#{name},'%' )
</select>

上面的模糊查询语句是Mysql数据库的写法示例,用到了Mysql的字符串拼接函数CONCAT,其它数据库使用相应的函数即可。

三、多条件查询

多条件查询常用到Mybatis的if判断,这样只有条件满足时,才生成对应的SQL。

<select id="selectUser" parameterType="map" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from user
<where>
<if test="name != null">
name = #{name,jdbcType=VARCHAR}
</if>
<if test="age != null">
and age = #{age,jdbcType=INTEGER}
</if>
</where>
</select>

四、联表查询 
联表查询在返回结果集为多张表的数据时,可以通过继承resultMap,简化写法。例如下面的示例,结果集在User表字段的基础上添加了Dept的部门名称

<resultMap id="ExtResultMap" type="com.research.mybatis.generator.model.UserExt" extends="BaseResultMap">
<result column="name" jdbcType="VARCHAR" property="deptName" />
</resultMap> <select id="selectUserExt" parameterType="map" resultMap="ExtResultMap">
select
u.*, d.name
from user u inner join dept d on u.dept_code = d.code
<where>
<if test="name != null">
u.name = #{name,jdbcType=VARCHAR}
</if>
<if test="age != null">
and u.age = #{age,jdbcType=INTEGER}
</if>
</where>
</select>
<update id="stockDetailOkBatchUpdate" parameterType="map">
<foreach collection="items" index="index" item="item" open="begin" close=";end;" separator=";">
update T_MM_ADD_STOCK_DETAIL t
set
t.REMARK=#{item.remark},
t.modify_time=sysdate,
t.modify_user_code=#{currentUser}
where t.id=#{item.id}
<if test="index==items.size-1">
;
update T_MM_ADD_STOCK t
set
t.modify_time=sysdate,
t.modify_user_code=#{currentUser},
t.remark=#{remark},
t.STORAGE_STATE='待录价'
where t.id=#{mainId}
</if>
</foreach>
</update>

mybatis结合mysql批量操作及查询sql的更多相关文章

  1. Mybatis使用MySQL进行模糊查询时输入中文检索不到结果

    Mybatis使用MySQL进行模糊查询时输入中文检索时,需要在jdbcURL后增加参数   ?useUnicode=true&characterEncoding=UTF-8

  2. MySQL 的分页查询 SQL 语句

    MySQL一般使用 LIMIT 实现分页.基本语句为: SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ... 在中小数据量的情况下,这样的SQL足够 ...

  3. mysql表名查询sql

    select table_schema,table_name,engine from information_schema.tables where table_schema not in('info ...

  4. MySQL锁表查询SQL

    // 查看进程 SHOW PROCESSLIST; // 查看是否锁表 SHOW OPEN TABLES WHERE In_use > 0; // 查看正在锁的事务 SELECT * FROM ...

  5. 使用mybatis从mysql里进行模糊查询的编码问题

    关于这个问题,记录下我的解决方法,希望对有同样困惑的朋友,有所帮助. 问题描述: 我在做mybatis从mysql里模糊查询时,如果模糊的关键词是字母的话,可以查出来.如果模糊的关键词是汉字的话,查不 ...

  6. Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办--转自http://www.jb51.net/article/88236.htm

    这篇文章主要介绍了Mybatis使用MySQL模糊查询时输入中文检索不到结果的解决办法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下   项目开发中,在做Mybatis动态查询时,遇到了 ...

  7. mybatis 多表查询sql

    在使用spring,spring mvc,mybatis时,mybatis链接数据库做多表查询的时候,sql语句中直接使用left join等链接字符就可以 链接多个表,参数类型是parameterT ...

  8. 步步深入:MySQL架构总览->查询执行流程->SQL解析顺序

    前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来 ...

  9. MySQL、Oracle和SQL Server的分页查询语句

    假设当前是第PageNo页,每页有PageSize条记录,现在分别用Mysql.Oracle和SQL Server分页查询student表. 1.Mysql的分页查询: SELECT * FROM s ...

随机推荐

  1. First Wainberg-2018-Deep learning in biomedicine Experience

    ppt+paper 链接:https://pan.baidu.com/s/14toqjcSJti5ZXT3ff4rwIA 提取码:xgkt

  2. FilenameFilter

    Introduction: java.io.FileNameFilter is a interface which is for filtering by filename, if filename ...

  3. JDK8的新特性

  4. 第三方统计分析埋点工具对比,神策、Ptmind、GrowingIO、国双,还有谷歌分析,谁更好?

    第三方统计分析埋点工具对比,神策.Ptmind.GrowingIO.国双,还有谷歌分析,谁更好?https://www.colabug.com/2985393.html GA.Mixpanel 和神策 ...

  5. 在CentOS 6.3中安装与配置cmake

    安装说明安装环境:CentOS-6.3安装方式:源码编译安装软件:cmake-2.8.10.2.tar.gz下载地址:http://www.cmake.org/cmake/resources/soft ...

  6. P1601 A+B Problem(高精加法)

    [高精度就是一个固定的格式吧] #include<iostream>#include<cstdio>#include<cmath>#include<algor ...

  7. GoldenGate实时投递数据到大数据平台(4)- ElasticSearch 2.x

    ES 2.x ES 2.x安装 下载elasticSearch 2.4.5, https://www.elastic.co/downloads/elasticsearch 解压下载后的压缩包,启动ES ...

  8. 金九银十跳槽季,程序员面试点解析之Java专场

    前言 近年来Java工程师这个岗位炙手可热,市场需求大,学习Java的人也越来越多,所以IT企业与求职者的选择都比较多,那么IT企业在面试时都会提哪些问题呢.下面为大家分享 Java高级工程师面试阿里 ...

  9. Let's Chat ZOJ - 3961

    ACM (ACMers' Chatting Messenger) is a famous instant messaging software developed by Marjar Technolo ...

  10. PyCharm 安装及破解方法

    PyCharm 安装及破解方法 一.安装 首先要下载Pycharm这个软件,可以在官网下载进行下载. 下载完软件之后,双击安装文件即可进行安装,双击后出现下图所示的提示,点击Next即可. 然后会出现 ...