【20年品牌建站】找北京网站建设公司就选新鸿儒/提供北京网站建设报价/北京网站制作/北京网站设计/网站开发、北京网站建设公司电话【010-51267718】有优惠哦!
简体
繁体 简体
我们的服务遍布中国

我们的服务遍布中国
乃至世界

新鸿儒所服务的品牌地域与城市
北京 天津 上海 广州 深圳 香港 厦门 江苏 浙江 山东
重庆 长沙 武汉 成都 西安 宁夏 丽江 青海 云南 乌鲁木齐
黑龙江 内蒙古 河北 ...
新鸿儒服务与合作的全球各地
美国 加拿大 德国 法国 英国 瑞士 意大利 荷兰
印度 日本 韩国 ...

不论你的品牌在何处
我们都可以提供完善的服务与帮助

致电

010-51267718

java网站建设2-spring dao讲解

发布时间:2013-11-22 浏览:154打印字号:

Spring提供DAO支持的目的是以一致的方式使用不同的数据库访问技术

Spring把特定于某种技术的一场,如SQLException,转化为自己的异常。这种异常以DataAccessException为根的异常层次。

使用JDBC进行数据访问:

Spring至少提供三种不同的工作模式:JdbcTemplate,SimpleJdbc和RDBMS Object风格的面向对象封装方式。

JdbcTemplate:最经典,最常用的Spring对于JDBC访问的方案,也是最低级的封装。其他方式以其作为实现基础。

NamedParameterTemplate:对JdbcTemplate的封装,提供了更加便捷的基于命名参数的使用方式而不是传统的JDBC所使用的?作为参数占位符。

SimpleJdbcTemplate:结合JdbcTemplate和NamedParameterTemplate常用的功能,并利用Java5新特性带来的优势。

SimpleJdbcInsert和SimpleJdbcCall:

RDBMS对象:

Spring Framework的JDBC抽象框架包括:core,datasource,object和support四个包

JdbcTemplate使用:

JdbcTemplate是core包的核心类,替我们完成了资源的创建和释放工作,让我们避免了类似忘记关闭数据库连接这样的错误。

JdbcTemplate中使用的所有SQL会以DEBUG的级别记入日志。

JdbcTemplate优质实践:

(1)JdbcTemplate是线程安全的,因此可以配置一个简单的JdbcTemplate实例,将这个共享的实例注入到多个DAO类中。

(2)使用JdbcTemplate的一个优质实践就是在配置文件中配置一个DataSource实例,然后将这个共享的DataSource注入到DAO中

(3)因为JdbcTemplate是线程安全的,所以无需创建多个JdbcTemplate实例,除非要连接多个数据库。

DataSource接口:

Spring使用DataSource对象来完成获取数据库连接。

使用Spring JDBC时,既可以从JNDI获取数据源,也可以自行配置数据源。

DBCP:DBCP是apache一个数据库连接池项目,使用DBCP需要有三个包:COMMON-DBCP.JAR,COMMON-POOL.JAR和COMMON-COLLECTIONS.JAR

配置:

C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定。配置:

C3P0与DBCP的区别:dbcp没有自动的去回收空闲连接的功能,C3P0有

Query:(select)

返回单值的查询方法:

int rowCount = this.jdbcTemplate.queryForInt("select count(*) from t_actor");

int countOfActorsNamedJoe = this.jdbcTemplate.queryForInt("select count(*) from t_actor where first_name = ?", "Joe");

String lastName = this.jdbcTemplate.queryForObject("select last_name from t_actor where id = ?",
new Object[]{1212L}, String.class);

查询并生成领域对象:

public List findAllActors() {
  return this.jdbcTemplate.query( "select first_name, last_name from t_actor", new ActorMapper());
}
private static final class ActorMapper implements RowMapper {
  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;
  }
}

返回多值的查询方法:

private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource) {
  this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public List> getList() {
  return this.jdbcTemplate.queryForList("select * from mytable");
}

update(update/insert/delete):

this.jdbcTemplate.update("insert into t_actor (first_name, last_name) values (?, ?)","Leonor", "Watling");

this.jdbcTemplate.update("update t_actor set = ? where id = ?","Banjo", 5276L);

this.jdbcTemplate.update("delete from actor where id = ?",Long.valueOf(actorId));

执行DDL:

this.jdbcTemplate.execute("create table mytable (id integer, name varchar(100))");

NamedParameterJdbcTemplate:

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 namedParameterJdbcTemplate.queryForInt(sql, namedParameters);
}

SqlParameterSource有两个实现,一个是MapSqlParameterSource,另一个是BeanPropertySqlParameterSource。

现在就与新鸿儒客服交流

010-51267718

您也可进行在线咨询或预约项目顾问
我要预约
在线咨询