mybatis 插入操作实现主键返回的方法
<insert id="insert" parameterType="org.test.entity.PersonEO" >
<selectKey keyProperty="pk_person" order="BEFORE" resultType="java.lang.String" >
select sys_guid() from dual
</selectKey>
insert into T_IN_MESSAGE (pk_person,id,name)
values (#{pk_person,jdbcType=CHAR}, #{id,jdbcType=CHAR}, #{name,jdbcType=VARCHAR},)
</insert>
更新-----------时间2018.5.22
插入语句映射
插入语句和查询语句类似,也需要定义唯一的id,指定传入参数类型。
- <!-- 写入新记录并返回主键值,注意,这里的KeyProperty应该是Java类里的属性名称,而非数据表中的字段名 -->
- <insert id="insertUser" parameterType="User" useGeneratedKeys="true"
- keyProperty="userId">
- INSERT INTO sys_user(user_name, user_password, nick_name,
- user_type_id, is_valid, created_time)
- VALUES(#{userName},
- #{userPassword}, #{nickName}, #{userTypeId}, #{isValid},
- #{createdTime})
- </insert>
针对插入语句,这里有一点需要进行特别说明,那就是如何获得新插入数据的主键值。
在允许使用自增长字段做为主键的数据库中(如MSSQL,Mysql),我们只需要在insert元素中增加两个属性值即可。如:
- <insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="userId">
在不允许有自增字段的数据库中(如Oracle数据库),Mybatis有另外一种方法生成数据表主键,即在insert元素内部增加一个selectKey元素,用于生成数据表主键。如
- <insert id="insertUser" parameterType="User">
- <selectKey keyProperty="userId" resultType="int" order="BEFORE">
- select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1
- </selectKey>
- INSERT INTO sys_user(user_name, user_password, nick_name,
- user_type_id, is_valid, created_time)
- VALUES(#{userName},
- #{userPassword}, #{nickName}, #{userTypeId}, #{isValid},
- #{createdTime})
- </insert>