原本的方法
使用原本的JDBC去获取主键自增的方法如下图所示:
在这段代码中,通过连接对象 conn
的 prepareStatement
方法创建了一个PreparedStatement对象,并将SQL语句和 RETURN_GENERATED_KEYS
常量作为参数传递给该方法。这意味着执行SQL语句后,PreparedStatement对象会返回生成的键值,通常用于获取自动生成的主键值或其他需要返回的键值信息。
使用Mybatis之后的方法
Mapper层
int register(@Param("user")User user);
xml文件
<insert id="register" parameterType="com.xszx.beans.User" useGeneratedKeys="true" keyProperty="id">
insert into user(loginname, pwd) values (#{user.loginname},#{user.pwd})
</insert>
Servlet层
User user = new User();
String name = req.getParameter("name");
String pwd = req.getParameter("pwd");
user.setLoginname(name);
user.setPwd(pwd);
userMapper.register(user);
System.out.println(user.getId());
当servlet层中调用了register(user)方法时,会先去mapper层中找到该方法,然后系统会去xml文件中扫描对应的方法,此时我们首先要确保数据库的主键是自动递增的,这样,当你插入数据时,MyBatis 会自动获取生成的 ID 并将其设置到 User
对象的 id
属性上。
-
parameterType="com.xszx.beans.User"
表示这个<insert>
语句期望的参数是一个User
对象,这个对象应该包含loginname
和pwd
属性。 -
useGeneratedKeys="true"
和keyProperty="id"
表示MyBatis应该使用数据库生成的键(通常是自增ID)来填充User
对象的id
属性。 -
insert into user(loginname, pwd) values (#{user.loginname},#{user.pwd})
是SQL插入语句,它将User
对象的loginname
和pwd
属性插入到user
表中。
注意
此方法并不是直接返回自增的id,而是将自增的id赋值给了user对象的id值,所以我们如果想获取自增id,那么我们应该使用user.getId()的方法来获取。