mybatis结合mysql批量操作及查询sql
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的更多相关文章
- Mybatis使用MySQL进行模糊查询时输入中文检索不到结果
Mybatis使用MySQL进行模糊查询时输入中文检索时,需要在jdbcURL后增加参数 ?useUnicode=true&characterEncoding=UTF-8
- MySQL 的分页查询 SQL 语句
MySQL一般使用 LIMIT 实现分页.基本语句为: SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ... 在中小数据量的情况下,这样的SQL足够 ...
- mysql表名查询sql
select table_schema,table_name,engine from information_schema.tables where table_schema not in('info ...
- MySQL锁表查询SQL
// 查看进程 SHOW PROCESSLIST; // 查看是否锁表 SHOW OPEN TABLES WHERE In_use > 0; // 查看正在锁的事务 SELECT * FROM ...
- 使用mybatis从mysql里进行模糊查询的编码问题
关于这个问题,记录下我的解决方法,希望对有同样困惑的朋友,有所帮助. 问题描述: 我在做mybatis从mysql里模糊查询时,如果模糊的关键词是字母的话,可以查出来.如果模糊的关键词是汉字的话,查不 ...
- Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办--转自http://www.jb51.net/article/88236.htm
这篇文章主要介绍了Mybatis使用MySQL模糊查询时输入中文检索不到结果的解决办法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 项目开发中,在做Mybatis动态查询时,遇到了 ...
- mybatis 多表查询sql
在使用spring,spring mvc,mybatis时,mybatis链接数据库做多表查询的时候,sql语句中直接使用left join等链接字符就可以 链接多个表,参数类型是parameterT ...
- 步步深入:MySQL架构总览->查询执行流程->SQL解析顺序
前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来 ...
- MySQL、Oracle和SQL Server的分页查询语句
假设当前是第PageNo页,每页有PageSize条记录,现在分别用Mysql.Oracle和SQL Server分页查询student表. 1.Mysql的分页查询: SELECT * FROM s ...
随机推荐
- C++笔试题2(基础题)
温馨提醒:此文续<C++笔试题(基础题)> (112)请写出下列程序的输出内容 代码如下: #include <iostream> using namespace std; c ...
- 输出列表为字符串,并在最后一个值前加上and 4.10.1
逗号代码: def test4(lis): str1='' for i in range(len(lis)-1): str1+=(str(val[i])+', ') str1+=('and '+str ...
- bash 替换特殊字符
bash 替换特殊字符 PID=`netstat -tpln|grep `;PID=${PID#*LISTEN};PID=`echo $PID | sed -s "s/\/java//g&q ...
- 设计模式之Chain of Responsibility(职责链)(转)
Chain of Responsibility定义 Chain of Responsibility(CoR) 是用一系列类(classes)试图处理一个请求request,这些类之间是一个松散的耦合, ...
- c# 静态方法和数据
c#所有方法都必须在类的内部声明,但如果把方法或者字段声明为static就可以使用,类名代用方法或者访问字段. 在方法中声明一个静态变量a 和一个静态的aFun方法.下面是在主函数中调用. 从上图可以 ...
- C# 声明隐式类型的局部变量
在c#中赋值给变量的值必须具有和变量相同的类型.如int值赋给int变量,c#编译器可以迅速判断变量初始化表达式的类型,如果变量类型不符,就会明确告诉你. 提示需要强制转换(例如在char中不允许使用 ...
- 囤币一族,被中国市场遗忘的价值币ADA
囤币一族,被中国市场遗忘的价值币ADA ==========================长期囤币目标:trx十万个,ada一万个,eos五千个,nas一千个,ont一千个,eth一百个,比特币十个 ...
- byte & 0xff char 转换
https://blog.csdn.net/lixingtao0520/article/details/75450883 版权声明:本文为博主原创文章,转载请注明作者与出处,http://blog.c ...
- Pony 编程语言介绍
Pony,一种“Rust 遇上 Erlang”的语言,让开发快捷.安全.高效.高并发的程序更简单. 在 Wallaroo Labs,我是工程副总裁,我们正在构建一个用 Pony 编程语言编写的 高性能 ...
- 每日linux命令学习-grep模式检索
grep模式检索指令包括grep,egrep,和fgrep,.Linux系统使用正则表达式优化文本检索,所以在此,笔者首先学习了一下正则表达式. 1. 正则表达式 正则表达式使用被称为元字符(Meta ...