一般查询实体的时候,都需要这么使用/**
     * 根据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对象批量操作

    以下示例将演示如何使用spring jdbc中的对象进行批量更新.我们将在单次批次操作中更新student表中的记录. student表的结果如下 - CREATE TABLE student( id ...

  2. JDBC【2】-- JDBC工作原理以及简单封装

    目录 1. 工作原理 1.1 加载驱动 1.1.1 类加载相关知识 1.1.2 为什么JDK 1.6之后不需要显示加载了? 1.2 驱动加载完成了,然后呢? 2. 简单封装 1. 工作原理 一般我们主 ...

  3. 初学JDBC,JDBC工具类的简单封装

    //工具类不需要被继承 public final class JdbcUtils{ //封装数据库连接参数,便于后期更改参数值 private static String url="jdbc ...

  4. Spring JDBC(一)jdbcTemplate

    前言 最近工作中经常使用Spring JDBC操作数据库,也断断续续的看了一些源码,便有了写一些总结的想法,希望在能帮助别人的同时,也加深一下自己对Spring JDBC的理解. Spring JDB ...

  5. ref:Spring JDBC框架

    ref:https://blog.csdn.net/u011054333/article/details/54772491 Spring JDBC简介 先来看看一个JDBC的例子.我们可以看到为了执行 ...

  6. Spring JDBC查询返回对象代码跟踪

    在封装方法的时候突然发现通过 ResultSetMetaData的getColumnCount()获取到的列明会多一列(ROWSTAT),而且每次的值都是1,目前没有找到相关信息,在国外网站上看到有类 ...

  7. spring jdbc 查询结果返回对象、对象列表

    首先,需要了解spring jdbc查询时,有三种回调方式来处理查询的结果集.可以参考 使用spring的JdbcTemplate进行查询的三种回调方式的比较,写得还不错. 1.返回对象(queryF ...

  8. spring jdbc查询 依赖JdbcTemplate这个类模版封装JDBC的操作

    package cn.itcast.spring.jdbc; import java.util.List; import org.springframework.jdbc.core.support.J ...

  9. 【Spring JDBC】JdbcTemplate(三)

    传统Jdbc API与Spring jdbcTemplate比较 //JDBC API Statement statement = conn.createStatement(); ResultSet ...

随机推荐

  1. BDIA增强

    SE24     CL_EXITHANDLER的方法GET_INSTANCE中有基本上所有的增强都会走这边,打上断点查找增强名称,或者在程序中全局搜索GET_INSTANCE关键字 然后 SE19 下 ...

  2. 初步掌握Yarn的架构及原理(转)

    1.YARN 是什么? 从业界使用分布式系统的变化趋势和 hadoop 框架的长远发展来看,MapReduce的 JobTracker/TaskTracker 机制需要大规模的调整来修复它在可扩展性, ...

  3. NDK-gdb的错误ERROR(不同于上一篇): Could not extract package's data directory...的解决方法

    这个问题比较龟毛. 我的系统在4.0.4上一直调试好好的,到了2.2的系统居然fail.能检查的地方全部检查过了,居然不行. 最后仔细差了一遍,居然是由于/data目录的属性是777导致.ndk-gd ...

  4. 不断摸索发现用 andy 模拟器很不错,感觉跟真机差不多

    嗯,今天也遇到了模拟的问题.那个慢啊,好几分钟才能开机,加载程序总共差不多十几分钟.当时想如果真做android开发必须换电脑啊.后来不断摸索发现用 andy 模拟器很不错,感觉跟真机差不多. 还是真 ...

  5. [Android阅读代码]android-async-http源码学习一

    android-async-http 下载地址 一个比较常用的Http请求库,基于org.apache.http对http操作进行封装. 特点: 1.每一个HTTP请求发生在UI线程之外,Client ...

  6. phpStorm打开提示 failed to create JVM 的解决的方法

    phpStorm 软件打开执行提示 failed to create JVM的解决的方法. 改动文件 D:\Program Files (x86)\JetBrains\PhpStorm 7.1.3\b ...

  7. iOS 史上最全的图片压缩方法集合

    做上传图片功能,特别是类似于微信,QQ里面,公布9张图片, 少不了碰到一个问题,就是图片压缩问题,当然我也遇到了. 我研究了这个问题,发现网上普遍的方法是例如以下 //压缩图片质量 +(UIImage ...

  8. HDU 3571 N-dimensional Sphere(高斯消元 数论题)

    这道题算是比较综合的了,要用到扩展欧几里得,乘法二分,高斯消元. 看了题解才做出来orz 基本思路是这样,建一个n*(n-1)的行列式,然后高斯消元. 关键就是在建行列式时会暴long long,所以 ...

  9. OCP读书笔记(3) - 使用RMAN恢复目录

    创建恢复目录 在hndx上创建恢复目录:[oracle@oracle admin]$ export ORACLE_SID=hndx[oracle@oracle admin]$ sqlplus / as ...

  10. 欧舒丹 L'Occitane 活力清泉保湿面霜 - 男士护肤 - 香港草莓网StrawberryNET.com

    欧舒丹 L'Occitane 活力清泉保湿面霜 - 男士护肤 - 香港草莓网StrawberryNET.com 欧舒丹 活力清泉保湿面霜 50ml/1.7oz