diff --git a/jdbc/src/main/java/com/github/fantasy0v0/swift/jdbc/ModifyBuilder.java b/jdbc/src/main/java/com/github/fantasy0v0/swift/jdbc/ModifyBuilder.java index 8f55a47..27f1c56 100644 --- a/jdbc/src/main/java/com/github/fantasy0v0/swift/jdbc/ModifyBuilder.java +++ b/jdbc/src/main/java/com/github/fantasy0v0/swift/jdbc/ModifyBuilder.java @@ -128,7 +128,7 @@ public List fetchBatch(ParameterHandler parameterHandler, FetchMapper mapper, List> params) { try (ConnectionReference ref = ConnectionPoolUtil.getReference(dataSource)) { - return Utils.executeBatch(ref.unwrap(), sql, params, parameterHandler, mapper); + return Utils.executeBatch(ref.unwrap(), null, sql, params, parameterHandler, mapper); } catch (SQLException e) { throw new SwiftSQLException(e); } diff --git a/jdbc/src/main/java/com/github/fantasy0v0/swift/jdbc/PaginateBuilder.java b/jdbc/src/main/java/com/github/fantasy0v0/swift/jdbc/PaginateBuilder.java index eb579b6..8b4ad8e 100644 --- a/jdbc/src/main/java/com/github/fantasy0v0/swift/jdbc/PaginateBuilder.java +++ b/jdbc/src/main/java/com/github/fantasy0v0/swift/jdbc/PaginateBuilder.java @@ -13,7 +13,9 @@ public class PaginateBuilder { private final DataSource dataSource; - private StatementConfiguration statementConfiguration; + private final StatementConfiguration statementConfiguration; + + private final ParameterHandler parameterHandler; private final String sql; @@ -27,13 +29,14 @@ public class PaginateBuilder { private List countParams; - PaginateBuilder(DataSource dataSource, StatementConfiguration statementConfiguration, - String sql, List params, - long number, long size) { + PaginateBuilder(DataSource dataSource, + StatementConfiguration statementConfiguration, ParameterHandler parameterHandler, + String sql, List params, long number, long size) { this.dataSource = dataSource; this.statementConfiguration = statementConfiguration; this.sql = sql; this.params = params; + this.parameterHandler = parameterHandler; this.pageNumber = number; this.pageSize = size; } @@ -70,7 +73,7 @@ private List getData(FetchMapper mapper, ParameterHandler parameterHan return Utils.fetch(dataSource, statementConfiguration, query.sql(), query.params(), mapper, parameterHandler); } - public PageData fetch(FetchMapper mapper, ParameterHandler parameterHandler) { + public PageData fetch(FetchMapper mapper) { try { long total = getTotal(); long totalPages = 0; @@ -84,8 +87,4 @@ public PageData fetch(FetchMapper mapper, ParameterHandler parameterHa } } - public PageData fetch(FetchMapper mapper) { - return fetch(mapper, null); - } - } diff --git a/jdbc/src/main/java/com/github/fantasy0v0/swift/jdbc/SelectBuilder.java b/jdbc/src/main/java/com/github/fantasy0v0/swift/jdbc/SelectBuilder.java index 8afc384..7fb7109 100644 --- a/jdbc/src/main/java/com/github/fantasy0v0/swift/jdbc/SelectBuilder.java +++ b/jdbc/src/main/java/com/github/fantasy0v0/swift/jdbc/SelectBuilder.java @@ -16,6 +16,8 @@ public class SelectBuilder implements StatementConfigurator { private final List params; + private ParameterHandler parameterHandler; + SelectBuilder(DataSource dataSource, StatementConfiguration statementConfiguration, String sql, List params) { @@ -50,6 +52,11 @@ public SelectBuilder setMaxRows(Integer maxRows) { return this; } + public SelectBuilder setParameterHandler(ParameterHandler parameterHandler) { + this.parameterHandler = parameterHandler; + return this; + } + /** * 进行分页 * @@ -58,10 +65,14 @@ public SelectBuilder setMaxRows(Integer maxRows) { * @return PaginateBuilder */ public PaginateBuilder paginate(long number, long size) { - return new PaginateBuilder(dataSource, statementConfiguration, sql, params, number, size); + return new PaginateBuilder( + dataSource, + statementConfiguration, parameterHandler, + sql, params, number, size + ); } - public List fetch(FetchMapper mapper, ParameterHandler parameterHandler) { + public List fetch(FetchMapper mapper) { try { return Utils.fetch(dataSource, statementConfiguration, sql, params, mapper, parameterHandler); } catch (SQLException e) { @@ -69,15 +80,11 @@ public List fetch(FetchMapper mapper, ParameterHandler parameterHandle } } - public List fetch(FetchMapper mapper) { - return fetch(mapper, null); - } - public List fetch() { return fetch(Utils::fetchByRow); } - public T fetchOne(FetchMapper mapper, ParameterHandler parameterHandler) { + public T fetchOne(FetchMapper mapper) { try { return Utils.fetchOne(dataSource, statementConfiguration, sql, params, mapper, parameterHandler); } catch (SQLException e) { @@ -85,10 +92,6 @@ public T fetchOne(FetchMapper mapper, ParameterHandler parameterHandler) } } - public T fetchOne(FetchMapper mapper) { - return fetchOne(mapper, null); - } - public Object[] fetchOne() { return fetchOne(Utils::fetchByRow); } diff --git a/jdbc/src/main/java/com/github/fantasy0v0/swift/jdbc/UpdateBuilder.java b/jdbc/src/main/java/com/github/fantasy0v0/swift/jdbc/UpdateBuilder.java index c5d2dad..2651511 100644 --- a/jdbc/src/main/java/com/github/fantasy0v0/swift/jdbc/UpdateBuilder.java +++ b/jdbc/src/main/java/com/github/fantasy0v0/swift/jdbc/UpdateBuilder.java @@ -15,6 +15,8 @@ public class UpdateBuilder implements StatementConfigurator { private final String sql; + private ParameterHandler parameterHandler; + UpdateBuilder(DataSource dataSource, StatementConfiguration statementConfiguration, String sql) { this.dataSource = dataSource; this.sql = sql; @@ -46,7 +48,12 @@ public UpdateBuilder setMaxRows(Integer maxRows) { return this; } - public int execute(ParameterHandler parameterHandler, List params) { + public UpdateBuilder setParameterHandler(ParameterHandler parameterHandler) { + this.parameterHandler = parameterHandler; + return this; + } + + public int execute(List params) { try (ConnectionReference ref = ConnectionPoolUtil.getReference(dataSource)) { return Utils.executeUpdate(ref.unwrap(), statementConfiguration, sql, params, parameterHandler); } catch (SQLException e) { @@ -54,23 +61,28 @@ public int execute(ParameterHandler parameterHandler, List params) { } } - public int execute(ParameterHandler parameterHandler, Object... params) { - return execute(parameterHandler, Arrays.stream(params).toList()); - } - - public int execute(List params) { - return execute(null, params); - } - + /** + * 执行更新语句, 这里虽然叫execute, 但执行的是executeUpdate + * @param params params + * @return 受影响的行数 + */ public int execute(Object... params) { - return execute(null, Arrays.stream(params).toList()); + return execute(Arrays.stream(params).toList()); } + /** + * 执行更新语句, 这里虽然叫execute, 但执行的是executeUpdate + * @return 受影响的行数 + */ public int execute() { - return execute(null, (List) null); + return execute((List) null); } - public int[] executeBatch(ParameterHandler parameterHandler, List> batch) { + /** + * 执行更新语句, 这里虽然叫execute, 但执行的是executeUpdate + * @return 受影响的行数 + */ + public int[] batch(List> batch) { try (ConnectionReference ref = ConnectionPoolUtil.getReference(dataSource)) { return Utils.executeUpdateBatch(ref.unwrap(), statementConfiguration, sql, batch, parameterHandler); } catch (SQLException e) { @@ -78,13 +90,8 @@ public int[] executeBatch(ParameterHandler parameterHandler, List> } } - public int[] executeBatch(List> batch) { - return executeBatch(null, batch); - } - - private List _fetch(ParameterHandler parameterHandler, - FetchMapper mapper, - List params, boolean firstOnly) { + private List _fetch(FetchMapper mapper, + List params, boolean firstOnly) { try (ConnectionReference ref = ConnectionPoolUtil.getReference(dataSource)) { return Utils.execute(ref.unwrap(), statementConfiguration, sql, params, parameterHandler, mapper, firstOnly); } catch (SQLException e) { @@ -92,14 +99,9 @@ private List _fetch(ParameterHandler parameterHandler, } } - public List fetch(ParameterHandler parameterHandler, - FetchMapper mapper, + public List fetch(FetchMapper mapper, List params) { - return _fetch(parameterHandler, mapper, params, false); - } - - public List fetch(FetchMapper mapper, List params) { - return fetch(null, mapper, params); + return _fetch(mapper, params, false); } public List fetch(FetchMapper mapper, Object... params) { @@ -107,11 +109,11 @@ public List fetch(FetchMapper mapper, Object... params) { } public List fetch(FetchMapper mapper) { - return fetch(null, mapper, null); + return fetch(mapper, (List) null); } public List fetch(List params) { - return fetch(null, Utils::fetchByRow, params); + return fetch(Utils::fetchByRow, params); } public List fetch(Object... params) { @@ -119,30 +121,25 @@ public List fetch(Object... params) { } public List fetch() { - return fetch(null, Utils::fetchByRow, null); + return fetch(Utils::fetchByRow, (List) null); } - public T fetchOne(ParameterHandler parameterHandler, - FetchMapper mapper, + public T fetchOne(FetchMapper mapper, List params) { - List list = _fetch(parameterHandler, mapper, params, true); + List list = _fetch(mapper, params, true); return (list == null || list.isEmpty()) ? null : list.getFirst(); } - public T fetchOne(FetchMapper mapper, List params) { - return fetchOne(null, mapper, params); - } - public T fetchOne(FetchMapper mapper, Object... params) { return fetchOne(mapper, Arrays.stream(params).toList()); } public T fetchOne(FetchMapper mapper) { - return fetchOne(null, mapper, null); + return fetchOne(mapper, (List) null); } public Object[] fetchOne(List params) { - return fetchOne(null, Utils::fetchByRow, params); + return fetchOne(Utils::fetchByRow, params); } public Object[] fetchOne(Object... params) { @@ -150,30 +147,20 @@ public Object[] fetchOne(Object... params) { } public Object[] fetchOne() { - return fetchOne(null, Utils::fetchByRow, null); + return fetchOne(Utils::fetchByRow, (List) null); } - // TODO - public List fetchBatch(ParameterHandler parameterHandler, - FetchMapper mapper, + public List fetchBatch(FetchMapper mapper, List> params) { try (ConnectionReference ref = ConnectionPoolUtil.getReference(dataSource)) { - return Utils.executeBatch(ref.unwrap(), sql, params, parameterHandler, mapper); + return Utils.executeBatch(ref.unwrap(), statementConfiguration, sql, params, parameterHandler, mapper); } catch (SQLException e) { throw new SwiftSQLException(e); } } - public List fetchBatch(FetchMapper mapper, List> params) { - return fetchBatch(null, mapper, params); - } - - public List fetchBatch(FetchMapper mapper) { - return fetchBatch(null, mapper, null); - } - - public List fetchBatch() { - return fetchBatch(null, Utils::fetchByRow, null); + public List fetchBatch(List> params) { + return fetchBatch(Utils::fetchByRow, params); } } diff --git a/jdbc/src/main/java/com/github/fantasy0v0/swift/jdbc/Utils.java b/jdbc/src/main/java/com/github/fantasy0v0/swift/jdbc/Utils.java index e84e745..1ceee04 100644 --- a/jdbc/src/main/java/com/github/fantasy0v0/swift/jdbc/Utils.java +++ b/jdbc/src/main/java/com/github/fantasy0v0/swift/jdbc/Utils.java @@ -133,27 +133,30 @@ static List execute(Connection conn, StatementConfiguration statementConf } } - static List executeBatch(Connection conn, + static List executeBatch(Connection conn, StatementConfiguration statementConfiguration, String sql, List> batch, ParameterHandler parameterHandler, FetchMapper mapper) throws SQLException { LogUtil.performance().info("executeBatch begin"); + LogUtil.common().warn("This is not real executeBatch"); long startTime = System.nanoTime() / 1000; String callerInfo = printCallerInfo(); LogUtil.sql().debug("executeBatch: [{}], caller: {}", sql, callerInfo); - try (PreparedStatement statement = prepareStatement(conn, sql, null)) { + List list = new ArrayList<>(); + try (PreparedStatement statement = prepareStatement(conn, sql, statementConfiguration)) { if (null != batch) { for (List params : batch) { fillStatementParams(conn, statement, params, parameterHandler); - statement.addBatch(); - } - } - List list = new ArrayList<>(); - while (statement.getMoreResults()) { - try (ResultSet resultSet = statement.getResultSet()) { - List row = fetchByResultSet(resultSet, mapper, true); - if (!row.isEmpty()) { - list.add(row.getFirst()); + boolean result = statement.execute(); + if (!result) { + list.add(null); + continue; + } + try (ResultSet resultSet = statement.getResultSet()) { + List row = fetchByResultSet(resultSet, mapper, true); + if (!row.isEmpty()) { + list.add(row.getFirst()); + } } } } diff --git a/jdbc/src/test/java/test/SelectTest.java b/jdbc/src/test/java/test/SelectTest.java index d50a938..3f6600c 100644 --- a/jdbc/src/test/java/test/SelectTest.java +++ b/jdbc/src/test/java/test/SelectTest.java @@ -29,10 +29,10 @@ class SelectTest { @TestFactory List testAllDatabase() { return ContainerUtil.testAllContainers(() -> List.of( - new JdbcTest("testFetch", this::testFetch), - new JdbcTest("testFetchOne", this::testFetchOne), - new JdbcTest("testPredicate", this::testPredicate), - new JdbcTest("testJson", this::testJson) + JdbcTest.of("testFetch", this::testFetch), + JdbcTest.of("testFetchOne", this::testFetchOne), + JdbcTest.of("testPredicate", this::testPredicate), + JdbcTest.of("testJson", this::testJson) )); } diff --git a/jdbc/src/test/java/test/UpdateTest.java b/jdbc/src/test/java/test/UpdateTest.java index 10a7619..6e259a4 100644 --- a/jdbc/src/test/java/test/UpdateTest.java +++ b/jdbc/src/test/java/test/UpdateTest.java @@ -6,11 +6,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import test.container.ContainerUtil; -import test.container.JdbcContainer; import test.container.JdbcTest; import javax.sql.DataSource; import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; public class UpdateTest { @@ -20,22 +21,27 @@ public class UpdateTest { @TestFactory List testAllDatabase() { return ContainerUtil.testAllContainers(() -> List.of( - new JdbcTest("test", this::test), - new JdbcTest("testFetch", this::testFetch), - new JdbcTest("testArrayParams", this::testArrayParams), - new JdbcTest("testExecuteBatch", this::testExecuteBatch) + JdbcTest.of("testExecuteUpdate", this::testExecuteUpdate), + JdbcTest.of("testFetch", this::testFetch), + JdbcTest.of("testArrayParams", this::testArrayParams), + JdbcTest.of("testBatch", this::testBatch), + JdbcTest.of("testFetchBatch", this::testFetchBatch) )); } - void test(DataSource dataSource) throws SQLException { + void testExecuteUpdate(DataSource dataSource) { int executed = JDBC.update(""" update student set name = ? where id = ? """).execute("测试修改", 1); Assertions.assertEquals(1, executed); executed = JDBC.update(""" update student set name = ? where id = ? - """).execute("测试修改", 1); + """).execute("测试修改1", 1); Assertions.assertEquals(1, executed); + executed = JDBC.update(""" + update student set name = '测试修改3' + """).execute(); + Assertions.assertTrue(executed > 1); } void testFetch(DataSource dataSource) throws SQLException { @@ -43,7 +49,7 @@ void testFetch(DataSource dataSource) throws SQLException { if (driverClassName.contains("postgresql")) { List result = JDBC.update(""" update student set name = ? where id = ? returning id - """).fetch("测试修改1", 1); + """).fetch("测试修改0", 1); Assertions.assertEquals(1, result.size()); Assertions.assertEquals(1L, result.getFirst()[0]); @@ -52,16 +58,42 @@ void testFetch(DataSource dataSource) throws SQLException { """).fetch("测试修改1"); Assertions.assertTrue(result.size() > 1); - Object[] fetchOne1 = JDBC.update(""" - update student set name = ? where id = ? returning id + Object[] fetchOne2 = JDBC.update(""" + update student set name = ? where id = ? returning id, name """).fetchOne("测试修改2", 1L); - Assertions.assertEquals(1, fetchOne1.length); - Assertions.assertEquals(1L, fetchOne1[0]); + Assertions.assertEquals(2, fetchOne2.length); + Assertions.assertEquals(1L, fetchOne2[0]); + Assertions.assertEquals("测试修改2", fetchOne2[1]); - long fetchOne2 = JDBC.update(""" + long fetchOne3 = JDBC.update(""" update student set name = ? where id = ? returning id """).fetchOne(row -> row.getLong(1), "测试修改3", 1L); - Assertions.assertEquals(1L, fetchOne2); + Assertions.assertEquals(1L, fetchOne3); + String actualName = JDBC.select("select name from student where id = ?", 1L) + .fetchOne(row -> row.getString(1)); + Assertions.assertEquals("测试修改3", actualName); + + Object[] fetchOne4 = JDBC.update(""" + update student set name = '测试修改4' returning id, name + """).fetchOne(); + Assertions.assertEquals(2, fetchOne4.length); + Assertions.assertTrue((long)fetchOne4[0] > 1L); + Assertions.assertEquals("测试修改4", fetchOne4[1]); + + List fetchOne5Params = new ArrayList<>(); + fetchOne5Params.add("测试修改5"); + fetchOne5Params.add(1L); + Object[] fetchOne5 = JDBC.update(""" + update student set name = ? where id = ? returning id, name + """).fetchOne(fetchOne5Params); + Assertions.assertEquals(2, fetchOne5.length); + Assertions.assertEquals(1L, fetchOne5[0]); + Assertions.assertEquals("测试修改5", fetchOne5[1]); + + long fetchOne6 = JDBC.update(""" + update student set name = '测试修改6' where id = 1 returning id + """).fetchOne(row -> row.getLong(1)); + Assertions.assertEquals(1L, fetchOne6); } } @@ -78,12 +110,29 @@ void testArrayParams(DataSource dataSource) { Assertions.assertEquals(params[1], result[1]); } - void testExecuteBatch(DataSource dataSource) { - JDBC.update(""" - update student set name = ? where id = ? - """).executeBatch( + void testBatch(DataSource dataSource) { + int[] executedBatch = JDBC.update(""" + update student set name = ? where id = ? + """).batch( List.of(List.of("测试修改1", 1), List.of("测试修改2", 2)) ); + Assertions.assertTrue(Arrays.stream(executedBatch).allMatch(i -> i == 1)); } + void testFetchBatch(DataSource dataSource) throws SQLException { + String driverClassName = dataSource.unwrap(HikariDataSource.class).getDriverClassName(); + if (!driverClassName.contains("postgresql")) { + log.info("针对postgresql的测试, 其他数据库将跳过"); + return; + } + List> params = List.of(List.of("测试修改1", 1L), List.of("测试修改2", 2L)); + List executedBatch = JDBC.update(""" + update student set name = ? where id = ? returning name, id + """).fetchBatch(params); + Assertions.assertEquals(2, executedBatch.size()); + Assertions.assertEquals(params.get(0).get(0), executedBatch.get(0)[0]); + Assertions.assertEquals(params.get(0).get(1), executedBatch.get(0)[1]); + Assertions.assertEquals(params.get(1).get(0), executedBatch.get(1)[0]); + Assertions.assertEquals(params.get(1).get(1), executedBatch.get(1)[1]); + } } diff --git a/jdbc/src/test/java/test/container/ContainerUtil.java b/jdbc/src/test/java/test/container/ContainerUtil.java index 94d3b9f..fa39ecc 100644 --- a/jdbc/src/test/java/test/container/ContainerUtil.java +++ b/jdbc/src/test/java/test/container/ContainerUtil.java @@ -2,6 +2,8 @@ import com.github.fantasy0v0.swift.jdbc.JDBC; import org.junit.jupiter.api.DynamicTest; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.testcontainers.containers.MySQLContainer; import org.testcontainers.containers.PostgreSQLContainer; @@ -13,6 +15,8 @@ public final class ContainerUtil { + private static final Logger log = LoggerFactory.getLogger(ContainerUtil.class); + public static final PostgreSQLContainer PG = new PostgreSQLContainer<>("postgres:16-alpine"); public static final String PG_LOCATIONS = "classpath:db/pg"; diff --git a/jdbc/src/test/java/test/container/JdbcTest.java b/jdbc/src/test/java/test/container/JdbcTest.java index 9aed774..4577a7b 100644 --- a/jdbc/src/test/java/test/container/JdbcTest.java +++ b/jdbc/src/test/java/test/container/JdbcTest.java @@ -2,4 +2,9 @@ public record JdbcTest(String name, JdbcExecutable executable) { + + public static JdbcTest of(String name, JdbcExecutable executable) { + return new JdbcTest(name, executable); + } + } diff --git a/jdbc/src/test/java/test/jdbc/StatementTest.java b/jdbc/src/test/java/test/jdbc/StatementTest.java index 3f0eacc..afa78a4 100644 --- a/jdbc/src/test/java/test/jdbc/StatementTest.java +++ b/jdbc/src/test/java/test/jdbc/StatementTest.java @@ -12,7 +12,7 @@ import java.sql.*; import java.util.List; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; public class StatementTest { @@ -21,8 +21,8 @@ public class StatementTest { @TestFactory List testAllDatabase() { return ContainerUtil.testAllContainers(() -> List.of( - new JdbcTest("execute", this::execute), - new JdbcTest("executeUpdate", this::executeUpdate) + JdbcTest.of("execute", this::execute), + JdbcTest.of("executeUpdate", this::executeUpdate) )); } @@ -37,9 +37,9 @@ void execute(DataSource dataSource) throws SQLException { ps.setString(1, "fantasy"); ps.setInt(2, 1); // 没有返回内容(不包括生成的主键), 所以是false - assertEquals(false, ps.execute()); + assertFalse(ps.execute()); try (ResultSet resultSet = ps.getGeneratedKeys()) { - assertEquals(true, resultSet.next()); + assertTrue(resultSet.next()); log.debug("key: {}", resultSet.getLong(1)); } } @@ -55,13 +55,17 @@ void execute(DataSource dataSource) throws SQLException { ps.setString(1, "fantasy"); ps.setInt(2, 1); // 在指定autoGeneratedKeys的情况下, 就算有returning, 也会返回false - assertEquals(true, ps.execute()); + assertTrue(ps.execute()); try (ResultSet resultSet = ps.getGeneratedKeys()) { - assertEquals(false, resultSet.next()); + assertFalse(resultSet.next()); } try (ResultSet resultSet = ps.getResultSet()) { - assertEquals(true, resultSet.next()); - log.debug("id: {}, name: {}", resultSet.getLong(1), resultSet.getString(2)); + assertTrue(resultSet.next()); + long id = resultSet.getLong(1); + String name = resultSet.getString(2); + log.debug("id: {}, name: {}", id, name); + assertTrue(id > 0); + assertEquals("fantasy", name); } } } @@ -73,9 +77,9 @@ void execute(DataSource dataSource) throws SQLException { ps.setString(1, "fantasy"); ps.setInt(2, 1); // 在指定autoGeneratedKeys的情况下, 就算有returning, 也会返回false - assertEquals(false, ps.execute()); + assertFalse(ps.execute()); try (ResultSet resultSet = ps.getGeneratedKeys()) { - assertEquals(true, resultSet.next()); + assertTrue(resultSet.next()); log.debug("key: {}", resultSet.getLong(1)); } assertNull(ps.getResultSet()); diff --git a/jdbc/src/test/java/test/jdbc/TransactionTest.java b/jdbc/src/test/java/test/jdbc/TransactionTest.java index 26d83cf..327802a 100644 --- a/jdbc/src/test/java/test/jdbc/TransactionTest.java +++ b/jdbc/src/test/java/test/jdbc/TransactionTest.java @@ -1,6 +1,5 @@ package test.jdbc; -import com.github.fantasy0v0.swift.jdbc.JDBC; import com.github.fantasy0v0.swift.jdbc.exception.SwiftSQLException; import com.zaxxer.hikari.HikariDataSource; import org.junit.jupiter.api.Assertions; @@ -25,22 +24,20 @@ public class TransactionTest { @TestFactory List testAllDatabase() { return ContainerUtil.testAllContainers(() -> List.of( - new JdbcTest("test", this::test), - new JdbcTest("rollback", this::rollback) + JdbcTest.of("test", this::test), + JdbcTest.of("rollback", this::rollback) )); } void test(DataSource dataSource) throws SQLException { String driverClassName = dataSource.unwrap(HikariDataSource.class).getDriverClassName(); - - JDBC.configuration(dataSource); try { transaction(() -> { select("select * from student").fetch(); transaction(Connection.TRANSACTION_READ_UNCOMMITTED, () -> { select("select * from student").fetch(); transaction(Connection.TRANSACTION_READ_COMMITTED, () -> { - modify("update student set name = ? where id = ?") + update("update student set name = ? where id = ?") .execute("修改", 1L); }); }); @@ -57,9 +54,8 @@ void test(DataSource dataSource) throws SQLException { } void rollback(DataSource dataSource) { - JDBC.configuration(dataSource); transaction(() -> { - modify("update student set name = ? where id = ?") + update("update student set name = ? where id = ?") .execute("修改", 1L); }); }