码迷,mamicode.com
首页 > 其他好文 > 详细

利用反射实现类通用的DAO层

时间:2016-08-23 20:29:59      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

public void add(Object object) throws SQLException {
        ResultSet rs=null;
        PreparedStatement ps=null;
        Connection con=null;
        //获取表名
        Class c= object.getClass();
        String className=c.getName();
        String declareName=className.substring(className.lastIndexOf(".")+1);
        //拼接sql语句开始
        Field[] fields =c.getDeclaredFields();
        StringBuilder s1=new StringBuilder("insert into ");
        s1.append(declareName);
        StringBuilder s2=new StringBuilder(" values(");
        for (int i = 0; i < fields.length; i++) {
            System.out.println(fields[i].getName());
            if(i>0){
                s2.append(",");
            }
            s2.append("?");
        }
        s1.append(s2+")");
        System.out.println(s1);
        //sql语句完成
        try {
                con=JdbcUtils.getConnection();
                ps=con.prepareStatement(s1.toString());
            //进行循环比较来实现prepareStatement的setObject方法
                             //获取的是所有该类自己声明的方法
                Method[]m= c.getDeclaredMethods();
                for (Method method : m) {
                    String mName=method.getName();
                                        //这里挑出get方法
                    if(mName.startsWith("get")){
                        for (int i = 0; i < fields.length; i++) {
                            //.equalsIgnoreCase()
                            if(fields[i].getName().equalsIgnoreCase(mName.substring(3))){
                                ps.setObject(i+1, method.invoke(object));
                            }
                        }
                    }
                    
                }
                ps.executeUpdate();

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            JdbcUtils.close(rs, ps, con);
        }
    }
                                                                                                                                            

基本上利用类的字节码的反射的getName获取类型名   getDeclaredFields()方法获取该类型声明的参数   getDeclaredMethod()方法获取该类声明的方法名

来实现类通用的...

初学java......0.0

利用反射实现类通用的DAO层

标签:

原文地址:http://www.cnblogs.com/lslqm520/p/5800684.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!