一般查询实体的时候,都需要这么使用/**
     * 根据id查询
     * 
     * @return
     */
    public Emp queryEmpById(Integer id)
    {
        String sql = "select * from emp where empno = ?";
        ParameterizedRowMapper<Emp> mapper = new ParameterizedRowMapper<Emp>()
        {

public Emp mapRow(ResultSet rs, int rowNum) throws SQLException
            {
                Emp emp = new Emp();
                System.out.println("row:" + rowNum);
                emp.setEmpno(rs.getInt("empno"));
                emp.setEname(rs.getString("ename"));
                return emp;
            }
        };

return this.getSimpleJdbcTemplate().queryForObject(sql, mapper, id);
    }
  
能不能像Hibernate那样自动set这些值呢,用反射可以实现.package orm;

import JAVA.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;

/**
* 通用的Object包装类(类型问题,依然是个瓶颈,如果有好的解决方案请pm我)

* 功能:查询对象类型或对象集合时的通用包装类

* @author zdw

*/
@SuppressWarnings("unchecked")
public class ObjectMapper implements ParameterizedRowMapper
{
    private Class clazz;

public ObjectMapper(Class clazz)
    {
        this.clazz = clazz;
    }

/**
     * 重写mapRow方法
     */
    @Override
    public Object mapRow(ResultSet rs, int rowNum) throws SQLException
    {
        try
        {
            Object obj = clazz.newInstance();
            Field fields[] = obj.getClass().getDeclaredFields();
            for (int i = 0; i < fields.length; i++)
            {
                Field field = fields[i];
                // 暴力访问
                field.setAccessible(true);
                this.typeMapper(field, obj, rs);
                // 恢复默认
                field.setAccessible(false);
            }
            return obj;
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }

/**
     * 数据类型包装器
     * 
     * @param field
     *            目标属性
     * @param obj
     *            目标对象
     * @param rs
     *            结果集
     * @throws Exception
     */
    private void typeMapper(Field field, Object obj, ResultSet rs)
            throws Exception
    {
        String type = field.getType().getName();
        if (type.equals("java.lang.String"))
        {
            field.set(obj, rs.getString(field.getName()));
        }
        else if (type.equals("int") || type.equals("java.lang.Integer"))
        {
            field.set(obj, rs.getInt(field.getName()));
        }
        else if (type.equals("long") || type.equals("java.lang.Long"))
        {
            field.set(obj, rs.getLong(field.getName()));
        }
        else if (type.equals("boolean") || type.equals("java.lang.Boolean"))
        {
            field.set(obj, rs.getBoolean(field.getName()));
        }
        else if (type.equals("java.util.Date"))
        {
            field.set(obj, rs.getDate(field.getName()));
        }
    }
}
  
dao:/**
     * 查询操作 (自动setEmp类型所有值)
     * 
     * @return
     */
    public List queryList()
    {
        return this.getJdbcTemplate().query("select * from emp",
                new ObjectMapper(Emp.class));
    }
  
单个查询:public Emp queryEmpById2(Integer id)
    {
        String sql = "select * from emp where empno = ?";
        ObjectMapper om = new ObjectMapper(Emp.class);
        return (Emp) this.getSimpleJdbcTemplate().queryForObject(sql, om, id);
    }
  
测试通过:7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
  
上面是我的一个简单封装,在Spring2.5中及以后版本,已经提供了便捷方法:/**
     * 查询操作 (自动setEmp类型所有值)
     * 
     * @return
     */
    public List queryList()
    {
        return this.getSimpleJdbcTemplate().query(   
                "SELECT * from emp",   
                ParameterizedBeanPropertyRowMapper.newInstance(Emp.class));  
    }
    
    /**
     * 根据id查询
     * 
     * @return
     */
    public Emp queryById(Integer id)
    {
        return this.getSimpleJdbcTemplate().queryForObject(   
                "SELECT * from emp where id = ?",   
                ParameterizedBeanPropertyRowMapper.newInstance(Emp.class),7369);  
    }
  
这样就简单多了,也是用反射实现的http://www.shengshiyouxi.com.

Spring jdbc 对象Mapper的简单封装相关推荐

  1. Spring JDBC的优雅设计 - 异常封装(下)

