问题描述
下面是IBatis将用户插入数据库的例子:1. MySQL定义CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` char(80) NOT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`))2. User定义public class User { private Long id; private String name; private int age;...}3. 定义UserMapper<mapper namespace="org.hyn.maper.UserMapper"><insert id="insert" parameterType="org.hyn.bean.User">insert into author(name,age) values(#{name},#{age}) </insert></mapper>4. 增加一个用户的程序片段ApplicationContext aContext = new FileSystemXmlApplicationContext("WebRoot/WEB-INF/applicationContext.xml");UserMapper userMapper = aContext.getBean(UserMapper.class);User user = new User();user.setName("张三");user.setAge(18);userMapper.insert(user);问题:如何才能得到加入记录"张三"的ID值? 能在插入时直接回填ID吗?
解决方案
纠正一下1楼的说法,返回值是2楼SQL-Map中要加上的 @@IDENTITY 把它强转为String或int都可以,下面是int的写法:public int insert(User user) throws DAOException { return ((Integer)getSqlMapClientTemplate().insert("insert", user)).intValue();}
解决方案二:
<mapper namespace="org.hyn.maper.UserMapper"> <insert id="insert" parameterType="org.hyn.bean.User"> insert into author(name,age) values(#{name},#{age}) <selectKey resultClass="int" keyProperty="id" > SELECT @@IDENTITY AS ID </selectKey> </insert> </mapper>
解决方案三:
UserMapper 里调用的如果是 iBatis 的 insert 方法的话,insert方法的返回值本身就是Object,其实就是写进去的对象把这个返回值强转为 User,就是啦,不光id,name也有。