Mybatis使用问题汇总-采坑和实践
xlecho编辑整理,欢迎转载,转载请声明文章来源。欢迎添加echo微信交流学习。 百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!!
JDK1.8分组问题产生的SQL需求
需求一
传入的值数据结构为:List(Map)
Dao层的代码:
List<RecordPo> selectConditionRecord(List<Map<String, String>> list);
xml层代码:
<select id="selectConditionRecord" resultMap="BaseResultMap" parameterType="java.util.List"> <foreach collection="list" item="item" index="index" separator=";"> select * from RECORD <where> <if test="item.code != null and item.code != ''"> code = #{item.code,jdbcType=VARCHAR} </if> <if test="item.account != null and item.account != ''"> and account = #{item.account,jdbcType=VARCHAR} </if> <if test="item.createdate != null"> and to_char(CREATEDATE, 'yyyy-MM-dd') = #{item.createdate,jdbcType=TIMESTAMP} </if> </where> </foreach> </select>
需求二
mybatis批量更新问题
传入的值数据结构为:List(Map)
Dao层的代码:
void batchUpdate(List<RecordPo> list);
xml层代码:
<update id="batchUpdate" parameterType="java.util.List"> <foreach collection="list" index="index" item="item" separator=";"> update RECORD <set> <if test="item.id != null"> id = #{item.id,jdbcType=VARCHAR}, </if> <if test="item.code != null"> code = #{item.code,jdbcType=VARCHAR}, </if> <if test="item.createuser != null"> createuser = #{item.createuser,jdbcType=VARCHAR}, </if> <if test="item.createdate != null"> createdate = #{item.createdate,jdbcType=TIMESTAMP}, </if> </set> <where> id = #{item.id,jdbcType=VARCHAR} </where> </foreach> </update>
- 出现的问题:
Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE hd_t_user\n SET username ='111' \n where\n ' at line 6\r\n### The error may exist in file;
- 解决方案:
allowMultiQueries=true
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
ConcurrentHashMap比其他并发集合的安全效率要高一些?
前言 我们知道,ConcurrentHashmap(1.8)这个并发集合框架是线程安全的,当你看到源码的get操作时,会发现get操作全程是没有加任何锁的,这也是这篇博文讨论的问题——为什么它不需要加锁呢? ConcurrentHashMap的简介 我想有基础的朋友知道在jdk1.7中是采用Segment + HashEntry + ReentrantLock的方式进行实现的,而1.8中放弃了Segment臃肿的设计,取而代之的是采用Node + CAS + Synchronized来保证并发安全进行实现。JDK1.8的实现降低锁的粒度,JDK1.7版本锁的粒度是基于Segment的,包含多个HashEntry,而JDK1.8锁的粒度就是HashEntry(首节点)JDK1.8版本的数据结构变得更加简单,使得操作也更加清晰流畅,因为已经使用synchronized来进行同步,所以不需要分段锁的概念,也就不需要Segment这种数据结构了,由于粒度的降低,实现的复杂度也增加了JDK1.8使用红黑树来优化链表,基于长度很长的链表的遍历是一个很漫长的过程,而红黑树的遍历效率是很快的,代替一定...
- 下一篇
make: *** [packet.o] Error 127
今天在windows2012R2服务器上面编译c++工程时报了下面的错误,g++ -g -Wall -Wextra -c packet.cppmake: g++: Command not foundmake: * [packet.o] Error 127 看着这个错误,好像是编译工具出的问题,百度了一下,说是这个主要是没有安装gcc-c++.x86_64,导致的问题,但是我这个环境时研发部的开发环境,换言之,如果有这个问题,开发工作早就不能进行了,所以说这个应该和编译工具没有关系的,然后我又看了我的工程目录,发现一个问题,就是在我的makefile文件中,源文件应该是.cc文件来代表c++工程的文件,而由于习惯问题,我建立的源文件是.cpp类型的,应该是这个问题导致的编译不通过,更改了文件后缀,果然编译通过了。在网上查找了一些东西,希望看到.cc&.cpp编译过程中有哪些不同,没找到,大多讲的时不同后缀的c++文件的区别,还给列一个列表,不同环境下c++文件如何命名,这些东西有一个人写就够了,别那么多,烂大街的货就别那么多了。下面我自己写的,当然有从网上搜的,个人总结。我们都知...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长