keyProperty 作用

useGeneratedKeys = true 表示使用数据库的自增主键,而数据库的自增主键如何跟实体类的属性进行绑定呢?是通过 keyProperty 属性实现的。

keyProperty 使用介绍

在mybatis的配置文件中,keyProperty 和 useGeneratedKeys 往往搭配使用。useGeneratedKeys 参数只针对 insert 语句生效,默认为 false。当设置为 true 时,表示如果插入的表以自增列为主键,则允许 JDBC 支持自动生成主键,并可将自动生成的主键返回。具体用法: useGeneratedKeys="true" keyProperty="id"

keyProperty 应用场景

在做关联表插入操作时,需要根据主表的主键id作详情表的属性值,最笨的方法就是,先插入主表,然后通过查询返回刚刚插入的主键id,继续 添加详情表数据。实际上,利用keyProperty 属性,可以省略中间的查询主键id的过程。如下所示:

<insert id="saveBook" parameterType="book" useGeneratedKeys="true" keyProperty="id">
      INSERT INTO T_BOOK(bookName,author) VALUES(#{bookName},#{author})
</insert>

上述操作表示插入数据之后返回一个自增主键赋值给实体类book中的id属性,然后在根据id属性插入book的详情表。

<insert id="saveBookDetails" parameterType="bookDetails">
      INSERT INTO T_BOOK_DETAILS(bookId,bookContent,publicationDate) VALUES(#{bookId},#{bookContent},#{publicationDate})
</insert>

定义实体类

public class Book implements Serializable{
    private Integer id;
    private String bookName;
    private String author;
 //省略get\set方法
}

public class BookDetails implements Serializable{
    private Integer bookId;
    private String bookContent;
    private String publicationDate;
 //省略get\set方法
}

插入实体类

Book book = new Book( "《Java编程思想》", "埃克尔");
System.out.println("在插入数据库之前:"+book.getId());
session.insert("cn.mybatis.mapper.BookMapper.saveBook", book);
System.out.println("在插入数据库之后:"+book.getId());

String content = "本书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过异常处理错误、字符串、泛型、数组、容器深入研究、JavaI/O系统、枚举类型、并发以及图形化用户界面等内容。这些丰富的内容,包含了Java语言基础语法以及高级特性,适合各个层次的Java程序员阅读,同时也是高等院校讲授面向对象程序设计语言以及Java语言的好教材和参考书。";

String data = "2007-06-01";
BookDetails bookDetails = new BookDetails( book.getId(),content, data);
session.insert("cn.mybatis.mapper.BookMapper.saveBookDetails", bookDetails);

原文链接:http://www.mybatis.cn/mybatis/2012.html

标签: none

添加新评论