职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 502|回复: 8

Hibernate的动态模型

[复制链接]
木已 发表于 2011-8-26 09:38 | 显示全部楼层 |阅读模式
简介 Hiberna......
不错。又甩开了JPA......
我突然想不明白jav......
感觉和MyBatis......
SessionFac......
truekbcl写道......
运行效率低下。......
ray_linn写道......
s929498110......
aa87963014......


  


简介
      Hibernate中持久化实体没有必要一定是POJO或者JavaBean对象。 Hibernate也支持动态模型进行持久化实体和数据库之间的映射。 官方文档(3.6)说“此功能正在试验中,也许会在未来版本中发生变化”,现在4.0也出了, 不知道是否发生了变化

      动态模型就是完全抛弃了 Java 类的定义, 仅仅定义映射文件即可, 然后在程序中直接使用 Map 进行实体的操作(有一点像结构体那样额。。。)。

      动态映射的好处(官方文档):数据变化所需要的时间少了,因为原型不需要实现实体类。你无法进行编译期的类型检查 ,并可能由此会处理很多的运行期异常。但是有了 Hibernate 映射,它使得数据库的 schema 能容易的规格化和合理化,并允许稍后在此之上添加合适的领域模型实现。

实例:

比如需要一个Person类
Java代码  
package chapter4.model;   
  
public class Person {   
  
    private int id;   
    private int age;   
    private String name;   
  
    // setter、getter省略   
  
}  

package chapter4.model;

public class Person {

        private int id;
        private int age;
        private String name;

        // setter、getter省略

}
如果使用动态映射的话,就不需要再编写这个Person类, 只需要编写一个动态映射XML即可
Xml代码  
<hibernate-mapping>  
    <!-- 此处不需要类名,和包名 -->  
    <class entity-name="PersonEntity" table="person_entity">  
        <id name="id" type="integer">  
            <generator class="native"/>  
        </id>  
        <property name="age" type="integer"/>  
        <property name="name" type="string"/>  
    </class>  
</hibernate-mapping>  

<hibernate-mapping>
        <!-- 此处不需要类名,和包名 -->
        <class entity-name="PersonEntity" table="person_entity">
                <id name="id" type="integer">
                        <generator class="native"/>
                </id>
                <property name="age" type="integer"/>
                <property name="name" type="string"/>
        </class>
</hibernate-mapping>
然后在程序中直接使用Session进行通过Map进行实体操作:
Java代码  
SessionFactory sf = HibernateUtil.SF;   
Session session = sf.getCurrentSession();   
session.beginTransaction();   
// 通过Map映射实体与数据库   
Map test = new HashMap();   
test.put("age", new Integer(20));   
test.put("name", "动态映射测试");   
session.save("PersonEntity", test);   
// 运行结果: <EM>Hibernate: insert into PersonEntity (age, name) values (?, ?)</EM>   
  
session.getTransaction().commit();   
session.close();  

SessionFactory sf = HibernateUtil.SF;
Session session = sf.getCurrentSession();
session.beginTransaction();
// 通过Map映射实体与数据库
Map test = new HashMap();
test.put("age", new Integer(20));
test.put("name", "动态映射测试");
session.save("PersonEntity", test);
// 运行结果: Hibernate: insert into PersonEntity (age, name) values (?, ?)

session.getTransaction().commit();
session.close();

问题是通过动态映射存入数据方便了点, 但是从数据取出数据好像比较难以操作额。

不知道有没有人具体用过这个功能???  





有烟没火 发表于 2011-8-26 09:38 | 显示全部楼层
不错。又甩开了JPA一步。

走就走吧 发表于 2011-8-26 09:39 | 显示全部楼层
我突然想不明白java为什么要引入泛型了

醉倚西风 发表于 2011-8-26 09:39 | 显示全部楼层
    SessionFactory sf = HibernateUtil.SF;  
    Session session = sf.getCurrentSession();  
    session.beginTransaction();  
    // 通过Map映射实体与数据库  
    Map test = new HashMap();  
    test.put("age", new Integer(20));  
    test.put("name", "动态映射测试");  
    session.save("PersonEntity", test);  
    // 运行结果: <em>Hibernate: insert into PersonEntity (age, name) values (?, ?)</em>  
      
    session.getTransaction().commit();  
    session.close();  
--------------
嗯,这段代码很不错,反正计算机不会抱怨。

天上智喜 发表于 2011-8-26 09:39 | 显示全部楼层
truekbcl 写道
    SessionFactory sf = HibernateUtil.SF;  
    Session session = sf.getCurrentSession();  
    session.beginTransaction();  
    // 通过Map映射实体与数据库  
    Map test = new HashMap();  
    test.put("age", new Integer(20));  
    test.put("name", "动态映射测试");  
    session.save("PersonEntity", test);  
    // 运行结果: <em>Hibernate: insert into PersonEntity (age, name) values (?, ?)</em>  
      
    session.getTransaction().commit();  
    session.close();  
--------------
嗯,这段代码很不错,反正计算机不会抱怨。


? 抱怨什么? 这个代码很正常的吧?

郁闷小男人 发表于 2011-8-26 09:39 | 显示全部楼层
运行效率低下。

北大青鸟 发表于 2011-8-26 09:39 | 显示全部楼层
ray_linn 写道
运行效率低下。

断言?
。。。 不发表意见、 没有测试过效率

fl 发表于 2011-8-26 09:39 | 显示全部楼层
s929498110 写道
ray_linn 写道
运行效率低下。

断言?
。。。 不发表意见、 没有测试过效率


明摆着要造型的玩意儿。。

fl 发表于 2011-8-26 09:40 | 显示全部楼层
aa87963014 写道
我突然想不明白java为什么要引入泛型了

是啊,Java想尽可能的规范类型,防止出错,但人就是喜欢不受约束。要不然怎么说JS是那么的灵活,那么受欢迎呢。以后的语言向什么方向发展呢?
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-9 04:26 , Processed in 0.142734 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表