`

mybatis使用(3)

阅读更多

今天发现了一个奇葩的地方

mybatis的主键自动生成

1.使用 keyProperty="id"useGeneratedKeys="true"

来产生主键,只能一次生效
2.主键多次自动生成:也就是使用不支持自动生成主键的方式
<selectKey keyProperty="id" order="BEFORE" resultType="int" >
            select MAX(id)+1 as id from db_order
        </selectKey>
 
写代码测试的时候我使用第一种办法,mysql也是支持自动生成主键的,然后我添加记录,第一次成功,后来就不可以了,无语死了,后来才发现第一种方式,就只能在它默认的主键最大数的情况下加一,好像一直都是加一(原来是25,mybatis加到26,后来再加,也是在25的基础上),所以就会主键重复报错,使用第二种办法也没有这个情况。
原因:useGeneratedKeys估计是查询获取后,就一直保存了,使用了静态变量(源代码小菜去看了下,但是是在看不太懂,逻辑上我混乱了),相当于一次查询,多次使用,但是这个月肯定不科学,我在后面加了flushcache="true",也是不行;而selectkey应该就是完整的一次sql查询,能得到准确值,实现上我估计应该是没有缓存,或者有缓存,但是可以在原来基础是可以累加的
希望大神看到,提供看这一块的源代码以及怎么去看之类的技巧哈
<insert id="insertorder" parameterType="Db_order" 
		 flushCache="true" timeout="2000" ><!-- keyProperty="id"useGeneratedKeys="true" -->
		<selectKey keyProperty="id" order="BEFORE" resultType="int" >
			select MAX(id)+1 as id from db_order
		</selectKey>
		
		insert into db_order values
		(#{id},#{username},#{Ac_id},#{Ac_name},#{goodsname},#{goodsprice},#{starttime},#{address},#{effect})
	</insert>
 
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics