- Spring Boot 重写JdbcTemplate类
- 前言
- 一、获取容器中的bean(JdbcTemplate)
- 二、继承JdbcTemplate类,然后注入到容器中
- 总结
前言
很多时候在项目中使用JdbcTemplate来进行数据库操作,返回的数据不一定会满足我们的需要,虽然可以在获取数据后对数据进行处理,如果涉及到的数据比较多或者是处理操作具有很多的重复,就可以试一下本文的方法,推荐使用第二种!
一、获取容器中的bean(JdbcTemplate)
1.创建SpringUtils通过beanname获取容器中的bean对象
@Component
public class SpringUtils implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringUtils.applicationContext = applicationContext;
}
public static T getBean(String beanName) {
if(applicationContext.containsBean(beanName)){
return (T) applicationContext.getBean(beanName);
}else{
return null;
}
}
}
2.编写MyJdbcTemplate类来处理JdbcTemplate的方法返回的数据
@Configuration
public class MyJdbcTemplate{
JdbcTemplate jdbcTemplate;
public List
3.使用MyJdbcTemplate
@Autowired
private MyJdbcTemplate myJdbcTemplate;
//使用
List> list=myJdbcTemplate.myQueryForList(sql,new Object[]{});
以上是第一种方式的过程,获取容器的中的JdbcTemplate的bean,然后再调用bean对象的相关方法,获取返回的数据再加以处理。
二、继承JdbcTemplate类,然后注入到容器中1.MyJdbcTemplateNew 继承JdbcTemplate类
public class MyJdbcTemplateNew extends JdbcTemplate {
public MyJdbcTemplateNew(){
super();
}
public MyJdbcTemplateNew(DataSource dataSource) {
super(dataSource);
}
public MyJdbcTemplateNew(DataSource dataSource, boolean lazyInit) {
super(dataSource,lazyInit);
}
//对JdbcTemplate 类中的queryForList方法进行重写
@Override
public List> queryForList(String sql, @Nullable Object... args) throws DataAccessException {
List> query = this.query(sql, args, this.getColumnMapRowMapper());
//按照业务需要对返回的数据进行处理
.......
return query;
}
2.利用@Configuration和@Bean 注解将MyJdbcTemplateNew实例注入到容器中
@Configuration
public class ConfigFile {
@Bean
public MyJdbcTemplateNew MyJdbcTemplateNew(@Nullable DataSource dataSource){
if(dataSource==null){
return new MyJdbcTemplateNew();
}else{
return new MyJdbcTemplateNew(dataSource);
}
}
}
3.使用MyJdbcTemplateNew
@Autowired
MyJdbcTemplateNew myJdbcTemplateNew;
//调用
List> maps = myJdbcTemplateNew.queryForList(sql, new Object[]{)});
总结
以上的两种方式都可以,第一种是按照自己的方法来的,有些乱,推荐第二种!希望会有一些帮助!



