最近开发的一个项目中,因为需要,所以需要使用mybatis中的语句返回一个主键id,语句如下,
<insert id="insert" parameterClass="company" >
INSERT INTO
F_COMPANY(
company_id,
company_no,
company_name,
company_full_name,
company_logo,
city_id,
gmt_create,
gmt_modify,
last_attendance_time,
create_id,
modify_id,
no_modify_count,
company_status
)
VALUES(
#company_id:INTEGER#,
#company_no:VARCHAR#,
#company_name:VARCHAR#,
#company_full_name:VARCHAR#,
#company_logo:VARCHAR#,
#city_id:INTEGER#,
now(),
now(),
now(),
#create_id:CHAR#,
#create_id:CHAR#,
#no_modify_count:TINYINT#,
1
)
<selectKey resultClass="Integer" keyProperty="company_id" >
<![CDATA[SELECT LAST_INSERT_ID() AS company_id ]]>
</selectKey>
</insert>
之前没有使用过这样的语句,不知道应该用什么来接收这段语句返回的类型,于是我就试着在mysql中运行一下看返回的结果,我的语句如下,
INSERT INTO
F_COMPANY(
company_id,
company_no,
company_name,
company_full_name,
company_logo,
city_id,
gmt_create,
gmt_modify,
create_id,
modify_id,
no_modify_count,
company_status
)
VALUES(
1,
'222',
'222',
'222',
'222',
3,
NOW(),
NOW(),
'222',
'222',
1,
1
)
SELECT LAST_INSERT_ID() AS company_id;
但是这样执行的话会报错,因为这是两条语句,需要添加分号的,我却没有添加。。。。。
下面是一个xml和注解的例子,SelectKey很简单,两个例子就够了:
<insert id="insert" parameterType="map">
insert into table1 (name) values (#{name})
<selectKey resultType="java.lang.Integer" keyProperty="id">
CALL IDENTITY()
</selectKey>
</insert>
看了一下别人的例子,懂了。。。
上面xml的传入参数是map,selectKey会将结果放到入参数map中。用POJO的情况一样,但是有一点需要注意的是,keyProperty对应的字段在POJO中必须有相应的setter方法,setter的参数类型还要一致,否则会报错。