zoukankan      html  css  js  c++  java
  • Mybatis之useGeneratedKeys参数用法

    在MyBatis中,允许设置名称为“useGeneratedKeys”参数存在3个位置:

    1. 在settings元素中设置useGeneratedKeys参数
    2. 在xml映射器中设置useGeneratedKeys参数
    3. 在接口映射器中设置useGeneratedKeys参数

    在不同位置设置的useGeneratedKeys参数,最终结果相同,但是影响范围不同。

    在settings元素中设置useGeneratedKeys参数

    官方的说法是该参数的作用是:“允许JDBC支持自动生成主键,需要驱动兼容”,如何理解这句话的意思?
    其本意是说:对于支持自动生成记录主键的数据库,如:MySQL,SQL Server,此时设置useGeneratedKeys参数值为true,在执行添加记录之后可以获取到数据库自动生成的主键ID。
    实际上,在settings元素中设置useGeneratedKeys是一个全局参数,但是只会对接口映射器产生影响,对xml映射器不起效。

    1 <settings>
    2 <!-- 
    3 允许JDBC支持自动生成主键,需要驱动兼容。 
    4 如果设置为true则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(比如 Derby)。 
    5 -->
    6 <setting name="useGeneratedKeys" value="true" />
    7 </settings>

    此时,在接口映射中添加记录之后将返回主键ID。

    1 public interface TestMapper {
    2     // 受全局useGeneratedKeys参数控制,添加记录之后将返回主键id
    3     @Insert("insert into test(name,descr,url,create_time,update_time) values(#{name},#{descr},#{url},now(),now())")
    4     Integer insertOneTest(Test test);
    5 }

    但是,请注意如果此时在接口映射器中又明确设置了useGeneratedKeys参数,那么注解映射器中的useGeneratedKeys参数值将覆盖settings元素中设置的全局useGeneratedKeys参数值。
    举个例子:先在settings元素中设置全局useGeneratedKeys参数值为true,再在接口映射器中设置useGeneratedKeys参数值为false,添加记录之后将不能返回注解ID。

    1 // 在接口映射器中设置的useGeneratedKeys参数值将会覆盖在settings元素中设置全局useGeneratedKeys参数值
    2 @Options(useGeneratedKeys = false, keyProperty = "id", keyColumn = "id")
    3 @Insert("insert into test(name,descr,url,create_time,update_time) values(#{name},#{descr},#{url},now(),now())")
    4 Integer insertOneTest(Test test);

    另外,在settings元素中设置的全局useGeneratedKeys参数对于xml映射器无效。如果希望在xml映射器中执行添加记录之后返回主键ID,则必须在xml映射器中明确设置useGeneratedKeys参数值为true。

    在xml映射器中配置useGeneratedKeys参数

    1 <!-- 插入数据:返回记录的id值 -->
    2 <insert id="insertOneTest" parameterType="org.chench.test.mybatis.model.Test" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
    3     insert into test(name,descr,url,create_time,update_time) 
    4     values(#{name},#{descr},#{url},now(),now())
    5 </insert>

    xml映射器中配置的useGeneratedKeys参数只会对xml映射器产生影响,且在settings元素中设置的全局useGeneratedKeys参数值对于xml映射器不产生任何作用。

    在接口映射器中设置useGeneratedKeys参数

    1 // 设置useGeneratedKeys为true,返回数据库自动生成的记录主键id
    2 @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
    3 @Insert("insert into test(name,descr,url,create_time,update_time) values(#{name},#{descr},#{url},now(),now())")
    4 Integer insertOneTest(Test test);

     mybatis中的option使用

    针对insert有效,当有关联表操作的时候,可以先插入主表,然后根据主表返回的主键id去落库详情表
    1 @Options(useGeneratedKeys=true,keyProperty="id",keyColumn="id")
    1. useGeneratedKeys 是否返回生成的主键
    2. keyProperty 传入对象中的对象名
    3. keyColumn 数据库中的字段名
  • 相关阅读:
    Unity 3(一):简介与示例
    MongoDB以Windows Service运行
    动态SQL中变量赋值
    网站发布IIS后堆栈追踪无法获取出错的行号
    GridView Postback后出错Operation is not valid due to the current state of the object.
    Visual Studio 2010 SP1 在线安装后,找到缓存在本地的临时文件以便下次离线安装
    SQL Server 问题之 排序规则(collation)冲突
    IIS 问题集锦
    linux下安装mysql(ubuntu0.16.04.1)
    apt-get update 系列作用
  • 原文地址:https://www.cnblogs.com/Zr0118/p/13339383.html
Copyright © 2011-2022 走看看