Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package orz.neptune.prospring3.ch8; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.sql.DataSource; import org.springframework.beans.factory.BeanCreationException; import org.springframework.beans.factory.InitializingBean; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.jdbc.core.namedparam.SqlParameterSource; import org.springframework.jdbc.support.GeneratedKeyHolder; import org.springframework.jdbc.support.KeyHolder; /** * * @author Administrator */ public class JdbcContactDao implements ContactDao, InitializingBean { private DataSource dataSource; private JdbcTemplate jdbcTemplate; private NamedParameterJdbcTemplate namedParameterJdbcTemplate; private UpdateContact updateContact; private InsertContact insertContact; private StoreFunctionQuery storeFunctionQuery; public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; this.jdbcTemplate = new JdbcTemplate(dataSource); this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource); this.updateContact = new UpdateContact(dataSource); this.insertContact = new InsertContact(dataSource); this.storeFunctionQuery = new StoreFunctionQuery(dataSource); } public void afterPropertiesSet() throws Exception { if (dataSource == null) { throw new BeanCreationException("Must set dataSource on ContactDao"); } } public List<Contact> findAll() { String sql = "select id, first_name, last_name, birth_date from contact"; return jdbcTemplate.query(sql, new ContactMapper()); } //RowMapper?? private static final class ContactMapper implements RowMapper<Contact> { public Contact mapRow(ResultSet rs, int rowNum) throws SQLException { Contact contact = new Contact(); contact.setId(rs.getLong("id")); contact.setFirstName(rs.getString("first_name")); contact.setLastName(rs.getString("last_name")); contact.setBirthDate(rs.getDate("birth_date")); return contact; } } public List<Contact> findByFirstName(String firstName) { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } public void insert(Contact contact) { Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put("first_name", contact.getFirstName()); paramMap.put("last_name", contact.getLastName()); paramMap.put("birth_date", contact.getBirthDate()); KeyHolder keyHolder = new GeneratedKeyHolder(); insertContact.updateByNamedParam(paramMap, keyHolder); contact.setId(keyHolder.getKey().longValue()); System.out.println("New contact inserted with id: " + contact.getId()); } public void update(Contact contact) { Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put("first_name", contact.getFirstName()); paramMap.put("last_name", contact.getLastName()); paramMap.put("birth_date", contact.getBirthDate()); paramMap.put("id", contact.getId()); updateContact.updateByNamedParam(paramMap); } public void delete(Long contactId) { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } public String findFirstNameById(Long id) { String firstName = jdbcTemplate.queryForObject("select first_name from contact where id = ?", new Object[] { id }, String.class); return firstName; } public String findLastNameByIdUsingNamedParameter(Long id) { String sql = "select last_name from contact where id = :contactId"; SqlParameterSource namedParameters = new MapSqlParameterSource("contactId", id); return namedParameterJdbcTemplate.queryForObject(sql, namedParameters, String.class); } public String getFirstNameById(Long id) { List<String> result = storeFunctionQuery.execute(id); return result.get(0); } }