<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的漫漫程序之旅

    專注于JavaWeb開發(fā)
    隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
    數(shù)據(jù)加載中……

    Spring jdbc 對象Mapper的簡單封裝

    一般查詢實體的時候,都需要這么使用:
    /**
         * 根據(jù)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這些值呢,用反射可以實現(xiàn).

    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;
        }


        
    /**
         * 數(shù)據(jù)類型包裝器
         * 
         * 
    @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中及以后版本,已經(jīng)提供了便捷方法:
    /**
         * 查詢操作 (自動setEmp類型所有值)
         * 
         * 
    @return
         
    */

        
    public List queryList()
        
    {
            
    return this.getSimpleJdbcTemplate().query(   
                    
    "SELECT * from emp",   
                    ParameterizedBeanPropertyRowMapper.newInstance(Emp.
    class));  
        }

        
        
    /**
         * 根據(jù)id查詢
         * 
         * 
    @return
         
    */

        
    public Emp queryById(Integer id)
        
    {
            
    return this.getSimpleJdbcTemplate().queryForObject(   
                    
    "SELECT * from emp where id = ?",   
                    ParameterizedBeanPropertyRowMapper.newInstance(Emp.
    class),7369);  
        }

    這樣就簡單多了,也是用反射實現(xiàn)的.


    posted on 2009-03-30 16:28 々上善若水々 閱讀(4346) 評論(1)  編輯  收藏

    評論

    # re: Spring jdbc 對象Mapper的簡單封裝  回復  更多評論   

    樓上說話請自重。我這是自己寫的。
    2009-04-13 08:34 | 々上善若水々

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: a在线视频免费观看| 青青久在线视频免费观看| 亚洲国产日韩一区高清在线| 18观看免费永久视频| 大桥未久亚洲无av码在线| 国产成A人亚洲精V品无码| 丁香花在线观看免费观看| 中文在线日本免费永久18近| 亚洲国产成+人+综合| yy6080久久亚洲精品| 久久国产精品成人片免费| 国产综合成人亚洲区| 亚洲日本国产精华液| 久久久青草青青国产亚洲免观 | 亚洲人成网站在线播放影院在线| 毛片A级毛片免费播放| 在线视频网址免费播放| 中文字幕亚洲精品无码| 亚洲av无码潮喷在线观看| 免费播放春色aⅴ视频| 国产妇乱子伦视频免费| 成人自慰女黄网站免费大全| 天堂亚洲国产中文在线| 亚洲国产综合91精品麻豆| 免费夜色污私人影院在线观看| 狼群影院在线观看免费观看直播| jzzjzz免费观看大片免费| 亚洲人成自拍网站在线观看| 亚洲福利视频导航| 久久久久无码专区亚洲av| 曰皮全部过程视频免费国产30分钟| 国产精品免费无遮挡无码永久视频| WWW亚洲色大成网络.COM| 亚洲va精品中文字幕| 亚洲a在线视频视频| 在线A亚洲老鸭窝天堂| 免费国产真实迷j在线观看| 永久免费av无码不卡在线观看| 日韩免费无码一区二区三区| 国产免费A∨在线播放| 色偷偷亚洲男人天堂|