锁定老帖子 主题:Hibernate的动态模型
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-07-10
简介 Hibernate中持久化实体没有必要一定是POJO或者JavaBean对象。 Hibernate也支持动态模型进行持久化实体和数据库之间的映射。 官方文档(3.6)说“此功能正在试验中,也许会在未来版本中发生变化”,现在4.0也出了, 不知道是否发生了变化
动态模型就是完全抛弃了 Java 类的定义, 仅仅定义映射文件即可, 然后在程序中直接使用 Map 进行实体的操作(有一点像结构体那样额。。。)。
动态映射的好处(官方文档):数据变化所需要的时间少了,因为原型不需要实现实体类。你无法进行编译期的类型检查 ,并可能由此会处理很多的运行期异常。但是有了 Hibernate 映射,它使得数据库的 schema 能容易的规格化和合理化,并允许稍后在此之上添加合适的领域模型实现。
实例:
比如需要一个Person类 package chapter4.model; public class Person { private int id; private int age; private String name; // setter、getter省略 }
如果使用动态映射的话,就不需要再编写这个Person类, 只需要编写一个动态映射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>
然后在程序中直接使用Session进行通过Map进行实体操作: 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();
问题是通过动态映射存入数据方便了点, 但是从数据取出数据好像比较难以操作额。
不知道有没有人具体用过这个功能???
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-07-10
不错。又甩开了JPA一步。
|
|
返回顶楼 | |
发表时间:2011-07-11
我突然想不明白java为什么要引入泛型了
|
|
返回顶楼 | |
发表时间:2011-07-12
感觉和MyBatis有点相似了
|
|
返回顶楼 | |
发表时间:2011-07-12
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-07-12
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-07-12
运行效率低下。
|
|
返回顶楼 | |
发表时间:2011-07-12
ray_linn 写道 运行效率低下。 断言? 。。。 不发表意见、 没有测试过效率 |
|
返回顶楼 | |
发表时间:2011-07-12
s929498110 写道 ray_linn 写道 运行效率低下。
断言? 。。。 不发表意见、 没有测试过效率 明摆着要造型的玩意儿。。 |
|
返回顶楼 | |
发表时间:2011-07-13
aa87963014 写道 我突然想不明白java为什么要引入泛型了
是啊,Java想尽可能的规范类型,防止出错,但人就是喜欢不受约束。要不然怎么说JS是那么的灵活,那么受欢迎呢。以后的语言向什么方向发展呢? |
|
返回顶楼 | |