浅谈Hibernate--入门篇

Hibernate是什么

Hibernate是一个轻量级的ORMapping框架

ORMapping原理(Object Relational Mapping)就是把对象里面的数据和数据库里面的数据,按照一定的规则进行映射的过程。

ORMapping基本对应规则:

1:类跟表相对应

2:类的属性跟表的字段相对应

3:类的实例与表中具体的一条记录相对应

Hibernate的实现方式

Hibernate解决的问题:

通过上图我们也能发现,Hibernate主要用来实现Java对象和表之间的映射,除此之外还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。

Hibernate的目标是对于开发者通常的数据持久化相关的编程任务中解放出来。

Hibernate可以帮助你消除或者包装那些针对特定厂商的SQL代码,并且帮你把结果集从表格式的表示形式转换到一系列的对象去。

hibernate优点:

1、封装了jdbc,简化了很多重复性代码。

2、简化了DAO层编码工作,使开发更对象化了。

3、移植性好,支持各种数据库,如果换个数据库只要在配置文件中变换配置就可以了,不用改变hibernate代码。

4、支持透明持久化,因为hibernate操作的是纯粹的(pojo)java类,没有实现任何接口,没有侵入性。所以说它是一个轻量级框架。

下面结合应用实例帮助大家理解:

实体类:

import java.util.Date;
public class User {

	private String id;
	private String username;
	private String userpassword;
	private String createTime;
	private String expireTime;

	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String name) {
		this.username = name;
	}
	public String getUserpassword() {
		return userpassword;
	}
	public void setUserpassword(String password) {
		this.userpassword = password;
	}
	public String getCreateTime() {
		return createTime;
	}
	public void setCreateTime(String createTime) {
		this.createTime = createTime;
	}
	public String getExpireTime() {
		return expireTime;
	}
	public void setExpireTime(String expireTime) {
		this.expireTime = expireTime;
	}
}

创建hibernate映射文件User.hbm.xml

映射文件告诉Hibernate它应该访问数据库里面的哪个表(table)和应该使用表里面的哪些字段(column)。

因为这里只有一个Class ---User和一个Table --- t_user,你只需要建立一个映射文件---User.hbm.xml,来对应User类和t_user表之间的关系。

<hibernate-mapping package="com.bjpowernode.hibernate">
	<class name="User" table="t_user">
		<id name="id">
			<generator class="uuid"></generator>
		</id>
		<property name="username"></property>
		<property name="userpassword"></property>
		<property name="createTime"></property>
		<property name="expireTime"></property>
	</class>

</hibernate-mapping>

配置Hibernate描述文件hibernate.cfg.xml

Hibernate描述文件可以是一个properties或xml文件,其中最重要的是定义数据库的连接。我这里列出的是一个XML格式的hibernate.cfg.xml描述文件。

<hibernate-configuration>
	<session-factory >
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">hejingyuan</property>
		<!-- 方言 -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		<property name="hibernate.show.sql">true</property>
		<property name="hibernate.show.format_sql">true</property>
		<!-- 指定User的映射文件 -->
		<mapping resource="com/bjpowernode/hibernate/User.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

生成表方法

/**
 * 将hbm生成ddl
 * @author Administrator
 *
 */
public class ExportDB {

	public static void main(String[] args) {
		//默认读取hibernate.cfg.xml文件
		Configuration cfg = new Configuration().configure();
		SchemaExport export = new SchemaExport(cfg);
		export.create(true, true);
	}
}

添加用户

public static void main(String[] args) {
		//读取hibernate.cfg.xml文件--缺省默认文件,如果只new的话,会读取porperties
		Configuration cfg=new Configuration().configure();

		//建立SessionFactory,线程安全的,最好一个数据库创建一次
		SessionFactory factory=cfg.buildSessionFactory();

		//取得Session,真正要用的时候才去关联connection,这个connection与我们之前学的不同,称为持久化管理器
		Session session=null;
		try{
			session=factory.openSession();
			//开启事务
			session.beginTransaction();
			User user=new User();
			user.setUsername("张三");
			user.setUserpassword("123");
			user.setCreateTime(new Date().toString());
			user.setExpireTime(new Date().toString());

			//保存User对象
			session.save(user);
			//提交事务
			session.getTransaction().commit();

		}catch(Exception e){
			e.printStackTrace();
			//回滚事务
			session.getTransaction().rollback();
		}finally{
			if(session != null){
				if(session.isOpen()){
					//关闭session
					session.close();
				}
			}
		}

	}

总结:

