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

对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 stub
28         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 stub
59         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 }

 

posted @ 2015-07-06 23:20  tanzy114  阅读(201)  评论(0编辑  收藏  举报