在事务中获取第一张表的id

场景

在事务的执行方法中,我们同时要对两张表进行保存。并使用第一张表的id,作为第二张表的外键。但是在一个事务中必须等到方法执行完了才能在数据库中获取到id的值。这样就不能关联第二张表。

解决办法

持久层使用的是mybatis

sql语句的配置

主要配置 useGeneratedKeys =“true” keyProperty=“id”。
keyProperty="id"是生成id后对应存放的字段。

 <insert id="add" parameterType="com.wondertek.jtzq.model.app.BasicInfo" useGeneratedKeys ="true" keyProperty="id" >
        insert into at_basic_temp (app_id,app_name,cp_id,fst_class_id,sec_class_id,
            app_desc,create_time,update_time,create_by,update_by)
            values (#{appId},#{appName},#{cpId},#{fstClassId},#{secClassId}
            ,#{appDesc},#{createTime},#{updateTime},#{createBy},#{updateBy})
  </insert>

java代码

    atBasicTempMapper.add(basicInfo);
    System.out.println(basicInfo.getId());
可以使用数据库事务来实现向多张插入数据的批量提交。具体实现步骤如下: 1. 开启事务。 2. 定义需要插入的数据。 3. 对每张分别执行插入操作,将需要插入的数据逐条添加到 SQL 语句。 4. 提交事务或者回滚事务。 下面是一个示例代码,用于向两张插入数据: ``` import java.sql.*; public class BatchInsertDemo { public static void main(String[] args) { Connection conn = null; PreparedStatement stmt = null; try { // 获取数据库连接 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password"); // 开启事务 conn.setAutoCommit(false); // 定义需要插入的数据 String[][] data = {{"John", "Doe", "john.doe@example.com"}, {"Jane", "Doe", "jane.doe@example.com"}}; // 对每张分别执行插入操作 for (String[] row : data) { // 向1插入数据 stmt = conn.prepareStatement("INSERT INTO table1 (first_name, last_name) VALUES (?, ?)"); stmt.setString(1, row[0]); stmt.setString(2, row[1]); stmt.executeUpdate(); // 向2插入数据 stmt = conn.prepareStatement("INSERT INTO table2 (email) VALUES (?)"); stmt.setString(1, row[2]); stmt.executeUpdate(); } // 提交事务 conn.commit(); } catch (SQLException e) { // 回滚事务 try { if (conn != null) { conn.rollback(); } } catch (SQLException ex) { ex.printStackTrace(); } e.printStackTrace(); } finally { try { // 关闭数据库连接 if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } ``` 在上面的示例代码,我们使用了 `Connection` 类的 `setAutoCommit(false)` 方法来关闭自动提交事务,然后使用 `commit()` 方法提交事务或者使用 `rollback()` 方法回滚事务。在循环,我们对每张分别执行插入操作,将需要插入的数据逐条添加到 SQL 语句。最后,我们关闭了 `PreparedStatement` 对象和数据库连接。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值