mybatis的不常见操作

##前言:因为项目的原因,会生成新的数据库表,而表名和大部分字段都是未知,所以sql用了大量的遍历,也没有实体类,数据都Map和List类型

一,单条插入获得id

	//因为没有实体类所以自然无法用mybatis将id返回给实体类的方式,这里虽然是插入语句 但是用的标签是select,如不用select返回的是行数
	sql执行完后加   select @@IDENTITY as saveHistory  便可得到新增得id
	<select id="saveHistory" resultType="java.lang.Long">
	        insert into ${param2}
	        (CreateUser,
	        <foreach collection="param1.keys" item="key" close=")"
	                 separator=",">
	            ${key}
	        </foreach>
	        values
	        (#{param3},
	        <foreach collection="param1.values" item="value"
	                 close=")" separator=",">
	            #{value}
	        </foreach>
	        select @@IDENTITY as saveHistory
	    </select>

二,多条插入获得id

//同样是插入语句用select,单用 select @@IDENTITY只能获得最新生成得id  无法获取全部得id,这种是使用创建临时表,将生成得id存入临时表,再查询临时表得方式获取新增得所有id,数据库用的sql server,其他数据库没测试过。
<select id="saveCompensationFileList" resultType="java.lang.Long">
        create table #t(id int)
        <foreach collection="param1" item="items" index="index">
            insert into ${param2}
            <foreach collection="items.keys" item="key" open="(" close=")"
                     separator=",">
                ${key}
            </foreach>

            output inserted.id into #t
            values
            <foreach collection="items.values" item="value" open="("
                     close=")" separator=",">
                #{value}
            </foreach>

        </foreach>
        select * from #t
    </select>

三,判断Map类型数据是否为空

//maps.containsKey(key)使用此语句较好,以前直接使用得 != null判断有时候有问题
	update ${dbname}
	            <set>
	                <foreach collection="maps.keys" item="key" open="" close=""
	                         separator=",">
	                    <if test="maps.containsKey(key)">
	                        ${key} = #{maps.${key}}
	
	                    </if>
	                </foreach>
	            </set>
	
	            where UserId=#{UserId}

四,指定列去重

	//PropertyInfoId去重的列,根据CreateDate时间获取时间最大的那条数据
	SELECT * FROM PropertySafetyInfo a where
			not exists(select 1 from PropertySafetyInfo where
			PropertyInfoId=a.PropertyInfoId and CreateDate<a.CreateDate)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值