hibernate模拟实现

来源:互联网 发布:淘宝聚划算团购怎么抢 编辑:程序博客网 时间:2024/06/06 10:01
创建Student类//Student.javapublic class Student {      private int id;      private String name;      private int age;      public int getId() {          return id;      }      public void setId(int id) {          this.id = id;      }      public String getName() {          return name;      }      public void setName(String name) {          this.name = name;      }      public int getAge() {          return age;      }      public void setAge(int age) {          this.age = age;      }  }   创建Test类public class Test {      public static void main(String[] args) throws Exception{          Student stu = new Student();    //定义一个Student类对象          //设置属性值          stu.setId(3);                             stu.setName("lishi");          stu.setAge(22);          //生成自定义的Session对象          Session session = new Session();          //执行Session类中的save方法          session.save(stu);      }  }  创建Session类//模拟Hibernate中的Session实现的功能 public class Session {      String tableName = "_student";   //表名      Map<String,String> cfs = new HashMap<String, String>(); //字段名与属性一一对应的关系      String[] methodNames;       //声明一个字符串数组,用来存储方法名      /**      * Session的构造方法      */      public Session(){          cfs.put("id", "id");          cfs.put("name", "name");          cfs.put("age", "age");          methodNames = new String[cfs.size()];         }      /**      * 实现数据插入功能      * @param stu      * @throws Exception      */      public void save(Student stu) throws Exception{          String sql = createSql();       //获取拼接完成的sql语句          Class.forName("com.mysql.jdbc.Driver");         //加载MySQL数据库驱动          //获取数据库连接          Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/hibernate","root", "wwj");          //创建PreparedStement对象          PreparedStatement ps = conn.prepareStatement(sql);          for(int i = 0; i < methodNames.length; i++) {              //利用Java的反射机制,获取对象的方法              Method m = stu.getClass().getMethod(methodNames[i]);                  Class r = m.getReturnType();    //获取方法返回值类型              if(r.getName() == "java.lang.String"){  //如果返回值类型等于”java.lang.String"的话                  String v = (String)m.invoke(stu);   //对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。                  ps.setString(i + 1, v);             //将指定参数设置为给定 Java String 值。              }              if(r.getName() == "int"){                         Integer v = (Integer)m.invoke(stu);                  ps.setInt(i + 1, v);              }              System.out.println(m.getName() + "|" + r.getName());          }          ps.executeUpdate();         //执行sql语句更新数据库          ps.close();                 //释放此PrepareStatement对象的数据库和JDBC资源          conn.close();               //关闭数据连接      }      /**      * 创建SQL语句      * @return      */      private String createSql() {          //拼接字段          String str1 = "";          int index = 0;          for(String s : cfs.keySet()) {              String v = cfs.get(s);              v = Character.toUpperCase(v.charAt(0)) + v.substring(1);              methodNames[index] = "get" + v;              index++;              str1 += s + ",";           }          str1 = str1.substring(0, str1.length() - 1);        //去掉最后面的逗号","          System.out.println(str1);          //拼接(?,?,?,?),问号的个数取决于map的长度          String str2 = "";          for(int i = 0; i < cfs.size(); i++){              str2 += "?,";          }          str2 = str2.substring(0, str2.length() - 1);          System.out.println(str2);          //拼接sql字符串          String sql = "Insert into " + tableName + "(" + str1 + ")" + "values" + "(" + str2 + ")";          System.out.println(sql);          return sql;      }  }  测试结果:id,age,name?,?,?Insert into _student(id,age,name)values(?,?,?)getId|intgetAge|intgetName|java.lang.String
0 0
原创粉丝点击