MyBatis教程大全


 MyBatis SQL 映射

     MyBatis select 标签

     MyBatis 多数据库支持

     MyBatis selectKey 标签作用

     MyBatis @SelectKey注解用法介绍

     MyBatis @SelectKey注解用法详细介绍

     MyBatis keyProperty 属性介绍

     MyBatis insert、update 和 delete 元素

     MyBatis sql 元素

 MyBatis SQL 参数映射

     MyBatis SQL 参数映射

 MyBatis 动态SQL

     MyBatis 动态SQL与数据准备

     MyBatis if 标签

     MyBatis if else 用法

     MyBatis choose、when、otherwise 标签

     MyBatis where 标签

     MyBatis set 标签

     MyBatis foreach 标签

     MyBatis bind 标签

     MyBatis trim 标签

 MyBatis SQL 结果映射

 MyBatis SQL 结果之关系映射

 MyBatis 使用介绍

     MyBatis typeAliases 类型别名

     MyBatis typeHandlers 类型处理器

     MyBatis Transaction 事务接口

     MyBatis transactionManager 事务管理

     SqlSessionFactory 介绍

     MyBatis 核心对象 SqlSession

     MyBatis 初始化 创建 Session 实例

     MyBatis ObjectFactory 对象工厂

     MyBatis缓存机制:一级缓存和二级缓存

     MyBatis 常用注解

 MyBatis 配置文件

     MyBatis 配置文件

 MyBatis 映射

     MyBatis 映射简介

     MyBatis ResultMap 映射

     MyBatis 自动映射

     MyBatis 高级映射

     MyBatis 集合映射

     MyBatis 关联映射

     MyBatis 一对一关联映射

     MyBatis 一对多关联映射

     MyBatis 多对多关联映射

     MyBatis 一对一(注解形式)

     MyBatis 一对多(注解形式)

     MyBatis 多对多(注解形式)

     MyBatis resultMap 元素

 MyBatis 面试题库

     #{}和${}的区别是什么?

     数据库链接中断如何处理?

     数据库插入重复如何处理?

     事务执行过程中宕机的应对处理方式

     Java客户端中的一个Connection问题

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);

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