千里之行始于足下,这篇文章仅是迈向Hibernate大道的一个起点。以上只是简单介绍了Hibernate解决的问题,其实Hibernate就是一个转换器,完成对象实例与数据库表的转换,对JDBC访问数据库的代码进行封装,简化了数据访问层繁琐的重复性代码。

下篇继续!

浅谈Hibernate--入门篇

时间: 2024-10-11 03:15:00

浅谈Hibernate--入门篇的相关文章

浅谈Hibernate入门

前言 最近打算做一个自己的个人网站,经过仔细思考,打算使用hibernate作为开发的ORM框架,因此各种找资料,由于本人是刚刚接触这技术的,所以就找了比较基础的知识来分享下 基本概述 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库.Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hi

Hibernate入门篇——第一个Hibernate应用

Hibernate入门 第一步: 挑选jar包 在工程下新建lib文件夹,然后将Hibernate基本包复制进去.可以采用Maven来获取这些包: <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.2.7.Final</version> </dependency> 也可

浅谈Hibernate关系映射(3)

继上篇博客 一对多关联映射(单向) 上面我们介绍了多对一,我们反过来看一对多不就是多对一吗?那还用再进行不同的映射吗?有什么差别吗?一对多和多对一映射原理是一致的,存储是相同的,也就是生成的数据库的表是一样的,他们之间不同的是维护的关系不同. 他们之间不同点是维护的关系不同 *多对一维护的关系是:多指向一的关系,有了此关系,加载多的时候可以将一加载上来. *一对多维护的关系是:一指向多的关系,有了此关系,在加载一的时候可以将多加载上来. 一个班级有多个学生,通过班级可以看到学生信息. Class

浅谈Hibernate关系映射(2)

继上篇博客 一对一关系映射:一对一关联映射在实际生活中是比较常见的,如人与身份证的关系,通过人这个对象可以找到他相关的内容. 一对一单向(主键): 单向一对一主键关联,靠的是它们的主键相等,从Person中能看到IdCard,也就是把t_idCard中的主键拿过来当做t_Pseron的主键. 如图的线表示一个关联,在person中可以看见idcard.即在person中持有idCard的引用 person类的映射关系 <hibernate-mapping> <class name=&qu

浅谈Hibernate关系映射(4)

继上篇博客 多对多关联映射(单向) 多对多对象关系映射,需要加入一张新表完成基本映射. Hibernate会自动生成中间表 Hibernate使用many-to-many标签来表示多对多的关联,多对多的关联映射,在实体类中,跟一对多一样,也是用集合来表示的. 如下图所示 通过User可以查看Role的信息 User的映射文件 <hibernate-mapping> <class name="com.bjpowernode.hibernate.User"> <

Hibernate入门篇&lt;1&gt;hibernate.cfg.xml学习小结

Hibernate配置文件主要用于配置数据库连接和Hibernate运行时所需的各种属性,这个配置文件应该位于应用程序或Web程序的类文件夹 classes中.Hibernate配置文件支持两种形式,一种是xml格式的配置文件,另一种是Java属性文件格式的配置文件,采用"键=值"的形式.建议采用xml格式的配置文件,xml配置文件可以直接对映射文件进行配置,并由Hibernate自动加载,而properties文件则必须在程序中通过编码加载映射文件. 一)hibernate配置文件模

Core Data浅谈初级入门

Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象.在此数据操作期间,我们不需要编写任何SQL语句,这个有点类似于著名的hibernate持久化框架,不过功能肯定是没有Hibernate强大的.简单地用下图描述下它的作用: 左边是关系模型,即数据库,数据库里面有张person表,person表里面有id.name.age三个字段,而且有2条记录: 右边是对

ios scrollview浅谈(入门)

今天小小激励了下,感谢各位以及csdn的朋友们的支持.我会给大家带来更好的文章,今天最后一篇关于scrollview来做个入门介绍,相信很多朋友已经迫不及待了,哈哈.下面我们进入主题. 新建一个工程: #import "ViewController.h" @interface ViewController () { //存scrollview UIScrollView *_sv; } @end @implementation ViewController - (void)viewDid

浅谈JavaWEB入门必备知识之Servlet入门案例详解

工欲善其事.必先利其器,想要成为JavaWEB高手那么你不知道servlet是一个什么玩意的话,那就肯定没法玩下去,那么servlet究竟是个什么玩意?下面,仅此个人观点并通过一个小小的案例来为大家详述一下什么是servlet... 个人观点:说白了,servlet就是一个java应用程序.一个运行在服务器上java类,servlet就是java处理web请求的一种机制,它具有独立于平台和协议的特性,可以生成动态的Web页面.再形象点,就是你通过IE等浏览器发送一个http请求后会根据你请求的内