MyBatis的useGenerateKeys的使用方法

需求:使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值。

 

方法:在mapper中指定keyProperty属性,示例如下:


    insert into user(userName,password,comment)  
    values(#{userName},#{password},#{comment})  

注意:此处可能会有

如果在的右边尖括号之后有空格,在启动时可能会报:元素类型 "insert" 必须后跟属性规范 ">" 或 "/>"并且,在作新增操作时会一直增不进去而报SQL语法错误,碰到这类问题就把标签整体在敲一边就可以了

如上所示,我们在insert中指定了keyProperty="userId",其中userId代表插入的User对象的主键属性

User.java

public class User {  
    private int userId;  
    private String userName;  
    private String password;  
    private String comment;  
      
    //setter and getter  
}  

 UserDao.java

public interface UserDao {  
  
    public int insertAndGetId(User user);  
  
}  

 测试:

Java代码  

User user = new User();  
user.setUserName("chenzhou");  
user.setPassword("xxxx");  
user.setComment("测试插入数据返回主键功能");  
  
System.out.println("插入前主键为:"+user.getUserId());  
userDao.insertAndGetId(user);//插入操作  
System.out.println("插入后主键为:"+user.getUserId());  

 输出:

  1. 插入前主键为:0  
  2. 插入后主键为:15  

 查询数据库:

 

如上所示,刚刚插入的记录主键id为15

总结:用了这个useGenerateKeys="true"后,不用再在写一句关于select的SQL(降低数据库的压力)而直接能够得到刚刚插进去的那个主键,但是——这个属性只能用在主键能自增长的数据库里面比如MySQL可以用,但是oracle就不能用了!

对于oracle返回自增主键(oracle序列)如下:

       keyProperty:将查询到主键值设置到parameterType指定的对象的哪个属性
       order:相对于insert语句来说它的执行顺序,只要不是自增主键,那么就设置为before
       resultType:指定返回的结果类型

 

 
                
                    select seq.nextval from dual
                
                insert into
                     userinfo (userId,userName,userpass,usertype,address) 
                values
                    (#{userId},#{userName},#{userPass},#{userType},#{address})

 

 

 

你可能感兴趣的:(mybatis)