在使用Mybatis过程中,
假设我有一张数据库(MySQL)表,表名为COMMAND,内有字段ID(主键)、NAME、DESCRIPTION。
众所周知,若数据库表结构的主键设置为自动增长类型的话,那么在xml文件中用<insert>标签时,
代码如下:
<insert id="insertNewCommand" parameterType="beans.Command" useGeneratedKeys="true">
<selectKey keyProperty="id" resultType="java.lang.Integer" order="AFTER" >
SELECT LAST_INSERT_ID() as id
</selectKey>
insert into COMMAND(NAME,DESCRIPTION) values(#{name,jdbcType=VARCHAR},#{description,jdbcType=VARCHAR})
</insert>
那么问题来了,若我这时候还有另一张表,表名为COMMAND_CONTENT,内有字段ID(主键,自动增长)、CONTENT、COMMAND_ID。其中字段COMMAND_ID设置外键关联
COMMAND表的主键。
我从前台获得数据name、description和content,也就是说,COMMAND表的主键ID未知,COMMAND_CONTENT表的主键ID和COMMAND_ID都未知。当我执行插入语句时,将
name和description可以存进COMMAND表中,此时会自动赋值COMMAND表的ID,但是对于conten要存进COMMAND_CONTENT中,需要有COMMAND_ID,这时候就感觉无解
了,然而,此时我发现了sqlSession.insert("Command.insertNewCommand",command)有int类型的关于获得的主键的返回值,但是现实总是差强人意,无论我执行多少次,这
个int类型的返回值都是1。无法获得主键,也就无法将content插入COMMAND_CONTENT表中,于是在执行完插入COMMAND表的炒作后,我用name又进行了一次select操作,
通过name查出对应的ID,再将该ID值赋值给COMMAND_ID,再进行插入COMMAND_CONTENT操作。不知道哪位大牛能给小弟解惑。纠结了两天了。