`

Spring JDBC访问数据库

阅读更多
   近来,研究了spring DAO技术,包括Spring对各种持久化技术的集成支持,下面就主要对Spring  JDBC进行主要讲解。
   Spring本身有一个统一的异常体系,它是一套与实现技术无关,面向DAO语义的异常体系,Spring为不同持久化技术提供了模板类,所以 许多持久化技术本身底层的异常,在通过模板类进行处理时,都会转换为Spring DAO的异常体系,可以进行统一的处理。
                
ORM持久化技术 模板类
JDBC        org.springframework.jdbc.core.JdbcTemplate
Hibernate   org.springframework.orm.hibernate4.HibernateTemplate
iBatis      org.springframework.orm.ibatis.SqlMapClientTemplate
JPA         org.springframework.orm.jpa.JpaTemplate
JDO         org.springframework.orm.jdo.JdoTemplate
TopLink     org.springframework.orm.jpa.JpaTemplate

   有了模板类,spring也提供了一套支持类,为我们完成了定义相应的模板和数据资源的工作。如JdbcDaoSupport.
   下面用一个简单的例子介绍JdbcTemplate的配置与使用
  
@Repository
public class ForumDao {

	@Autowired
	private JdbcTemplate jdbcTemplate;

        public void initDb() {
		final String sql = "create table t_user(user_id int primary key,user_name varchar(60))";
		jdbcTemplate.execute(sql);
	}
	
	public  void  addForum(Forum forum){
		String sql="insert into t_forum(froum_name,forum_desc) values(?,?)";
		Object[] paramsObjects=new Object[]{forum.getForumName(),forum.getForumDesc()};
		jdbcTemplate.update(sql, paramsObjects);
	}

	public void addForums(final List<Forum> forums) {
        
		final String addForum="insert into t_forum(forum_name,forum_desc) values(?,?)";
		
		jdbcTemplate.batchUpdate(addForum, new BatchPreparedStatementSetter() {
			
			@Override
			public void setValues(PreparedStatement ps, int index) throws SQLException {
				Forum forum=forums.get(index);
				ps.setString(1,forum.getForumName());
				ps.setString(2,forum.getForumDesc());
				
			}
			
			@Override
			public int getBatchSize() {
				
				return forums.size();
			}
		});
	}
	
	
	public  Forum  getForum(final int forumId){
		String sql="select forum_name,forum_desc form t_forum where forum_id=?";
		
		final Forum forum=new Forum();
		
		jdbcTemplate.query(sql, new Object[]{forumId},new RowCallbackHandler() {
			
			@Override
			public void processRow(ResultSet rs) throws SQLException {
				
				forum.setForumId(forumId);
				forum.setForumName(rs.getString("forum_name"));
				forum.setForumDesc(rs.getString("forum_desc"));
				
				
			}
		});
		
		
		return forum;
	}
    public List<Forum>  getForums(final int forumId,final int toldId){
		String sql="select forum_name,forum_desc form t_forum where forum_id between ? and ?";
		final List<Forum> forums=new ArrayList<Forum>();
		
		jdbcTemplate.query(sql, new Object[]{forumId,toldId}, new RowCallbackHandler() {
			
			@Override
			public void processRow(ResultSet rs) throws SQLException {
				
				Forum forum=new Forum();
				forum.setForumId(forumId);
				forum.setForumName(rs.getString("forum_name"));
				forum.setForumDesc(rs.getString("forum_desc"));
				
				forums.add(forum);
				
				
			}
		});
		
		return forums;
		
		
	}
	
	
	public List<Forum>  getForumsByRowMapper(final int forumId,final int toldId){
		String sql="select forum_name,forum_desc form t_forum where forum_id between ? and ?";
		final List<Forum> forums=new ArrayList<Forum>();
		
		jdbcTemplate.query(sql, new Object[]{forumId,toldId},new RowMapper<Forum>() {

			@Override
			public Forum mapRow(ResultSet rs, int index) throws SQLException {
				Forum forum=new Forum();
				forum.setForumId(forumId);
				forum.setForumName(rs.getString("forum_name"));
				forum.setForumDesc(rs.getString("forum_desc"));			
				return forum;
			}
		});
		
		return forums;
		
		
	}
}


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:p="http://www.springframework.org/schema/p"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
                        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd  
                        http://www.springframework.org/schema/tx 
  						http://www.springframework.org/schema/tx/spring-tx-3.2.xsd  
                        http://www.springframework.org/schema/context  
                        http://www.springframework.org/schema/context/spring-context-3.2.xsd">
 
	<context:component-scan base-package="com.test"/>  
	
	<context:property-placeholder location="classpath:srping/jdbc.properties"/>
	
	<bean id="dataSource" class="org.apche.commons.dbcp.BasicDataSource"
	   destroy-method="close" 
	   p:driverClassName="${jdbc.driverClassName}"
	   p:url="${jdbc.url}"
	   p:username="${jdbc.username}"
	   p:password="${jdbc.password}"/>
	 
	<bean id="jdbcTemplate" class="com.springframework.jdbc.core.JdbcTemplate"
	   p:dataSource-ref="dataSource"/>
</beans>


   jdbcTemplate封装了许多方法,满足了许多基本需求。
   jdbcTemplate#execute(String sql)
   jdbcTemplate#update(String sql,Object[]params);
   jdbcTemplate#update(String sql,Object[]params,int[] argTypes);
   jdbcTempate#update(String sql,PrepareStatmentSetter pss)
   PrepareStatmentSetter是一个回调接口,定义了一个void setValues(PrepareStatement ps)方法用来执行绑定参数操作
   jdbcTempate#update(PrepareStatmentCreator psc)
   PrepareStatmentCreator也是一个回调接口,该接口定义了一个PreparedStatement createPreparedStatement(Connection conn)方法。
   jdbcTempate#update(PrepareStatmentCreator psc,PrepareStatmentSetter pss)



  返回数据库表自增主键(JdbcTemplate)
  int update(PreparedStatementCreator psc,KeyHolder generatedKeyHodler)
  KeyHodler为一个回调接口,Spring使用它保存新增记录对应主键,接口方法
  Number getKey()throws InvalidDataAccessApiUsageException
  Map<String,Object> getKeys()throws InvalidDataAccessApiUsageException
  List<Map<String,Object>> getKeyList()
  Spring提供了KeyHolder接口的一个通用实现类GeneratedKeyHolder


  jdbcTemplate批量更新数据
  public int[] batchUpdate(String [] sql);
  int[]  batchUpdate(String sql,BatchPreparedStatmentSetter pss)
  BatchPreparedStatmentSetter接口定义了两个方法:
  int  getBatchSize();
  void setValues(PreparedStatment ps,int i);
 
 
  jdbcTemplate查询数据结果集处理
  jdbcTemplate#query(String sql,Object[] params,RowCallbackHandler handler)
RowCallbackHandler 接口有一个
  void processRow(ResultSet rs)throws SQLException
对结果集中的每一行都调用RowCallbackHandler回调接口处理数据。

  使用RowMapper<T>处理结果集。接口方法 T mapRow(ResultSet rs,int rowNum);

 
  程序实例在加载spring容器后就可以使用实例了。可以用ClassPathXmlApplicationContext等加载配置文件获取Spring容器上下文环境使用,也可以配置web.xml讲Spring容器和web容器关联起来,具体看项目情况使用。
  
  
分享到:
评论

相关推荐

    spring-jdbc文件数据库配置加密

    在IT行业中,Spring JDBC是Spring框架的一个重要模块,它提供了对Java Database Connectivity (JDBC)的简化抽象,使得开发者能够更高效、更简洁地处理数据库操作。本文将深入探讨Spring JDBC在数据库配置加密方面的...

    Spring 3.0就这么简单源代码

    《Spring3.0就这么简单》主要介绍了Spring3.0的核心内容,不仅讲解了Spring3.0的基础知识,还深入讨论了SpringIoC容器、SpringAOP、使用SpringJDBC访问数据库、集成Hibernate、Spring的事务管理、SpringMVC、单元...

    Spring JDBC常用Jar包

    Spring JDBC是Spring框架的一部分,主要用于简化Java数据库连接操作。它提供了一个抽象层,使得开发者能够以统一的方式处理各种数据库,而无需直接与JDBC API打交道,从而降低了代码的复杂性和错误率。在"Spring ...

    spring jdbc.zip

    总结来说,Spring JDBC通过JdbcTemplate和一系列辅助工具,极大地简化了Java应用中的数据库操作,使得开发者能够更加专注于业务逻辑,而不是被数据库访问的细节所困扰。同时,Spring JDBC还结合了Spring的其他模块,...

    Spring Jdbc的jar包

    总的来说,Spring JDBC通过提供一套简洁、强大且易用的API,极大地简化了Java应用中的数据库访问,降低了开发难度,提高了代码的可维护性和可靠性。同时,与Spring框架的其他组件无缝集成,使得Spring JDBC成为开发...

    SpringJDBC.rar_SpringJDBC_spring jdbc

    通过这个SpringJDBC.rar的案例,初学者可以学习到如何配置DataSource,如何创建JdbcTemplate实例,以及如何编写和执行SQL语句。同时,实践中还可以了解到如何将Spring JDBC整合到Spring Boot项目中,以及如何处理...

    spring JDbc

    首先,Spring JDBC通过`JdbcTemplate`和`NamedParameterJdbcTemplate`类提供了强大的数据库访问功能。`SpringJdbcTemplate`是其中更为常用的一个,它提供了事务管理、异常转换和SQL执行等服务,使开发者能够更专注于...

    Spring JDBC应用实例讲解

    在本文中,我们将深入探讨Spring JDBC的应用实例,了解如何利用它来实现高效且灵活的数据访问。首先,我们需要理解Spring JDBC是如何通过JdbcTemplate和NamedParameterJdbcTemplate这两个主要工具来封装JDBC操作的。...

    spring jdbc相关包版本5.1.3

    Spring JDBC模块是Spring框架的一部分,它提供了对JDBC(Java Database Connectivity)的高级抽象,简化了数据库操作。在这个场景中,我们关注的是Spring JDBC的5.1.3版本。 **Spring JDBC 5.1.3 版本详解** ...

    spring-jdbc jar包.rar

    《Spring JDBC:构建高效数据访问层》 Spring JDBC是Spring框架的一个重要组成部分,它提供了一种简化传统JDBC编程的抽象层,使得开发者能够更轻松、更安全地处理数据库交互。"spring-jdbc jar包"包含了Spring框架...

    spring对jdbc的支持jar包

    首先,Spring JDBC的核心是`org.springframework.jdbc`包,它提供了一套高级抽象,用于简化数据库操作。在Spring 4.0版本中,这个模块已经相当成熟和完善,能够处理各种复杂的数据库交互任务,同时保持代码的简洁性...

    Spring+Spring MVC+Spring JDBC+MySql实现简单登录注册

    在本项目中,我们主要利用Spring框架,包括其核心模块Spring、MVC模块Spring MVC以及数据访问/集成模块Spring JDBC,结合MySQL数据库来构建一个基础的登录注册系统。以下是这个项目涉及的关键技术点: 1. **Spring...

    SpringMVC+SpringJDBC

    SpringMVC和SpringJDBC是Java开发中两个重要的框架,它们分别是Spring框架在Web层和数据访问层的应用。本文将详细介绍这两个组件的核心概念、工作原理以及如何整合使用,旨在帮助开发者更好地理解和应用。 **...

    SpringJDBC.rar_jdbc spring_spring jd_spring jdbc_spring使用JDBC进行数

    这个“SpringJDBC.rar”压缩包文件可能包含了关于如何在Spring框架中集成和使用JDBC的相关示例和教程。下面将详细解释Spring JDBC的核心概念、功能以及使用方法。 首先,Spring JDBC的核心目标是简化传统的JDBC编程...

    spring JDBC所需jar包

    在Java开发中,Spring框架是不可或缺的一部分,尤其在处理数据访问层时,Spring JDBC提供了一种强大而灵活的方式来管理数据库连接。Spring JDBC模块是Spring框架的一部分,它简化了JDBC的使用,使得开发者可以更加...

    spring4 、 springmvc4.2、springjdbc

    Spring JDBC模块则是Spring提供的一个数据访问层,它简化了JDBC的使用。Spring JDBC提供了一个JdbcTemplate类,通过这个类,开发者可以避免手动处理数据库连接、预编译语句、结果集等繁琐的工作,降低了出错的可能性...

    Spring JDBC相关jar包:spring_jdbc_4.0.0.zip

    Spring JDBC模块的主要目标是减少对JDBC API的直接依赖,通过提供一种更加高级、易于使用的编程模型来简化数据库访问。在这个“spring_jdbc_4.0.0.zip”压缩包中,包含的是Spring JDBC 4.0.0版本的jar文件,即...

    SpringJDBC.rar_SpringJDBC_jdbctemplate_jdbctemplate spring

    在Java的Spring框架中,Spring JDBC(Java Database Connectivity)是一个重要的模块,用于简化数据库操作。Spring JDBC通过提供JdbcTemplate和SimpleJdbcTemplate等工具类,帮助开发者以更安全、更易于管理的方式与...

    Spring JDBC 增删改查

    总结来说,Spring JDBC提供了强大且灵活的数据库访问工具,简化了JDBC的使用,使得开发者能够专注于业务逻辑,而不是底层的数据库操作细节。结合良好的事务管理和异常处理机制,Spring JDBC成为了Java开发中的重要...

    SpringJDBC

    总的来说,Spring JDBC通过简化数据库访问代码,增强事务管理能力,以及提供灵活的查询和结果处理机制,使得Java开发者在处理数据库操作时能更加高效和安全。无论是在小型项目还是大型企业级应用中,Spring JDBC都是...

Global site tag (gtag.js) - Google Analytics