Spirng + JDBC
1.在Spring中使用JDBC
就像JDBC介绍的那样,直接使用JDBC来访问数据库,还需要建立连接,清理资源,处理异常。SSpring的JDBC框架承担了资源管理和异常处理的工作,简化了JDBC代码。 Spring将数据访问的样板代码(资源管理和异常处理)抽象到模板类中来简化JDBC开发,Spring提供了2个模板类。 JdbcTemplate和NamedParameterJdbcTemplate。其中JdbcTemplate基于索引参数的查询,NamedParameterJdbcTemplate将查询的值以命名参数的形式绑定到SQL,而不是用索引参数。
2.在Spring中配置JdbcTemplate
JdbcTemplate是对JdbcOperations接口的实现类
public class JdbcTemplate extends JdbcAccessor implements JdbcOperations
在Spring中配置JdbcTemplate,就是把JdbcTemplate配置成Spring的bean,并为其设置DataSource。
这种配置方式是javaconfig 参考Spring装配Bean ---通过Java代码装配Bean 2.通过JavaConfig实现注入
import javax.sql.DataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.core.JdbcTemplate;
public class ConfigClass {
//配置Spring的JdbcTemplate
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
3.使用JdbcTemplate查询
配置完JdbcTemplate,就可以使用JdbcTemplate操作数据库进行增删改查。在需要使用JdbcTemplate的类中注入JdbcOperations,借助JdbcOperations的update方法就只要关注sql和参数就行了。不同于传统的JDBC,这里没有资源管理或者异常处理代码。使用JdbcTemplate的方法只需关注于如何从数据库中获取Spitter对象即可。
3.1使用JdbcTemplate 执行add
@Autowired
private JdbcOperations jdbcOperations;
public void add(Spitter spitter){
String addSql = "insert into t_spitter values(?,?)";
jdbcOperations.update(addSql,spitter.getUsername(),spitter.getPassword());
}
3.2使用JdbcTemplate 执行update
@Autowired
private JdbcOperations jdbcOperations;
public void update(Spitter spitter){
String updateSql = "update t_spitter set username = ? where id = ?";
jdbcOperations.update(updateSql, spitter.getUsername(),spitter.getId());
}
3.3使用JdbcTemplate 执行delete
@Autowired
private JdbcOperations jdbcOperations;
public void delete(Spitter spitter){
String deleteSql = "delete from t_spitter where id = ?";
jdbcOperations.update(deleteSql, spitter.getId());
}
3.4使用JdbcTemplate 执行select
JdbcTemplate的queryForObject()方法接收3个参数,Sting对象(查询sql) ;RowMapper对象(把查询结果ResultSet提取数据并映射成Java对象) ;可变参数列表(查询sql中的索引参数值)。
@Autowired
private JdbcOperations jdbcOperations;
public Spitter load(Long id) {
Spitter spitter = new Spitter();
String sql = "select * from t_spitter t where t.id = ? "; //查询语句
spitter = jdbcOperations.queryForObject(sql, new SpitterRowMapper(), id); //执行查询并把结果映射成Java对象
return spitter;
}
这儿要自定义RowMapper接口的实现类如下,从查询结果中提取参数并映射成Java对象
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
public class SpitterRowMapper implements RowMapper<Spitter> {
public Spitter mapRow(ResultSet rs, int rowNum) throws SQLException {
Spitter spitter = new Spitter();
spitter.setUsername(rs.getString("username"));
spitter.setPassword(rs.getString("password"));
return spitter;
}
}
JdbcTemplate还有很多其它的方法来实现增删改查,待学习补充……
4.在Spring中配置NamedParameterJdbcTemplate
就是简单得把配置成Spring的bean
import javax.sql.DataSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
@Bean
public NamedParameterJdbcTemplate namedParameterJdbcTemplate(DataSource dataSource) {
return new NamedParameterJdbcTemplate(dataSource);
}
通过 NamedParameterJdbcTemplate 增删改查用命名参数,不用索引参数
@Autowired
private JdbcOperations jdbcOperations;
public Spitter laod(String username) {
Spitter spitter = new Spitter();
Map<String, Object> params = new HashMap<String, Object>();
params.put("username", username);
String sql = "select * from t_spitter t where t.username = :username ";
spitter = jdbcOperations.queryForObject(sql, new SpitterRowMapper(), params);
return spitter;
}