mybatis 的saveOrUpdate 如何实现?

刀剑千秋 发布于 2016/01/08 11:55
阅读 2K+
收藏 0

需求:查询非主键字段不存在就insert 已存在就update(或不操作)

以前hibernate经常会使用到saveOrUpdate 方法 而在mybatis貌似没有 网上找了好久没找到  所以问问如何实现 


加载中
0
风吹屁屁凉
风吹屁屁凉
<!-- 保存或更新 -->
	<insert id="saveOrUpdate" parameterType="shopnav">
		<selectKey keyProperty="count" resultType="int" order="BEFORE">
			select count(*) as count from shop_nav where shop_nav_id =
			#{shopNavId} and shop_id = #{shopId}
		</selectKey>
		<!-- 如果大于0则更新 -->
		<if test="count>0">
			update shop_nav set
			shop_id=#{shopId,jdbcType=INTEGER},
			nav_name=#{navName,jdbcType=VARCHAR},
			nav_code=#{navCode,jdbcType=VARCHAR},
			shop_url=#{shopUrl,jdbcType=VARCHAR},
			is_delete=#{isDelete,jdbcType=VARCHAR},
			sort_num=#{sortNum,jdbcType=INTEGER}
			WHERE shop_nav_id = #{shopNavId} and shop_id = #{shopId}
		</if>
		<!-- 如果等于0则保存 -->
		<if test="count==0">
			insert into shop_nav(
			shop_id,
			nav_name,
			nav_code,
			shop_url,
			is_delete,
			sort_num,
			add_date
			) VALUES (
			#{shopId,jdbcType=INTEGER},
			#{navName,jdbcType=VARCHAR},
			#{navCode,jdbcType=VARCHAR},
			#{shopUrl,jdbcType=VARCHAR},
			#{isDelete,jdbcType=VARCHAR},
			#{sortNum,jdbcType=INTEGER},
			#{addDate,jdbcType=DATE}
			)
		</if>
	</insert>



风神AI
风神AI
学习了
风吹屁屁凉
风吹屁屁凉
回复 @码之翔 : 额,你看错了,count是我用as出来的一个新名字,与实体无关,实体里根本没有这个字段
刀剑千秋
刀剑千秋
这个 可以 谢谢了 只是有一点不好 需要在实体中加入count属性 并给与setter方法 这个放在实体里有点不太让人理解
1
妹子楼顶有鸽子
妹子楼顶有鸽子
oracle merge into ,mysql replace into 
刀剑千秋
刀剑千秋
这个 我没试过 回头试一试 谢谢回答
亭舸翁
亭舸翁
+1
0
如比如比
如比如比
更新前,检索一下,存在的update,不存在的insert,例子http://stackoverflow.com/questions/23486547/mybatis-batch-insert-update-for-oracle
0
平安北京
先查询,再根据查询结果做对应的操作
刀剑千秋
刀剑千秋
这样是把代码写到service层中吧 我想用mybatis直接完成这样的操作
0
wenbu
wenbu

mybatis中使用replace into可以实现

返回顶部
顶部