MyBatis keyProperty 属性介绍
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);