Mybatis配置useGeneratedKeys 参数

Mybatis 配置文件 useGeneratedKeys 参数只针对 insert 语句生效,默认为 false。当设置为 true 时,表示如果插入的表以自增列为主键,则允许 JDBC 支持自动生成主键,并可将自动生成的主键返回。

配置mybatis的配置文件,设置useGeneratedKeys属性值为true:
 

    <insert id="insert" parameterType="com.FactoryAuditHistory"
            useGeneratedKeys="true" keyProperty="id">
        insert into factory_audit_history (start_date, end_date,
          retailer, site_name, factory_code,
          factory_name,factory_own_ship_from, licensee_vendor_no,
          ts_engineer, product_category, audit_type,
          status, total_score,  scale,  grade, last_mod, operator,
          factory_address)
        values (#{startDate,jdbcType=TIMESTAMP}, #{endDate,jdbcType=TIMESTAMP},
          #{retailer,jdbcType=VARCHAR}, #{siteName,jdbcType=VARCHAR}, #{factoryCode,jdbcType=VARCHAR},
          #{factoryName,jdbcType=VARCHAR}, #{factoryOwnShipFrom,jdbcType=VARCHAR}, #{licenseeVendorNo,jdbcType=VARCHAR},
          #{tsEngineer,jdbcType=VARCHAR}, #{productCategory,jdbcType=VARCHAR}, #{auditType,jdbcType=VARCHAR},
          #{status,jdbcType=VARCHAR}, #{totalScore,jdbcType=DOUBLE}, #{scale,jdbcType=INTEGER}, #{grade,jdbcType=VARCHAR},
          #{lastMod,jdbcType=TIMESTAMP}, #{operator,jdbcType=VARCHAR},#{factoryAddress,jdbcType=LONGVARCHAR})
      </insert>

keyProperty 标记了一个属性, MyBatis会通过 getGeneratedKeys 设置这个属性的值,DAO 调用 addUser 后,User 对象参数中就保存了新增的 user 的 id 属性了。

这个时候你是否能够感觉到useGeneratedKeys配置与selectKey的作用是那么的类似?那么它俩又有什么关系呢?

        这样的场景,当你使用的关系型数据库时Oracle 这样不支持自增主键列的数据库时,如果把useGeneratedKeys 参数配置为 true,在插入数据时则可能会出现 ORA-00933: SQL command not properly ended 这样的错误。这时,可以将 useGeneratedKeys 配置为 false,那怎么实现获取上次生成id的功能呢?可以使用 mybatis 提供的 selectKey 手动提供类似自增序列的效果。

总结:

        如果数据库支持自增长主键字段(比如mysql、sql server)设置useGeneratedKeys=”true”和keyProperty,这样就可以获得插入的主键id值,并赋值给返回的pojo对象(或者单纯的id值); 

        oracle则不支持自增长id,需要设置useGeneratedKey=”false”,如果设置true则会有报错信息。然后通过nextval函数,如SEQ_table.Nextval生成id,插入更新一条数据时,可以使用selectKey获取id操作。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis配置文件是一个XML文件,它包含了MyBatis配置信息。MyBatis配置文件名默认为"mybatis-config.xml",它通常位于classpath的根目录下。 MyBatis配置文件主要包括以下配置节点: 1. configuration:MyBatis配置的根节点,包含了MyBatis的所有配置信息。 2. properties:用来配置MyBatis全局属性的节点,可以用来定义数据源、日志实现等等。 3. settings:MyBatis全局配置参数的节点,包括了缓存策略、JDBC类型转换器等。 4. typeAliases:类型别名的配置节点,用来给Java类型指定别名。 5. typeHandlers:类型处理器的配置节点,用来处理Java类型和数据库类型之间的转换。 6. objectFactory:对象工厂的配置节点,用来创建MyBatis中的对象实例。 7. plugins:插件的配置节点,用来扩展MyBatis功能。 8. environments:环境配置节点,包括了数据库连接信息和事务管理器的配置。 9. mappers:映射器配置节点,包括了所有的映射器文件的路径。 示例: ```xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 全局配置 --> <settings> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> <setting name="multipleResultSetsEnabled" value="true"/> <setting name="useColumnLabel" value="true"/> <setting name="useGeneratedKeys" value="false"/> <setting name="autoMappingBehavior" value="PARTIAL"/> <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/> <setting name="defaultExecutorType" value="SIMPLE"/> <setting name="defaultStatementTimeout" value="25"/> <setting name="defaultFetchSize" value="100"/> <setting name="safeRowBoundsEnabled" value="false"/> <setting name="mapUnderscoreToCamelCase" value="false"/> <setting name="localCacheScope" value="SESSION"/> <setting name="jdbcTypeForNull" value="OTHER"/> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> <!-- 类型别名 --> <typeAliases> <typeAlias alias="Author" type="com.example.Author"/> <typeAlias alias="Blog" type="com.example.Blog"/> <typeAlias alias="Comment" type="com.example.Comment"/> <typeAlias alias="Post" type="com.example.Post"/> </typeAliases> <!-- 数据库连接环境 --> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"> <property name="autoCommit" value="false"/> </transactionManager> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <!-- 映射器配置 --> <mappers> <mapper resource="com/example/mapper/BlogMapper.xml"/> <mapper resource="com/example/mapper/AuthorMapper.xml"/> <mapper resource="com/example/mapper/CommentMapper.xml"/> <mapper resource="com/example/mapper/PostMapper.xml"/> </mappers> </configuration> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值