• DAO---反射


    1.DAO--访问数据信息的类,对数据进行增删改查的操作,不包含任何的相关信息

     其他如何使用DAO,定义DAOImplement类直接继承DAO父类 在DAO中进行如下的操作

       1)void update(String sql,Object args);----Insert,Select,DELETE

         

     1 public void update(String sql,Object... args)
     2     {
     3         Connection conn=null;
     4         PreparedStatement ps=null;
     5         try {
     6             conn=JDBCUtils.getMysqlConn();
     7             ps=conn.prepareStatement(sql);
     8             
     9             // args 填补占位符
    10             for(int i=0;i<args.length;i++)
    11             {
    12                 ps.setObject(i+1, args[i]);
    13             }
    14             ps.executeUpdate();
    15         } catch (Exception e) {
    16             // TODO Auto-generated catch block
    17             e.printStackTrace();
    18         }finally{
    19             JDBCUtils.closeMysql(ps, conn);
    20         }
    21     }

        2)<T> T get(Class<T>clazz,String sql,Object args);----查询一条记录返回对应的对象

        返回查询对象的实例: 当我们使用 ResultSet rs=ps.executeQuery(); 得到一个属于ResultSet集合从中得到ResultSetMeta,事实上我们不知道从SQL查询所能够得到一些什么样的东西只能通过反射动态的建立一个对象,将对象封装到JavaBean中,再从JavaBean取得查询的结果

     1      Connection conn=null;
     2         PreparedStatement ps=null;
     3         ResultSet rs=null;
     4         T object=null;
     5         try {
     6             conn=JDBCUtils.getMysqlConn();
     7             ps=conn.prepareStatement(sql);
     8             
     9             // args 填补占位符
    10             for(int i=0;i<args.length;i++)
    11             {
    12                 ps.setObject(i+1, args[i]);
    13             }
    14             // rs 包含的查询填充占位符对应的值
    15             rs=ps.executeQuery();
    16             while(rs.next())
    17             {
    18                 // 得到SQL数据库列的别名,与类的属性名进行反射重建对象
    19                ResultSetMetaData rsmd=rs.getMetaData();
    20                
    21                // Map 将别名与值建立映射的关系
    22                Map<String,Object> map=new HashMap<>();
    23                for(int i=0;i<rsmd.getColumnCount();i++)
    24                {
    25                    String Label=rsmd.getColumnLabel(i+1);
    26                    Object value=rs.getObject(i+1);
    27                    map.put(Label, value);
    28                }
    29                
    30                if(map.size()>0)
    31                {
    32                    //调用反射每一条记录生成新的的对象
    33                     object=clazz.newInstance();
    34                    
    35                    for(Map.Entry<String, Object>entiry:map.entrySet())
    36                    {
    37                        String prop=entiry.getKey();
    38                        Object value=entiry.getValue();
    39                        
    40                        // 直接进行反射
    41                        ReflectionUtils.setFieldValue(object, prop, value);
    42                    }
    43                }
    44                
    45             }
    46             
    47         } catch (Exception e) {
    48             // TODO Auto-generated catch block
    49             e.printStackTrace();
    50         }finally{
    51             JDBCUtils.closeMysql(ps, conn);
    52         }
    53         return object;
    54     }

    对于此Test的案例:sql 中 flow_id flowId 只是为了将sql中别名另起一个别名 为了与类的属性名称对应。

        3) <T> List<T> getForList(Class<T> clazz,String sql,Object args)----查询多条信息返回对象的集合

     1     public <T> List<T> getForList(Class<T> clazz,String sql,Object ...args)
     2     {
     3         Connection conn=null;
     4         PreparedStatement ps=null;
     5         ResultSet rs=null;
     6         List<T> list=new ArrayList<>();
     7         try {
     8             conn=JDBCUtils.getMysqlConn();
     9             ps=conn.prepareStatement(sql);
    10             
    11             // args 填补占位符
    12             for(int i=0;i<args.length;i++)
    13             {
    14                 ps.setObject(i+1, args[i]);
    15             }
    16             // rs 包含的查询填充占位符对应的值
    17             rs=ps.executeQuery();
    18             List< Map<String,Object>> Listmap=new ArrayList();
    19             while(rs.next())
    20             {
    21                 // 得到SQL数据库列的别名,与类的属性名进行反射重建对象
    22                ResultSetMetaData rsmd=rs.getMetaData();
    23                
    24                // Map 将别名与值建立映射的关系
    25               Map<String,Object>map=new HashMap<>();
    26                for(int i=0;i<rsmd.getColumnCount();i++)
    27                {
    28                    String Label=rsmd.getColumnLabel(i+1);
    29                    Object value=rs.getObject(i+1);
    30                    map.put(Label, value);
    31                }
    32                Listmap.add(map);
    33                
    34             }
    35             T bean=null;
    36              if(Listmap.size()>0)
    37              {
    38                   
    39                 for(Map<String,Object> m:Listmap)
    40                 {
    41                       for(Map.Entry<String, Object>entiry:m.entrySet())
    42                        {
    43                            String prop=entiry.getKey();
    44                            Object value=entiry.getValue();
    45                            
    46                            bean=clazz.newInstance();
    47                            // java.beanUtils
    48                            BeanUtils.setProperty(bean, prop, value);
    49                        }
    50                       list.add(bean);
    51                 }
    52              }
    53                
    54             
    55             
    56         } catch (Exception e) {
    57             // TODO Auto-generated catch block
    58             e.printStackTrace();
    59         }finally{
    60             JDBCUtils.closeMysql(ps, conn);
    61         }
    62         return list;
    63     }

       4)<E> E getForValue(Class<T>clazz,String sql,Object args);----查询某条记录的某个字段

       

  • 相关阅读:
    【建站经验】 一个成熟的大型网站系统架构演化之路
    Puppet 安装配置
    SHELL二十篇(读书笔记)
    LINUX常见小问题汇总
    shell eval命令使用
    javaweb三大框架SSH
    Java Web(八) MVC和三层架构
    在CMD中操作mysql数据库出现中文乱码解决方案
    编码与解码
    JSONP
  • 原文地址:https://www.cnblogs.com/woainifanfan/p/6718203.html
Copyright © 2020-2023  润新知