初学SpringJDBC

来源:互联网 发布:淘宝单刷 编辑:程序博客网 时间:2024/06/05 08:22

Spring JDBC 入门

(1)JdbcTemplate:它创建和处理释放资源,帮助你避免常见的错误,如忘记关闭连接。它执行的基本任务的核心JDBC语句创建和执行等工作流程,离开应用程序代码提供SQL和提取结果。JdbcTemplate类可以执行SQL查询,update语句和存储过程调用,执行迭代结果集和提取返回的参数值。
使用query(select)进行查询操作。
示例:
int countOfActorsNamedJoe = this.jdbcTemplate.queryForObject("select count(*) from t_actor where first_name = ?", Integer.class, "Joe");
String lastName = this.jdbcTemplate.queryForObject("select last_name from t_actor where id = ?",new Object[]{1212L}, String.class);
Actor actor = this.jdbcTemplate.queryForObject("select first_name, last_name from t_actor where id = ?",new Object[]{1212L},new RowMapper<Actor>() {public Actor mapRow(ResultSet rs, int rowNum) throws SQLException {Actor actor = new Actor();actor.setFirstName(rs.getString("first_name"));actor.setLastName(rs.getString("last_name"));return actor;}});
当以上两个代码段存在于相同的应用程序,我们可以删除重复出现在两个RowMapper匿名内部类,并提取到一个单类(通常是一个静态嵌套类)然后引用DAO方法。例如:
public List<Actor> findAllActors() {return this.jdbcTemplate.query( "select first_name, last_name from t_actor", new ActorMapper());}private static final class ActorMapper implements RowMapper<Actor> {public Actor mapRow(ResultSet rs, int rowNum) throws SQLException {Actor actor = new Actor();actor.setFirstName(rs.getString("first_name"));actor.setLastName(rs.getString("last_name"));return actor;}}
使用update(..)方法来执行插入、更新和删除操作。参数值通常作为var提供参数或者作为一个对象数组。
示例
this.jdbcTemplate.update("insert into t_actor (first_name, last_name) values (?, ?)","Leonor", "Watling");
this.jdbcTemplate.update("update t_actor set last_name = ? where id = ?","Banjo", 5276L);
this.jdbcTemplate.update("delete from actor where id = ?",Long.valueOf(actorId));
其他JdbcTemplate操作:你可以使用execute(..)方法执行任意SQL语句,该方法通常用于DDL语句。
示例
this.jdbcTemplate.execute("create table mytable (id integer, name varchar(100))");
(2)NamedParameterJdbcTemplate:NamedParameterJdbcTemplate类增加了对编程的支持JDBC语句使用命名参数,而不是编程JDBC语句只使用经典的占位符(“?”参数。JdbcTemplate NamedParameterJdbcTemplate类包装,代表包装JdbcTemplate做大部分的工作。NamedParameterJdbcTemplate类的不同于JdbcTemplate本身,即编程JDBC语句使用命名参数。
示例
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;public void setDataSource(DataSource dataSource) {this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);}public int countOfActorsByFirstName(String firstName) {String sql = "select count(*) from T_ACTOR where first_name = :first_name";SqlParameterSource namedParameters = new MapSqlParameterSource("first_name", firstName);return this.namedParameterJdbcTemplate.queryForObject(sql, namedParameters, Integer.class);}
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;public void setDataSource(DataSource dataSource) {this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);}public int countOfActorsByFirstName(String firstName) {String sql = "select count(*) from T_ACTOR where first_name = :first_name";Map<String, String> namedParameters = Collections.singletonMap("first_name", firstName);return this.namedParameterJdbcTemplate.queryForObject(sql, namedParameters, Integer.class);}
SqlParameterSource的实现类如下图:

SqlParameterSource命名参数的值来源于NamedParameterJdbcTemplate,MapSqlParameterSource类实现了java.util.Map接口,key/value键值对。

BeanPropertySqlParameterSource类实现SqlParameterSource接口这个类封装任意JavaBean(也就是说,一个类的实例,遵循JavaBean约定),使用包装JavaBean的属性作为命名参数的来源

示例

public class Actor {private Long id;private String firstName;private String lastName;public String getFirstName() {return this.firstName;}public String getLastName() {return this.lastName;}public Long getId() {return this.id;}// setters省略......}

private NamedParameterJdbcTemplate namedParameterJdbcTemplate;public void setDataSource(DataSource dataSource) {this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);}public int countOfActors(Actor exampleActor) {// 注意命名参数匹配Actor类中的属性String sql = "select count(*) from T_ACTOR where first_name = :firstName and last_name = :lastName";SqlParameterSource namedParameters = new BeanPropertySqlParameterSource(exampleActor);return this.namedParameterJdbcTemplate.queryForObject(sql, namedParameters, Integer.class);}
NamedParameterJdbcTemplate类封装一个经典JdbcTemplate模板;如果你需要访问JdbcTemplate类中的方法,你可以使用getJdbcOperations()方法来访问
JdbcTemplate类实现了JdbcOperations接口。






0 0
原创粉丝点击