Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can we fetch the results using one RowMapper object instead of creating objects everytime?

When fetching results from database through SpringJdbcTemplate, everywhere I have seen that they are passing the new object of RowMapper` every time.

Is this required? Or can we just use one object and pass it again and again?

Example:

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

I know this object will be garbage collected later on, but I didn't wanted to create the same object over and over again.

Can I reuse the row mapper instance, like this?:

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

Has this any thread safety issue?

like image 337
munish Avatar asked Jan 22 '16 16:01

munish


2 Answers

Why not just create your RowMapper and let Spring manage it? There should be no reason to create a new instance every time. Just autowire in the one managed by Spring. As long as your mapper isn't doing anything non-thread-safe, then should be just fine.

@Component
private RowMapper class...

...

@Service
WhateverService class...

@Autowired
private SomeRowMapper theRowMapper;


public void doSomething() {
    Student student = jdbcTemplateObject.queryForObject(SQL, new Object[] { id }, theRowMapper);
}
like image 115
LetsBeFrank Avatar answered Sep 30 '22 05:09

LetsBeFrank


Yes you should be able to reuse the object.

As long as your class is thread safe there is no issue. JdbcTemplate is thread safe by design

like image 34
monsocla Avatar answered Sep 30 '22 05:09

monsocla