MyBatis-Oracle-selectKey返回主键

本文介绍了一个使用MyBatis进行数据库插入操作的例子。通过Mapper文件定义了SQL语句,用于向WXSH_LOG_OUT表中插入记录。此外,还提供了一个Service层的方法addWxshLogOut,该方法负责设置数据源类型并调用Mapper方法执行插入操作,最后返回生成的主键ID。

Mapper(Oracle)

<insert id="insertWxshLogOut"  parameterType="java.util.HashMap">
    <selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
        select wxsh_seq.nextval as id from dual
    </selectKey>
    INSERT INTO WXSH_LOG_OUT
    (ID,
     OUT_NO,
     USER_ID,
     FILE_NAME,
     CREATE_AT,
     IP,
     CONTENT,
     OUT_NUM,
     UNIT_NO,
     STATUS)
    VALUES
        (#{id},
         #{out_no},
         #{user_id},
         #{file_name},
         SYSDATE,
         #{ip},
         #{content},
         #{out_num},
         #{unit_no},
         #{status})
</insert>

Service

public int addWxshLogOut(Map map) {
    try {
        DataSourceTypeManager.set(DataSources.GJT);
        welfareConfirmMapper.insertWxshLogOut(map);
        return Integer.parseInt(String.valueOf(map.get("id")));
    } catch (Exception e) {
        logger.error(e.getMessage());
    }
    return 0;
}

map中会增加返回的主键id

转载于:https://my.oschina.net/merryyou/blog/1358372

MyBatis-Plus 中处理 Oracle 数据库的联合主键大数据量批量更新,可以按照以下步骤进行操作: 1. 确保你已经定义了对应的实体类,并在实体类中使用 `@TableId` 注解标识联合主键字段。 ```java @Data @TableName("your_table_name") public class YourEntity { @TableId(type = IdType.INPUT) private Long key1; @TableId(type = IdType.INPUT) private Long key2; // 其他属性 } ``` 2. 创建一个 Mapper 接口,继承自 `BaseMapper` 并指定实体类作为泛型参数。 ```java @Repository public interface YourMapper extends BaseMapper<YourEntity> { } ``` 3. 在 Service 层中使用 MyBatis-Plus 提供的方法进行批量更新操作。具体来说,可以使用 `updateBatchById` 方法。 ```java @Service public class YourService { private final YourMapper yourMapper; @Autowired public YourService(YourMapper yourMapper) { this.yourMapper = yourMapper; } public void batchUpdate(List<YourEntity> entityList) { yourMapper.updateBatchById(entityList); } } ``` 4. 在 Oracle 数据库中,由于不支持直接使用 `(key1, key2) in` 的语法,可以通过使用临时表来实现批量更新。首先,创建一个临时表,用于存储批量更新的数据。 ```sql CREATE GLOBAL TEMPORARY TABLE temp_table ( key1 NUMBER, key2 NUMBER ) ON COMMIT PRESERVE ROWS; ``` 5. 接下来,在批量更新方法中使用原生 SQL 来执行批量更新操作。 ```java @Repository public interface YourMapper extends BaseMapper<YourEntity> { @Update("INSERT INTO temp_table (key1, key2) VALUES (#{item.key1}, #{item.key2})") void insertIntoTempTable(@Param("item") YourEntity item); @Update("UPDATE your_table_name t SET column1 = ?, column2 = ? WHERE EXISTS (SELECT 1 FROM temp_table WHERE t.key1 = temp_table.key1 AND t.key2 = temp_table.key2)") void batchUpdate(); } ``` 在上述示例中,我们使用 `insertIntoTempTable` 方法将批量更新的数据插入临时表中,然后使用 `batchUpdate` 方法执行批量更新操作。在 `batchUpdate` 方法中,我们使用原生 SQL 来更新目标表的数据,通过与临时表的关联来实现根据联合主键批量更新的效果。 最后,调用 `batchUpdate` 方法即可执行批量更新操作。 请确保在配置文件中配置好数据库连接信息和相关的 MyBatis-Plus 配置。希望对你有所帮助!如果有任何疑问,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值