歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Spring JDBC詳解

本文旨在講述Spring JDBC模塊的用法。Spring JDBC模塊是Spring框架的基礎模塊之一。

一、概述

在Spring JDBC模塊中,所有的類可以被分到四個單獨的包:
1)core
即核心包,它包含了JDBC的核心功能。此包內有很多重要的類,包括:JdbcTemplate類、SimpleJdbcInsert類,SimpleJdbcCall類,以及NamedParameterJdbcTemplate類。
2)datasource
即數據源包,訪問數據源的實用工具類。它有多種數據源的實現,可以在JavaEE容器外部測試JDBC代碼。
3)object
即對象包,以面向對象的方式訪問數據庫。它允許執行查詢並返回結果作為業務對象。它可以在數據表的列和業務對象的屬性之間映射查詢結果。
4)support
即支持包,是core包和object包的支持類。例如提供了異常轉換功能的SQLException類。

二、配置
下面我們以MySQL數據庫為例,開始簡單的數據源配置:

@Configuration
@ComponentScan("com.ch.myalbumjdbc")
public class SpringJdbcConfig {
    @Bean
    public DataSource mysqlDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/springjdbc");
        dataSource.setUsername("guest_user");
        dataSource.setPassword("guest_password");


        return dataSource;
    }
}

或者,您還可以利用嵌入式數據庫進行開發或測試,比如用HSQL嵌入式數據庫進行快速配置並創建實例:

@Bean
public DataSource dataSource() {
    return new EmbeddedDatabaseBuilder()
        .setType(EmbeddedDatabaseType.HSQL)
        .addScript("classpath:jdbc/schema.sql")
        .addScript("classpath:jdbc/test-data.sql").build();
}

最後,也可以使用XML配置來實現前面的注釋配置的效果:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
  destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/springjdbc"/>
    <property name="username" value="guest_user"/>
    <property name="password" value="guest_password"/>
</bean>

三、JdbcTemplate的使用和運行查詢
1、基本的查詢
JDBC模板是Spring JDBC模塊中主要的API,它提供了常見的數據庫訪問功能:

int result = jdbcTemplate.queryForObject(
"SELECT COUNT(*) FROM EMPLOYEE", Integer.class);

下面是簡單的插入功能:

public int addEmplyee(int id) {
    return jdbcTemplate.update(
        "INSERT INTO EMPLOYEE VALUES (?, ?, ?, ?)", 5, "Bill", "Gates", "USA");
}

注意提供參數的標准語法——使用“?”字符。下面,讓我們看看替代語法。

2、查詢與命名參數
要獲得命名參數的支持,我們需要使用Spring JDBC提供的其它JDBC模板——NamedParameterJdbcTemplate。
此類封裝了JbdcTemplate,並提供了使用“?”來替代指定參數的傳統語法。它使用傳遞的參數來替換占位符“?”,以執行傳參的查詢:

SqlParameterSource namedParameters = new MapSqlParameterSource().addValue("id", 1);
return namedParameterJdbcTemplate.queryForObject(
"SELECT FIRST_NAME FROM EMPLOYEE WHERE ID = :id", namedParameters, String.class);

請注意,我們使用的是MapSqlParameterSource來提供值的命名參數。
下面是使用bean類的屬性來確定命名參數簡單例子:

Employee employee = new Employee();
employee.setFirstName("James");

String SELECT_BY_ID = "SELECT COUNT(*) FROM EMPLOYEE WHERE FIRST_NAME = :firstName";

SqlParameterSource namedParameters = new BeanPropertySqlParameterSource(employee);
return namedParameterJdbcTemplate.queryForObject(SELECT_BY_ID, namedParameters, Integer.class);

請注意,我們是怎樣利用BeanPropertySqlParameterSource的實現來替代指定的命名參數。

3、把查詢結果映射到Java對象
還有一個非常有用的功能是把查詢結果映射到Java對象——通過實現RowMapper接口。
例如,對於查詢返回的每一行結果,Spring會使用該行映射來填充Java bean:

public class EmployeeRowMapper implements RowMapper<Employee> {
    @Override
    public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
        Employee employee = new Employee();


        employee.setId(rs.getInt("ID"));
        employee.setFirstName(rs.getString("FIRST_NAME"));
        employee.setLastName(rs.getString("LAST_NAME"));
        employee.setAddress(rs.getString("ADDRESS"));


        return employee;
    }
}

現在,我們傳遞行映射器給查詢API,並得到完全填充好的Java對象:

String query = "SELECT * FROM EMPLOYEE WHERE ID = ?";
List<Employee> employees = jdbcTemplate.queryForObject(
query, new Object[] { id }, new EmployeeRowMapper());

更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2015-03/114292p2.htm

--------------------------------------分割線 --------------------------------------

Spring中如何配置Hibernate事務 http://www.linuxidc.com/Linux/2013-12/93681.htm

Struts2整合Spring方法及原理 http://www.linuxidc.com/Linux/2013-12/93692.htm

基於 Spring 設計並實現 RESTful Web Services http://www.linuxidc.com/Linux/2013-10/91974.htm

Spring-3.2.4 + Quartz-2.2.0集成實例 http://www.linuxidc.com/Linux/2013-10/91524.htm

使用 Spring 進行單元測試 http://www.linuxidc.com/Linux/2013-09/89913.htm

運用Spring注解實現Netty服務器端UDP應用程序 http://www.linuxidc.com/Linux/2013-09/89780.htm

Spring 3.x 企業應用開發實戰 PDF完整高清掃描版+源代碼 http://www.linuxidc.com/Linux/2013-10/91357.htm

Copyright © Linux教程網 All Rights Reserved