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

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

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

    我的漫漫程序之旅

    專注于JavaWeb開發
    隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
    數據加載中……

    Spring jdbc 對象Mapper的簡單封裝

    一般查詢實體的時候,都需要這么使用:
    /**
         * 根據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);  
        }

    這樣就簡單多了,也是用反射實現的.


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

    評論

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

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

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


    網站導航:
     
    主站蜘蛛池模板: 免费三级毛片电影片| 日产乱码一卡二卡三免费| 在线aⅴ亚洲中文字幕| 免费jjzz在线播放国产| 97在线免费观看视频| 亚洲av产在线精品亚洲第一站| 在线视频免费国产成人| 国产免费一区二区三区在线观看| 99热亚洲色精品国产88| 久久乐国产精品亚洲综合| 免费观看激色视频网站bd| 男人和女人高潮免费网站| 亚洲国产精品自在在线观看| 国产三级电影免费观看| 99免费在线观看视频| 深夜久久AAAAA级毛片免费看| 亚洲欧洲国产综合| 亚洲伊人久久精品影院| 免费无码A片一区二三区| 毛片在线全部免费观看| 国产亚洲成在线播放va| 亚洲国产中文在线二区三区免| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 亚洲一区中文字幕久久| 大胆亚洲人体视频| 一本无码人妻在中文字幕免费| 国色精品va在线观看免费视频| 亚洲av永久中文无码精品| 亚洲自偷自拍另类12p| 在线观看亚洲成人| 免费国产成人午夜电影| 久久经典免费视频| 国产精品免费大片| 野花香在线视频免费观看大全 | 黄网站在线播放视频免费观看| 亚洲永久在线观看| 亚洲精品韩国美女在线| 久久精品亚洲综合专区| 中文亚洲成a人片在线观看| 四虎永久免费影院在线| 成全视频免费高清 |