如何通过Java注解使用SimpleJdbcCall连接数据库(附数据源XML配置)
用Java注解结合SimpleJdbcCall连接数据库的实操指南
嘿,作为Spring新手,我结合你给出的XML配置,一步步给你讲清楚怎么用注解搞定SimpleJdbcCall的数据库连接操作!
首先你已经在application-context.xml里配置好了vltDataSource,还引入了通用配置,基础已经打好了,接下来咱们用注解衔接起来:
1. 配置注解类,衔接现有XML配置
如果你的项目是注解+XML混合配置,先创建一个配置类把XML里的数据源引入进来,并初始化JDBC相关的Bean:
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportResource; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.simple.SimpleJdbcCall; import javax.sql.DataSource; import org.springframework.context.annotation.Bean; @Configuration @ImportResource("classpath:application-context.xml") // 引入你现有的XML配置文件 public class JdbcConfig { // 注入XML中定义好的vltDataSource @Bean public JdbcTemplate jdbcTemplate(DataSource vltDataSource) { return new JdbcTemplate(vltDataSource); } // 按需创建SimpleJdbcCall的Bean,也可以在业务类里动态创建 @Bean public SimpleJdbcCall simpleJdbcCall(JdbcTemplate jdbcTemplate) { return new SimpleJdbcCall(jdbcTemplate); } }
如果你的项目已经有主配置类,只需要给它加上@ImportResource注解引入你的XML文件就好。
2. 在业务类中注入并使用SimpleJdbcCall
接下来在你的业务服务类里,通过注解注入SimpleJdbcCall,就可以调用存储过程/函数了。举个调用存储过程的例子:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.simple.SimpleJdbcCall; import org.springframework.stereotype.Service; import java.util.Map; @Service public class UserService { private final SimpleJdbcCall simpleJdbcCall; // 推荐用构造方法注入,避免循环依赖问题 @Autowired public UserService(SimpleJdbcCall simpleJdbcCall) { this.simpleJdbcCall = simpleJdbcCall; // 指定要调用的存储过程名称 this.simpleJdbcCall.withProcedureName("GET_USER_INFO"); // 如果是调用函数,改用.withFunctionName() } public Map<String, Object> getUserInfo(Long userId) { // 构造传入参数 Map<String, Object> params = Map.of("USER_ID", userId); // 执行调用并返回结果 return simpleJdbcCall.execute(params); } }
3. 更灵活的使用方式(无需提前定义SimpleJdbcCall Bean)
如果你不想提前把SimpleJdbcCall注册成Bean,也可以直接注入JdbcTemplate,在需要的时候动态创建:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.simple.SimpleJdbcCall; import org.springframework.stereotype.Service; import java.util.Map; @Service public class UserService { private final JdbcTemplate jdbcTemplate; @Autowired public UserService(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public Map<String, Object> getUserInfo(Long userId) { SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate) .withProcedureName("GET_USER_INFO"); Map<String, Object> params = Map.of("USER_ID", userId); return simpleJdbcCall.execute(params); } }
小提示
- 如果调用的存储过程有复杂返回结果(比如自定义实体类、多结果集),可以用
declareParameters()声明参数类型,或者returningResultSet()指定结果集映射规则。 - 确保项目依赖里已经包含
spring-jdbc和commons-dbcp2(从你的XML配置看,这部分应该已经搞定了)。
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

