当前位置:编程学习 > JAVA >>

Hibernate的简介和Hinbernate的简单模拟实现

Hibernate的出现和Hinbernate的简单模拟实现
2013年4月14日,继续学习Hibernate框架
1 概念
Hibernate是一种免费的开源的Java语言下的对象关系映射解决方案
Hibernate 有个在.NET Framework 上的实现版本,称为 NHibernate
1.1   为什么出现Hibernate
l  阻抗不匹配
l  如果有对象数据库,hibernate就没用了
1.2   Hibernate在做什么
l  存储
l  查询、加载
l  缓存
 
体系结构图
 
1.3   优点
l  sql语句不用写了,只需要操纵对象,使开发更对象化
l  移植性好
l  提高开发效率
l  透明持久化,不需要实现任何类,任何接口。Pojo类没有实现任何第三方的接口。即没有侵入性
l  轻量级的框架,不依赖于容器
1.4   缺点
l  额外的学习成本
l  配置麻烦
l  复杂的查询效率不高,
l  批量修改、删除效率不高
l  大量数据的查询效率不高
1.5   使用场合
l  不想写sql
l  需要跨平台。
 
1.6   不宜使用的场合
l  实体关系太复杂
l  需要数据库的特定优化机制
l  需要使用存储过程
l  批量更新,批量删除不适合
 
 
 
Hibernate的模拟实现
1. 创建Java项目:Hibernate_OR_Mapping_Simulation
2. 创建包:com.wwj.hibernate.model
3.  创建Student类
/Student.java
[java] 
package com.wwj.hibernate.model;  
  
/** 
 *  
 * @author wwj 
 * Student模型类 
 * 
 */  
public 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;  
    }  
      
      
}  
 
4. 创建包Test
5. 创建Test类
[java]  
package test;  
  
  
import com.wwj.hibernate.model.Student;  
  
/** 
 *  
 * @author wwj 
 * 
 */  
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);  
    }  
}  
 
 
 
6. 创建Session类
[java] 
package test;  
  
import java.lang.reflect.Method;  
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.PreparedStatement;  
import java.util.HashMap;  
import java.util.Map;  
  
import com.wwj.hibernate.model.Student;  
  
/** 
 * 模拟Hibernate中的Session实现的功能 
 * @author wwj 
 * @date  2013/4/14 
 */  
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.Stri
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,