【Java】jdbcTemplate.query() 查询的三种重载写法

jdbcTemplate.query() 三种重载形式

写法1:public <T> T query(final String sql, final ResultSetExtractor<T> rse)

String sql = "SELECT * FROM A_AUTH.auth_sysinfo";
List<AuthSysInfo> authSysInfoList = jdbcTemplate.query(sql, rs -> {
    List<AuthSysInfo> list = new ArrayList<>();
    while (rs.next()) {
        AuthSysInfo authSysInfo = new AuthSysInfo();
        authSysInfo.setSysId(rs.getString("SYS_ID"));
        authSysInfo.setSysName(rs.getString("SYS_NAME"));
        authSysInfo.setDelFlag(rs.getInt("DEL_FLAG"));

        list.add(authSysInfo); // 写法1: 需要 while 循环 ResultSet,返回列表
    }
    return list;
});

写法2:public void query(String sql, RowCallbackHandler rch)

// 查询 Oracle 数据
List<OrgCodeInfo> list = new ArrayList<>();
String sql = "SELECT * FROM A_AUTH.orgcodeinfo";
jdbcTemplate.query(sql, rs -> {
    OrgCodeInfo orgCodeInfo = new OrgCodeInfo();
    orgCodeInfo.setOrgCode(rs.getString("ORGCODE"));
    orgCodeInfo.setOrgName(rs.getString("ORGNAME"));
    orgCodeInfo.setIsComp(rs.getInt("ISCOMP"));
    orgCodeInfo.setCompId(rs.getString("COMPID"));
    orgCodeInfo.setOrgType(rs.getInt("ORGTYPE"));

    list.add(orgCodeInfo); // 写法2: 比较简练,直接在 lambda 里面操作,无返回值
});

写法3:public <T> List<T> query(String sql, RowMapper<T> rowMapper)

// 查询 Oracle 数据
String sql = "SELECT * FROM A_AUTH.auth_user_menu_res_item";
List<AuthUserMenuResItem> list = jdbcTemplate.query(sql, (rs, i) -> {
    AuthUserMenuResItem authUserMenuResItem = new AuthUserMenuResItem();
    authUserMenuResItem.setMenuId(rs.getLong("MENU_ID"));
    String userId = rs.getString("USER_ID");
    authUserMenuResItem.setUserId(userId);
    authUserMenuResItem.setSysId(rs.getInt("SYS_ID"));
    String resKey = rs.getString("RES_KEY");
    authUserMenuResItem.setResKey(resKey);
    return authUserMenuResItem; // 写法3:推荐,rowMapper 内部循环自己处理每行数据
});
修改后报java.lang.AssertionError: Expecting code to raise a throwable. at com.htsc.service.FundCostStatisticsV2ServiceTest.testGetFundCost_JdbcTemplateThrowsDataAccessException(FundCostStatisticsV2ServiceTest.java:858) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37) at org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:231) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)
10-17
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值