初学SpringJDBC

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接口。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值