    在上一篇中,蘑菇君记录了自己封装JDBC异常的骚操作.这一次咱们来看看Spring是如何优雅的封装的. 从哪看起呢?这里不得不提一下蘑菇君看源码的思路: 第一步,打开IDE,打开Spring源码 第二 ...

  2. Spring JDBC 框架一个最简单的Hello World级别的例子

    本地安装mySQL数据库社区版,如果不知道如何安装,可以查看我这篇文章: MySQL社区版的下载和安装 https://blog.csdn.net/i042416/article/details/10 ...

  3. 对JDBC操作数据库的简单封装

    先来回顾一下java对数据库操作的典型步骤 1.创建数据库连接Connection 2.创建一个Statement 3.执行数据库操作,返回结果ResultSet 4.捕获处理异常 5.关闭资源和连接 ...

  4. Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发

    Spring JDBC     * Spring框架对JDBC的简单封装.提供了一个JDBCTemplate对象简化JDBC的开发     * 步骤:         1. 导入jar包        ...

  5. Spring JDBC-使用Spring JDBC获取本地连接对象以及操作BLOB/CLOB类型数据

    概述 如何获取本地数据连接 示例从DBCP数据源中获取Oracle的本地连接对象 相关接口操作 LobCreator LobHandler 插入LOB类型的数据 以块数据的方式读取LOB数据 以流数据 ...

  6. 【JDBC】实现对JDBC 连接的简单封装

    package util;import java.sql.Connection; import java.sql.DriverManager;/**** 实现对JDBC 的封装* @author mq ...

  7. java jdbc 增删改封装_JAVA JDBC 常规增删改查简单封装

    JAVA JDBC 常规增删改查简单封装,可满足大多基本要求 作用: 1, 查询列表是直接返回List对象,不必再遍历: 2, 单条查询直接返回对象: 3, 执行sql仅需一个方法搞定: packag ...

  8. Spring JDBC,JDBCTemplate对象简化JDBC的开发

    Spring JDBC,JDBCTemplate对象简化JDBC的开发 本篇文章中使用到了Druid数据库连接池,和自己创建的一个配合数据库连接池的工具类,本篇文章对于这些没有进行详细说明,对于这个, ...

  9. 使用Spring JDBC进行数据访问 (JdbcTemplate/NamedParameterJdbcTemplate/SimpleJdbcTemplate/SimpleJdbcCall/Stor)

    http://www.cnblogs.com/webcc/archive/2012/04/11/2442680.html 使用Spring JDBC进行数据访问 11.1. 简介 Spring JDB ...

最新文章

  1. 《数学之美》第31章 大数据的威力--谈谈数据的重要性
  2. Unity上使用Linq To XML
  3. Unity3D图形性能优化
  4. 【转】细说.NET 中的多线程 (一 概念)
  5. Java进阶篇设计模式之一 ----- 单例模式
  6. c ringbuffer 源码_Python Ring Buffer的实现
  7. iis展示下载 MP4视频的一些心得
  8. 机顶盒利旧改造,实现安卓和Linux双系统启动
  9. php yaf twig,GitHub - cheerego/happy_yaf: 搭建一个可用的Yaf,包括Laravel的Eloquent ORM、Twig、脚手架、Whoops和使用用例...
  10. win10 纯净版系统如何添加字体的方法
  11. 什么是DAOstack
  12. 35岁以后不建议裸辞
  13. SAP系统md04例外消息说明
  14. JavaScript断言
  15. CGI简介用C来写CGI程序简要指南
  16. Ubuntu安装sysstat
  17. java 抓取 flash 控件,java-从Flash抓取数据(游戏)
  18. CSS权威指南(五)字体
  19. 有些句子,比人还美!真的
  20. 计算机专业英语短文翻译,计算机专业中英文翻译(外文翻译、文献翻译)

热门文章

  1. Object 及toString() 方法的重写
  2. 管理之道(三) - 不要吝惜赞美
  3. 您不能不知的ToString()方法
  4. Chapter 4 : 单行函数
  5. namespace 或The content of element type mapper must match EMPTY
  6. 『Python基础-12』各种推导式(列表推导式、字典推导式、集合推导式)
  7. 成员变量 局部变量 类变量
  8. $* $@ $# $? $$ $! $0 $_
  9. [数分提高]2014-2015-2第9教学周第1次课 (2015-04-28)
  10. 微软工程师测试题——未来