hibernate小结

一、 Hibernate学习一段时间了,暂时告一段落,总结一下。通过这段时间的学习,算是基本 入门了,知道了hibernate是个什么样的软件。首先hibernate是个ORM工具,其hibernate首先是个OTM,这里T指的就是Table,Table之间有着各种各样的Relation,这个HIbernate也能“模仿”,也就是ORM,也许Hibernate的作者更看重后者,所以hibernate有很多重要的东西在关系映射上。当然表与实体的映射太简单了,基本上是一一映射就OK了。
实际上Hibernate就完成了一件事儿,从编程的体验上看就是通过hibernate可以使用面向对象的方式操作数据库。引用一段话:在理想环境中,获得任何java对象并将它持久化到数据库应该是很轻松的,不需要编写特殊的代码,也不会有性能损失,而且结果是完全可以移植的。在这样的理想环境中,我们可能会按照以下方式执行数据库操作:
POJO pojo = new POJO();
ORMSolution magic = ORMSolution.getInstance();
magic.save(pojo);
Hibernate是款神奇的软件,只需要你有少量的编程经验就可以完成上述的“理想”,在hibernate中我们是这样操作的:
session = HibernateSessionFactory.getSession();
session.beginTransaction();
User user = new User();
session.save(user);
session.getTransaction.commit();
其中HibernateSessionFactory我们编写的辅助类(很多时候并不需要我们手动编写此类,如果要编写的话也不是很难,就是个单例模式),他是个静态工具类,在hibernate初始化的时候它会被装入内存,且只能有一个。session是hibernate提供的最重要的编程接口,它类似于jdbc的connection, 而user是一个javabean,它与数据库中的一张表对应,它拥有表中所有的字段,当然在类中是属性,含有这些字段的get set方法,这就是实体类,在支持hibernate的系统中这样操作就可以将实体存入数据库。二、 一般使用hibernate开发的步骤 ①引入hibernate需要的jar包 ②配置hibernate配置文件(hibernate.cfg.xml),因为hibernate是对jdbc轻量级的封装,底层还是jdbc我们必须配置次文件,最重要的就是连接数据库的url用户名和密码。 ③编写对应数据库表的实体和映射文件。这个也可以用第三方工具生成。3.0以后映射文件也可以省略,可以使用注解代替。    实体就不用说了,可以认为是hibernate心中的表,而映射文件是告诉hibernate实体类到底与那种表对应(还有表之间的关系)。   一个实体和映射文件的例子:
package com.jfly.hibernate.beans;
public class User {
	private java.lang.Integer id;

	private java.lang.String username;

	private java.lang.String password;

	private java.lang.String email;

	public java.lang.String getEmail() {
		return email;
	}

	public void setEmail(java.lang.String email) {
		this.email = email;
	}

	public java.lang.Integer getId() {
		return id;
	}

	public void setId(java.lang.Integer id) {
		this.id = id;
	}

	public java.lang.String getPassword() {
		return password;
	}

	public void setPassword(java.lang.String password) {
		this.password = password;
	}

	public java.lang.String getUsername() {
		return username;
	}

	public void setUsername(java.lang.String username) {
		this.username = username;
	}
}


映射文件:
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
    
<hibernate-mapping>
<class name="com.jfly.hibernate.beans.User" table="user">
    <id name="id" type="java.lang.Integer" column="id">
        <generator class="assigned" />
    </id>
    <property name="username" type="java.lang.String" column="username" not-null="true" length="50"/>
    <property name="password" type="java.lang.String" column="password" not-null="true" length="50"/>
    <property name="email" type="java.lang.String" column="email" length="60"/>

</class>
</hibernate-mapping>

④在hibernate配置文件中加入此映射信息,虽然实体和表之间映射完成了,还得给hibernate一个查找的入口,可以认为是映射的“总目录”,   它是非常简单的:
<mapping resource="com/jfly/hibernate/beans/hbm/User.hbm.xml" />

 在hibernate启动时会将所有的映射信息加载到一个configuration中,此类将这些信息保存一个hashmap中。 ⑤利用hibernate提供的api编写程序,一般指的是dao层,所有的对数据库的操作都应该写在data access层,并且不包含任何业务逻辑。     比如前面写的存储user。最后你可能还需要编写sevice层,它就是具体的业务逻辑层了,没有一般的规律,但是它要操作数据库必须通过dao层,dao层不知道为什么要操作数据库,因为他是sevice层要求的。这样一来hibernate就屏蔽了底层的操作,使得业务逻辑层的代码非常清晰,而且与dao层是松耦合的。
除了这些基本原理我们使用hibernate还需要了解如下内容: 1、 hibernate对象的三种生命状态 2、操作数据库的两套api,hql和criteria,当然session本身的方法我觉得也可以算是一种 3、关系映射,比如表的一对多的关系中,如果我们需要遍历“一”方和“N”方,我们可能需要首先在外层循环中遍历一方,       然后查找N方得集合,条件是他们的一方等于当前这个一方的值。这并不复杂,但是在hibernate中,实现起来就更为简单,       拿到一个一方,直接调用他的get方法就可以或者对他对应的N方的集合,前提是你在hibernate中做了关系映射。       关于hibernate的关系映射是个很复杂的话题,深入讨论的话它可能引起数据库设计的话题,我们知道数据表之间的关系是由主键来实现的,      关系是客观存在的,而主键是人为设置的。关于这个话题我深受一篇博客的影响,现在也找不到了,他提到数据库的主键应该进可能的简单,      一般来说只有一个,且是无意义的,比如我们可以使用uuid。这样一来hibernate的关系映射可能就会变得简单,而数据的完整性我们应该通过程序来      实现,毕竟对象之间的关系也是一种业务上的行为,应该有业务层来控制,不应该在底层干涉,我认为这是有道理的。由于公司里不用hibernate,关于这块     只有以后再学了。 4、hibernate的两种锁机制。 5、hibernate还有些高级特征,可能一般情况下我们不会用到,但是应该留意一下:hibernate可以使用传统的sql,可以调用存储过程,hibernate中有      事件和监听器,有拦截器这些概念。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值