`
ganqing1234
  • 浏览: 171235 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

公司源码分析 之jdbcTemplate的封装

阅读更多

公司的框架主要是采用spring的。因为是刚刚进公司前几天一直在看源码。现在写下过程,也算是一种积累。之前用的是hinernate,对jdbcTemplate的东西还是不熟。

 

先从Dao的父类AbstractJdbcDAO来说起,里面有这样一个方法:

public List queryForList(String sql, Map params, RowMapper mapper) throws DataAccessException {
    try {
        return getNamedParameterJdbcTemplate().query(sql, params, mapper);
    } catch (EmptyResultDataAccessException e) {
        return Collections.EMPTY_LIST;
    }
}
 

参数RowMapper用于封装ResultSet。这样得到的list的里面每项都为一个map。公司mapRow默认实现如下:

public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
		ResultSetMetaData rsmd = rs.getMetaData();
		int columnCount = rsmd.getColumnCount();
		Map mapOfColValues = createColumnMap(columnCount);
		for (int i = 1; i <= columnCount; i++) {
			String key = getColumnKey(JdbcUtils.lookupColumnName(rsmd, i));
			String otherKey = DynamicBeanUtils.decodeUnderscoreName(key);
			int type = rsmd.getColumnType(i);
			Object obj = null;
			if (type == 1 || type == 12)
				obj = getStringValue(rs, i);
			else if (type == -1)
				obj = getLongStringValue(rs, i);
			else if (type == 2005)
				obj = getClobStringValue(rs, i);
			else
				obj = getColumnValue(rs, i);
			mapOfColValues.put(key, obj);
			mapOfColValues.put(otherKey, obj);
		}

		return mapOfColValues;
	}

  这段代码写的不是很好,首先没有用Types中的常量。另外对于key的处理在最后完全可以只保留

mapOfColValues.put(otherKey, obj);

  当然更好的方法是将结果封装在bo里面,最简单的方法是每个bo就都定义自己的RowMapper实现,这样有些麻烦。公司提供了一个方法,就是采用的是java的反射机制来实现这部分的。

public Object queryForBean(String sql, Map params, Class _class)
			throws DataAccessException {
		return queryForObject(sql, params, DynamicBeanRowMapper.getInstance(
				_class, getSqlHelper(), sql));
	}

 DynamicBeanMapper负责生成封装了bo的rowMapper。

 

分享到:
评论
1 楼 wanmeilingdu 2012-10-29  
getSqlHelper() 这个方法哪里来的啊?

相关推荐

    打印JdbcTemplate执行sql

    `JdbcTemplate`是Spring对JDBC的轻量级封装,它消除了手动管理连接、事务和结果集的繁琐过程,提高了代码的可读性和可维护性。通过使用模板方法设计模式,`JdbcTemplate`提供了一系列静态和非静态的方法来执行各种...

    jdbcTemplate-spring对jdbc的支持

    源码分析有助于理解其工作原理,以便于进行更高效的定制或扩展。 标签"工具"可能指的是JdbcTemplate作为一个工具类库的角色,它是Spring提供的众多数据库访问工具之一,可以帮助开发者构建健壮、易于维护的数据库...

    spring源码分析(1-10)

    3. **Spring JDBC**:Spring提供了JdbcTemplate和JpaTemplate等工具类,简化了数据库访问。它们封装了SQL执行和结果集处理,减少了重复代码,提高了可测试性。同时,Spring的数据源管理、事务管理与JDBC紧密结合,...

    spring源码分析(一)

    ### Spring源码分析知识点 #### 一、Spring框架概述 Spring框架是一个全面的企业级应用开发框架,它通过一系列模块化的组件来支持不同的应用场景和技术需求。Spring的核心价值在于提供了一种简洁的方式来解决企业...

    Java源码分析及个人总结

    Java源码分析是软件开发过程中一个重要的学习环节,它能帮助开发者深入理解代码背后的逻辑,提升编程技巧,以及优化程序性能。在这个过程中,我们通常会关注类的设计、算法的应用、数据结构的选择,以及如何利用Java...

    spring5源码分析笔记

    Spring5源码分析笔记旨在深入理解Spring的工作原理,帮助开发者提升技能,优化代码,以及更好地利用其核心特性。以下是对Spring5源码的一些关键知识点的详细解释: 1. **依赖注入(Dependency Injection,DI)**:...

    spring源码分析

    《Spring源码分析》 Spring框架作为Java领域中不可或缺的一部分,其强大之处在于它提供了丰富的功能,包括依赖注入(Dependency Injection,简称DI)、面向切面编程(Aspect-Oriented Programming,简称AOP)、事务...

    Spring高级之注解驱动开发视频教程

    n 源码分析-自定义JdbcTemplate n 设计模式-RowMapper的策略模式 n 高级应用-NamedParameterJdbcTemplate的使用 n 源码分析-TransactionTemplate n 源码分析-DataSourceUtils n 源码分析-...

    Spring JdbcDaoSupport 批量插入数据

    关于`JdbcDaoSupport`的源码分析,我们可以看到它主要是通过`protected JdbcTemplate getJdbcTemplate()`方法获取`JdbcTemplate`实例。如果用户没有显式设置,`JdbcTemplate`会在初始化时通过`initJdbcTemplate()`...

    一个灵活轻量级的基于SpringjdbcTemplate的ORM

    nimble-orm是一款灵活且轻量级的ORM框架,它是针对Spring JdbcTemplate进行了一层封装,旨在提高开发效率,特别是对于那些表结构变动频繁的互联网项目。nimble-orm的核心在于它能够帮助开发者快速实现对MySQL数据库...

    spring-orm源码

    源码分析可以帮助我们理解SessionFactory的创建过程和使用方式。 5. **JPA集成** 对于JPA,Spring-ORM通过LocalContainerEntityManagerFactoryBean创建EntityManagerFactory。源码展示了Spring如何配置实体扫描、...

    easyframework-data:基于 Spring JdbcTemplate 的数据访问框架

    在实际开发中,`easyframework-data-master` 文件夹可能包含源码、示例项目、配置文件等资源,通过阅读和分析这些文件,可以更好地理解和使用EasyFramework-Data框架。 总之,EasyFramework-Data 是一个旨在简化...

    spring2.5.6 jar包+源码

    三、Spring 2.5.6源码分析 1. **BeanFactory和ApplicationContext**:源码中可以看到Spring如何通过BeanFactory创建并管理bean,以及ApplicationContext如何扩展BeanFactory提供更多的企业级功能。 2. **AOP实现**...

    chap04.rar

    《深入理解JdbcTemplate:基于chap04.rar源码分析》 在Java的Web开发中,数据库操作是不可或缺的一部分。Spring框架中的JdbcTemplate是为了解决数据访问层的繁琐工作而设计的一个工具,它提供了一种简化数据库操作...

    spring1.2.6源码

    源码中,`JdbcTemplate`和`HibernateTemplate`是两个典型的数据库访问模板类,它们封装了SQL执行和结果集处理,简化了数据库操作。 5. **Web层(Web)**:Spring MVC是Spring框架的Web部分,提供了一种模型-视图-...

    Spring源码

    `JdbcTemplate`和`NamedParameterJdbcTemplate`提供了一种简洁的SQL执行方式,而`HibernateTemplate`则是对Hibernate的封装。 Spring MVC是Spring提供的Web MVC框架,用于构建Web应用程序。它包含`...

    Spring技术内幕 学习笔记

    1. **Spring对注解_Annotation_处理源码分析**: - 这部分内容将讲解Spring如何扫描和读取Bean定义,以及如何解析和注入注解配置的资源。它涵盖了Spring的组件扫描机制,如何识别和处理类上的注解,以及注解驱动的...

    spring src 源码

    源码分析有助于深入理解其工作原理,提升编程技能,以及解决实际问题时能够更有效地调试和优化。下面将对Spring 2.5版本的源码进行详细的解析。 1. **核心模块**:Spring的核心模块主要包括`core-container`和`...

    SpringFramework3源码

    源码分析可以帮助开发者深入理解其工作原理,从而更好地利用和定制Spring功能。 1. **依赖注入(Dependency Injection,DI)**:这是Spring的核心特性之一,通过反转控制(Inversion of Control,IoC)容器,将对象...

    Spring与JDBC整合

    4. **源码分析**: - 深入理解Spring JDBC的源码,可以发现它对JDBC的优化主要体现在批处理、结果集处理和事务控制等方面。 - JdbcTemplate通过PreparedStatementCreator和RowCallbackHandler等接口,实现了SQL的...

Global site tag (gtag.js) - Google Analytics