2016-01-22 29 views
2

当通过springJdbcTemplate从db中获取结果时,我发现每次都在传递RowMapper的新对象。 这是必需的吗?或者我们可以只使用一个对象并一次又一次地传递它。我们可以使用一个RowMapper对象来获取结果,而不是每次都创建对象吗?

Student student = jdbcTemplateObject.queryForObject(SQL, new Object[] { id }, new StudentRowMapper()); 

我知道这个对象稍后会被垃圾收集,但我不想一次又一次地创建同一个对象。

我可以使用

Student student = jdbcTemplateObject.queryForObject(SQL, new Object[] { id }, this.studentMapper); 

是否存在此线程安全问题?

+1

当然可以,这是正确的方式,而不是创造新的每次迭代的每一次。 – eg04lt3r

+1

*这是否存在线程安全问题?*这一切都取决于StudentRowMapper的代码。请注意,这是一个微不足道的过早优化。创建Java对象比执行SQL查询要快几个数量级。 –

回答

2

为什么不创建RowMapper并让Spring管理它?应该没有理由每次创建一个新实例。只需在由Spring管理的那个自动装入。只要你的映射器没有做任何非线程安全的事情,那么应该就好了。

@Component 
...RowMapper class... 

...

@Service 
...WhateverService class... 

@Autowired 
private RowMapperClass theRowMapper; 


public void doSomething() { 
Student student = jdbcTemplateObject.queryForObject(SQL, new Object[] { id }, theRowMapper); 
} 
1

是的,你应该能够重用该对象。

只要你的班级是线程安全的,就没有问题了。 JdbcTemplate是线程安全的设计

相关问题