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 数据库中的字段名
  • 相关阅读:
    .net环境变量 的设置
    情人节我们依旧单身(制作属于自己的QQ拼音皮肤)(带全部ps素材)
    sqlServer 中 正则表达式的使用(regexReplace函数)及配置(转)
    winform开发日常问题小记
    Ext 界面开发工具 Ext Designer 破解补丁
    中关村海龙大厦买本上当经历给大家提个醒
    [原创]Ext Panel 收缩时显示收缩文本
    解决php json_encode 出现的中文转码、乱码问题
    js获取get方式提交的参数返回json格式数据
    解决php的$美元符号与Zen Coding冲突问题
  • 原文地址:https://www.cnblogs.com/Zr0118/p/13339383.html
Copyright © 2011-2022 走看看