mybaties中的insert into select 用法,mybaties批量插入

原创 2016年05月31日 08:54:09

在最近的项目中用到了站内信功能,需求是站内信要发给所有用户和指定用户,为了优化数据库的性能,极大的减少访问数据库的次数,所以在mybaties中用到了批量删除,直接上代码吧!

1.发送给部分用户,批量插入功能

MessageDaoImpl.java

	public void sendPartMessage(List<UserMessage> list) throws Exception {   //list中存储的是要发送站内信用户的Id
		getSqlSession().insert("message.sendPartMessage",list);
	}


message-mapper.xml

	<insert id="sendPartMessage" useGeneratedKeys="true" parameterType="java.util.List">
	 INSERT INTO UserMessage(
	Sender,Content,MsgDate,ReadStatus,UserId,ParentId,MsgId,OrderId,TypeItem,SubName,Type,Name,contentM) VALUES 
		<foreach collection="list" index="index" item="item" separator="," >    <-- 循环遍历所有指定用户的id,实现批量插入-->
                 (#{item.sender},#{item.content},#{item.msgDate},#{item.readStatus},#{item.userId},
                 0,#{item.msgId},0,#{item.typeItem},#{item.subName},#{item.type},#{item.name},#{item.contentM})
       <span style="white-space:pre">		</span></foreach> 
	</insert>

2.为所用用户发送站内信insert into select

从用户表中查询出所有的用户id,并且进行插入,其中只访问一次数据库

MessageDaoImpl.java

<span style="white-space:pre">	</span>public void sendAllMessage(UserMessage userMessage) {
<span style="white-space:pre">		</span>getSqlSession().insert("message.sendAllMessage",userMessage);
<span style="white-space:pre">	</span>}
message-mapper.xml

	<insert id="sendAllMessage" parameterType="userMessage">
	 INSERT INTO UserMessage(Sender,Content,MsgDate,ReadStatus,UserId,ParentId,MsgId,OrderId,TypeItem,SubName,Type,Name,contentM) 
		select #{sender},#{content},#{msgDate},#{readStatus},userInfo.Id,0,#{msgId},0,#{typeItem},#{subName},#{type},#{name},#{contentM}
		 from UserInfo 
	</insert> 
insert into  表名(字段1,字段2,字段3,......)  select userMessage中的属性(即是变量) userInfo.Id为从UserInfo表中查出的所有用户ID,这样就在站内信的表中未所用用户都插入了一条与其id对应的站内信。



版权声明:java架构师视频教程,高并发集群分布式视频教程,高并发处理方式,大数据视频教程出售QQ:694042039 举报

相关文章推荐

SSM框架中集成批量导入Mysql数据库功能

如果导入的数据在万条以上,项目中生成的导入功能数据在万条以上会变得非常慢,然后优化了一下,经测试,几万的数据在10秒内成功导入。感觉还是有需要优化的地方,时间精力有限,有优化的希望多交流交流。上代码:...

SSM ajax实现批量启用和批量禁用

SSM ajax实现批量启用和批量禁用

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

MyBatis批量插入数据

在程序中封装了一个List集合对象,然后需要把该集合中的实体插入到数据库中,由于项目使用了Spring+MyBatis的配置,所以打算使用MyBatis批量插入,由于之前没用过批量插入,在网上找了一些...

mybatis中批量写入(insert)数据

mapper层批量汇总、计算数据,并将数据写入数据库的另一个表中。

Insert into select From 的用法

INSERT INTO t2(t2.f1,t2.f2, ...)SELECT (t1.f1, t1.f2,...)FROM t1 if exists (select name from sysobje...

MyBatis的INSERT操作

一、前言                                      数据库操作怎能少了INSERT操作呢?下面记录MyBatis关于INSERT操作的笔记,以便日后查阅。   二...

关于mybatis的insertintoselect命令未结束问题

关于mybatis的 insert into select 命令未结束问题,最后以为是sql写错了,但是,在plsql执行又没问题。最后还是解决问题, 是设置问题。 ### Cause...

Mybatis批量更新数据库与批量插入数据库(以oracle为例)

一、批量更新 1、普通写法(一条记录update一次,性能比较差,容易造成阻塞。不建议使用) update id="updateBatch" parameterType="java....

MyBatis中动态SQL语句的书写

官网的动态SQL语句参考 动态SQL语句的书写 这里面的Dao.xml比如和java包中的对应的Dao路径一致:主要的步骤是: 1、在SQLWorkbench中创建SQL语句,并复制到Sprin...

批量 insert into select 和 批量 replace into select

Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少。但我...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)