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

原创 2015年07月06日 23:20:17

对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 }


《Linux Shell编程 从初学到精通》 学习笔记

第一章 shell脚本编程概述 1.linux的流行是因为它的高可定制性。由于内核仅有几兆的代码量,我们可以根据需要抽离很多用不到的模块。比如设计一个简陋的计算器,就完全不需要网络模块。 2.L...
  • qq_28926493
  • qq_28926493
  • 2016年05月25日 21:58
  • 3206

Hibernate初入门4--hbm2ddl

在hibernate的配置文件中,存在如下一段代码!! 1 Drop and re-create the database schema on startup --> 2 property ...
  • tanyz114
  • tanyz114
  • 2015年07月09日 00:45
  • 154

Hibernate初入门1

刚开始接触hibernate,顿时对ORM(对象关系映射 Object Relational Mapping )有了几分崇拜之情,但心也是够累的!!不说太多,直接贴图!!     看到这...
  • tanyz114
  • tanyz114
  • 2015年07月03日 00:49
  • 142

hibernate初入门2--Annotation

零基础接触hibernate,在学习的过程中接触到了Annotation(翻译过来“注释”)。在学习过程中, 并不知道annotation怎么发展来的,但通过对比操作,发现了Annotation在编码...
  • tanyz114
  • tanyz114
  • 2015年07月05日 01:00
  • 92

贴吧项目(struts+hibernate)--界面代码

index.jsp: 主题列表 传智播
  • CSDN_GIA
  • CSDN_GIA
  • 2017年03月06日 15:53
  • 626

菜鸟学习Hibernate——简单的一个例子

一、Hibernate开发。 上篇博客已经为大家介绍了持久层框架的发展流程,持久层框架的种类。 为了能够使用Hibernate快速上手,我们先讲解一个简单的Hibernate应用实例hiberna...
  • gwblue
  • gwblue
  • 2014年04月18日 14:56
  • 9334

Eclipse Hibernate 入门小程序

Eclipse Hibernate 入门小程序Hibernate是一个开放源代码的对象关系映射(ORM,最后会有简介)框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用...
  • jd7082210
  • jd7082210
  • 2015年09月10日 16:02
  • 969

【Hibernate】初入门上手实例

1,创建普通Java项目 2,创建User Liberary ,加入依赖包、 除了自带的基本的jar文件,这里我们添加一个jar包库,用于存放相应的jar文件。        jar中一定要包括m...
  • u013034640
  • u013034640
  • 2017年03月03日 20:34
  • 358

Hibernate入门配置详解及例子

1.添加数据库驱动 2.新建Java Project配置Hibernate(myeclipse版本较新,一些版本添加Hibernate可以直接在MyEclispe展开的子项中找到) 1)向添加hi...
  • z28126308
  • z28126308
  • 2016年06月30日 16:41
  • 1012

Hibernate入门学习(一)

Hibernate工作闲暇之余学习入门
  • fb281906011
  • fb281906011
  • 2013年12月28日 15:24
  • 18364
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hibernate初入门3--hibernate的简易实现
举报原因:
原因补充:

(最多只允许输入30个字)