spring的jdbcTemplate在静态方法中怎么使用?

spring的jdbcTemplate在静态方法中怎么使用?

问题描述:

public class UtilsDao {

@Autowired
@Qualifier("JdbcTemplate")
private static JdbcTemplate jdbcTemplate;


public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
    UtilsDao.jdbcTemplate = jdbcTemplate;
}


 public static JSONArray queryList2Json(String sql){
    List<Map<String, Object>> lists = jdbcTemplate.queryForList(sql);
    JSONArray a = JSONArray.fromObject(lists);
    System.out.println(a.toString());
    return a;
 }

}

请问下在静态方法中怎么获取不到jdbcTemplate实例?jdbcTemplate是个null值

不论是注入jdbcTemplate还是applicationContext,都有静态获取的问题,建议配置SpringContextUtil,存静态的context就可以了,其他的只需要getBean即可获取

不要使用静态方法,jdbcTemplate原本就是单例的。

那用的spring,在静态方法里怎么连接数据库请求数据?
还要用conn.prepareStatemate("")吗?

其实就是静态和普通的加载顺序问题导致没有注入实体。
可以换个思路,因为静态方法是在类加载的时候就已经读进JVM了,所以楼主可以再new完对象之后给再给jdbc赋值

思路是这样子的
@Resource(name="jdbcTemplate")
private JdbcTemplate jdbcTemplate;

    public static JdbcTemplate staticJdbcTemplate;

@PostConstruct //在构造对象完之后调用初始化
public void init() {

class.staticJdbcTemplate = this.jdbcTemplate;

}

系统初始化的时候就应该生成实例,这样就可以,或者重写 spring 初始化方法就可以

我参考了一下
这样写
@Resource(name="jdbcTemplate")
private JdbcTemplate jdbcTemplate;

public static JdbcTemplate staticJdbcTemplate;

@PostConstruct //在构造对象完之后调用初始化
public void init() {
    DbDate.staticJdbcTemplate = this.jdbcTemplate;
}