Spring JDBC分析
发布时间:2021-12-10 21:14:39 所属栏目:教程 来源:互联网
导读:本文旨在讲述Spring JDBC模块的用法。Spring JDBC模块是Spring框架的基础模块之一。 一、概述 在Spring JDBC模块中,所有的类可以被分到四个单独的包: 1)core 即核心包,它包含了JDBC的核心功能。此包内有很多重要的类,包括:JdbcTemplate类、SimpleJdbcI
本文旨在讲述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()); ![]() (编辑:开发网_开封站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |