环境:MySQL5.7,MyBatis3.4.5
这种方法适合没有提供自增功能的数据库,例如Oracle。
属性名描述keyPropertyselectKey 语句结果应该被设置的目标属性。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。keyColumn匹配属性的返回结果集中的列名称。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。resultType结果的类型,MyBatis 通常可以推算出来。MyBatis 允许任何简单类型用作主键的类型,包括字符串。如果希望作用于多个生成的列,则可以使用一个包含期望属性的 Object 或一个 Map。order可为BEFORE 或 AFTER。如果是 BEFORE,那么它会先执行selectKey设置 keyProperty 然后执行插入语句。如果为AFTER则相反。statementType使用何种语句类型,默认PREPARED。 有STATEMENT,PREPARED 和 CALLABLE 语句的映射类型。先来错误的示范:
public int insUser(User user){ return mapper.insUser(user); }错误原因在于MyBatis的insert语句总是返回受影响的行数,因此插入成功的话一直都是返回1,我在这个地方一直卡着,也是醉了。
正确的做法是:
public int insUser(User user){ mapper.insUser(user); return user.getId(); }MyBatis会将自增的属性直接映射到对象中,直接调用对象的get方法即可。