java手动创建jdbctemplate,java – 每次调用query()时JdbcTemplate都会创建一个新连接吗?...

在下面的示例中,JdbcTemplate是创建两个连接还是一个?

public class MyDao {

private JdbcTemplate jdbcTemplate;

public List getData1() {

return jdbcTemplate.query(mySql, myParams, myCallback);

}

public List getData2() {

jdbcTemplate.query(mySql2, myParams2, myCallback2);

}

}

public class Main {

public static void main(String[] args) {

MyDao dao = new MyDao();

List d1 = dao.getData1();

List d2 = dao.getData2();

doStuff(d1, d2);

}

}

也就是说,它是否重用第一个查询中的连接?我们假设它是使用基本数据源(不是池数据源)构建的.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jdbctemplate.call() 方法是用来调用数据库中的存储过程或函数的。它的用法如下: ```java public void call(String callString, List<SqlParameter> parameters) ``` 其中,callString 是存储过程或函数的调用语句,parameters 是存储过程或函数的参数列表。 例如,我们有一个名为 get_customer 的存储过程,它接受一个参数 customer_id,返回该客户的信息。调用该存储过程的语句如下: ```sql {call get_customer(?)} ``` 我们可以使用 jdbctemplate.call() 方法来调用该存储过程,示例代码如下: ```java List<SqlParameter> parameters = new ArrayList<>(); parameters.add(new SqlParameter(Types.INTEGER)); Map<String, Object> result = jdbcTemplate.call( conn -> conn.prepareCall("{call get_customer(?)}"), parameters, new Object[] { customerId } ); ``` 在以上示例中,我们传入了一个参数 customerId,它的类型为整数。在调用 jdbctemplate.call() 方法,我们需要传入一个参数列表 parameters,其中包含了存储过程的参数信息。在这个例子中,我们只有一个参数,它的类型是整数,所以我们使用了 SqlParameter 类型。我们还需要传入一个 CallableStatementCreator 对象,它用于创建 CallableStatement 对象。在这个例子中,我们使用了 lambda 表达式来创建 CallableStatement 对象。最后,我们将参数列表和参数值传给 jdbctemplate.call() 方法,它将返回一个 Map 对象,其中包含了存储过程的执行结果。 需要注意的是,如果存储过程或函数返回一个结果集,我们需要使用 jdbctemplate.query() 方法来获取结果集。例如,我们有一个名为 get_orders 的存储过程,它接受一个参数 customer_id,返回该客户的订单信息。调用该存储过程的语句如下: ```sql {call get_orders(?)} ``` 我们可以使用 jdbctemplate.call() 方法来调用该存储过程,示例代码如下: ```java List<SqlParameter> parameters = new ArrayList<>(); parameters.add(new SqlParameter(Types.INTEGER)); Map<String, Object> result = jdbcTemplate.call( conn -> conn.prepareCall("{call get_orders(?)}"), parameters, new Object[] { customerId } ); List<Order> orders = jdbcTemplate.query( (ResultSet) result.get("#result-set-1"), (rs, rowNum) -> { Order order = new Order(); order.setId(rs.getInt("order_id")); order.setAmount(rs.getDouble("amount")); return order; } ); ``` 在以上示例中,我们使用了 jdbctemplate.query() 方法来获取存储过程的结果集。请注意,我们需要传入一个 ResultSet 对象和一个 RowMapper 对象,用于将结果集中的每一行映射成一个 Java 对象。在这个例子中,我们将结果集中的每一行映射成一个 Order 对象。结果集的键名为 "#result-set-1",它是由 jdbctemplate.call() 方法自动生成的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值