hibernate初入门3--hibernate的简易实现

来源:互联网 发布:xalhar哈萨克音乐软件 编辑:程序博客网 时间:2024/05/01 06:56

对hibernate的几天学习大概了解了hibernate的工作原理,本着作为程序员的严谨(为了记忆而已),在此就重现hibernate简易实现的全过程!!

首先,我们知道hibernate是符合ORM对象关系映射的!!所以我们从测试类出发,默认简易的hibernate已实现;

代码如下

 1 package com.hibernate.Exp150705; 2  3 import org.junit.Test; 4  5 public class TestDemo { 6      7  8     @Test 9     public void test() throws Exception{10         11         Children child = new Children();12         child.setId(1);13         child.setName("小元");14         child.setHeight(176);15         //基于hibernate的工作原理,自己创建一个MySession,用于完成实体类到数据库的映射16         MySession  ms = new MySession();17         //创建的Mysession 具有save方法完成映射;18         ms.save(child);19     }20     21 }

实体类children类也已经实现,代码如下:

 1 package com.hibernate.Exp150705; 2  3 public class Children { 4  5     private int id; 6     private String name; 7     private int height; 8      9     10     public int getId() {11         return id;12     }13     public void setId(int id) {14         this.id = id;15     }16     public String getName() {17         return name;18     }19     public void setName(String name) {20         this.name = name;21     }22     public int getHeight() {23         return height;24     }25     public void setHeight(int height) {26         this.height = height;27     }28     29     30 }

hibernate的简易实现类 MySession ,代码如下

 1 package com.hibernate.Exp150705; 2  3 import java.lang.reflect.Method; 4 import java.sql.Connection; 5 import java.sql.DriverManager; 6 import java.sql.PreparedStatement; 7 import java.util.HashMap; 8 import java.util.Map; 9 10 11 public class MySession {12 13     private String  table = "children";  //表示需要插入数据的表14     Map<String,String>  map = new HashMap<String,String>();//用于保存表列名与实体类属性 (列名,类属性)15     String [] mn;//children类方法名16     17     public MySession(){18         19         map.put("id", "id");20         map.put("name", "name");21         map.put("height", "height");22         23         mn = new String[map.size()];24     }25 26     public void save(Children child) throws Exception {27         // TODO Auto-generated method stub28         String sql = createSql(table);//创建插入语句29         System.out.println(sql);30         Class.forName("com.mysql.jdbc.Driver");31         Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/hibernate","root","TAN19911104");32         PreparedStatement ps = (PreparedStatement) conn.prepareStatement(sql);33         for(int i = 0 ; i < mn.length ; i++){34             35             Method method = child.getClass().getMethod(mn[i]); //利用反射机制获取children类中的指定名称的方法36             String returnTypeName = method.getReturnType().getName();//获取该方法的返回值37             38             if(returnTypeName.equals("java.lang.String")){39                 40                 String returnValue = (String) method.invoke(child); //获取返回值41                 ps.setString(i+1, returnValue);42                 43             }44             45             if(returnTypeName.equals("int")){46                 Integer returnValue = (Integer)method.invoke(child);47                 ps.setInt(i+1, returnValue);48             }49             50         }51         52         ps.executeUpdate();53         ps.close();54         55     }56 57     private String createSql(String table) {58         // TODO Auto-generated method stub59         String str1 = "";60         int index = 0;61         for(String m : map.keySet()){//获取方法名并以getId()形式存入mn数组中62             63             mn[index] = "get"+ Character.toUpperCase(m.charAt(0)) + m.substring(1);64             str1 += m+",";65             index++;66         }67         str1 = str1.substring(0, str1.length()-1);68         69         String str2 = "";70         for(int i=0 ; i<map.size() ; i++){   //map.size() 即等于表属性个数71             str2+="?,";72         }73         str2 = str2.substring(0, str2.length()-1); //去掉末尾逗号74         75         String sql = "insert into "+table +"( " + str1 +" ) values ( " +str2 +" )";//insert into table (id,name....) values (?,?,?....)格式类型76         System.out.println(sql);77         return sql;78         79     }80 81 }


0 0