`
mzhj
  • 浏览: 227524 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

01、hibernate介绍与动手入门体验

阅读更多


面向对象开发中的问题:模型不匹配(阻抗不匹配)
    Java面向对象语言,对象模型,其主要概念有:继承、关联、多态等,数据库是关系模型,其主要概念有:表、主键、外键等。

 

 

解决办法

  1. 使用JDBC手工转换。
  2. 使用ORM(Object Relation Mapping对象关系映射)框架来解决,主流的ORM框架有Hibernate 、TopLink. OJB 。

JDBC手工转换方法代码示例:

public void saveUser(User user) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn =JdbcUtils.getConnection();
String sql = "insert into user(name, age,birth_day, account) values(?,?,?,?)";
ps = conn.prepareStatement(sql);
ps.setString( 1, user.getName());	//利用对象进行手工转换。
ps.setLong(2, user.getAge());	//利用对象进行手工转换。
ps.setTimestamp(3, new Timestamp(user.getBirthDay().getTime()));	//利用对象进行手工转换。
ps.setLong( 4, user.getAccount());	//利用对象进行手工转换。
pS.executeUpdate();
rs = ps.getGeneratedKeys();
while (rs.next()) {
user.setId(rs.getInt(l));
}
} catch (SQLException e) {
}
}
    

 

安装配置:

    下载地址http://www.hibernate.org,本教程使用3.2.5 。
    将下载目录中/hibernate3.jar和/lib下的hibernate运行时必须的包加入classpath中:
    antlr.jar, cglib.jar, asm.jar, commons-collections.jar, commons-logging.jar, jta.jar, dom4j.jar

连接的是mysql数据库,所以还需要mysql的jdbc驱动,mysql-connector-java-5.0.4-bin.jar。

 

Hibernate目录结构及说明:



 

hibernate的一个简单的例子:

一、在Eclipse里新建一个工程,导入上文所说的开发hibernate所需要的jar包。

 

二、写一个简单实体

User.java

    package com.mzhj.hiberante.domain;

import java.util.Date;

public class User {
	private int id;
	private String name;
	private Date birthday;
	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 Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	
}

    

 

 

三、为这个实体写映射文件(映射文件配置这个实体和数据库的映射关系)

    这个映射文件比较复杂,可以在hibernate-3.2\eg\org\hibernate\auction目录下找到模板文件User.hbm.xml修改。映射文件的后缀不是必须为hbm.xml,但是按照hibernate的规范最好把后缀写成这样,别人一看就知道是hibernate的映射文件了。

 

User.hbm.xml映射文件:

    <?xml version="1.0"?>

 <HIBERNATE-MAPPING package="com.mzhj.hibernate.domain"><!--需要配置映射关系的那个实体所在的包,即User.java所在的包-->

	<CLASS name="User"><!-- 配置User这个类与数据库表的映射关系 -->
		
		<ID name="id">
			<GENERATOR class=native />
		</ID>
	<property name="name"></property>
	<property name="birthday"></property>
	</CLASS>
 </HIBERNATE-MAPPING>
    

 

 

三、为Hibernate写配置文件(配置连接的数据库的信息、映射文件位置等信息),配置文件名必须为hibernate.cfg.xml,并且必须放在类的根路径下

    配置文件比较复杂,在目录hibernate-3.2\etc下拷贝模板hibernate.cfg.xml修改,hiberante有两种格式的配置文件:.properties和.xml,xml文件的可读性和可维护性都好于前者,一般使用xml的配置文件。

    hibernate最终是通过操作jdbc来连接数据库的,因此jdbc驱动等信息也需要在hibernate配置文件中配置。

    hibernate.cfg.xml中的配置信息比较多,配置选项在hibernate-3.2\etc文件夹下的hibernate.properties文件中都可以找到,配置连接MySql的配置文件,定位到hibernate.properties的49行## MySQL位置,下面的信息就是连接mysql数据库的配置信息,前半部分是属性名,后半部分是属性值。定位到361行,找到## auto schema export,配置数据库建表属性。

 

hibernate.cfg.xml代码:

    

<HIBERNATE-CONFIGURATION>
	<SESSION-FACTORY>
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<!-- jdbc驱动配置,hibernate底层是通过jdbc来保存数据的,所以jdbc驱动是必须的。 -->
		
		<property name="hibernate.connection.url">jdbc:mysql:///test</property>
		<!-- 数据库url配置,三个///表示是本地主机的3306端口,也可以不简写jdbc:mysql://localhost:3306/test -->
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">mzhj627354</property>
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		<!-- 设置一下Hibernate的方言,这个设置时告诉hibernate连接的是什么数据库,这个是hibernate跨平台的基础,hibernate根据不同的数据库,把保存对象的语句转化成与具体数据库对应的jdbc语句。 -->
		<property name="hibernate.hbm2ddl.auto">update</property>
		<!-- 配置建表属性,update为如果不一致,会更新一下表结构 ,没有会建表 -->
		<MAPPING resource="com/mzhj/hibernate/domain/User.hbm.xml" />
		<!-- 告诉Hibernate,实体的映射文件在什么地方,hibernate根据映射文件建立起实体与数据库的关系(建表,验证表等),hibernate初始化的时候会自动找类根路径下hibernate.cfg.xml文件,但不会去自动找实体的映射文件,所以要在此配置映射文件位置,否则hibernate将不认识这个实体。 -->
		
	</SESSION-FACTORY>
</HIBERNATE-CONFIGURATION>
    

 

 hibernate.hbm2ddl.auto的四个选项:

    #hibernate.hbm2ddl.auto
  1. create-drop     程序启动,hibernate初始化的时候,先删掉表,然后创建表;程序运行结束后把所有表删掉。
  2. create      程序启动,在创建表前会把表删掉。当虚拟机退出的时候(在hibernate退出的时候),它不会删表        (和上一种通常在测试环境下使用)。
  3. update     如果不一致,会更新一下表结构。如果没有表会新建表。
  4. validate     会校验映射文件跟表结构是否对应,如果不对应,不会update,而是报错。(这种方式更安全一些)。

四、写测试代码

Base.java

package com.mzhj.hibernate;

import java.util.Date;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import com.mzhj.hibernate.domain.User;

public class Base {
	public static void main(String args[]){
		Configuration cfg=new Configuration();	//找到hibernate.cfg.xml文件初始化一下。
		SessionFactory sf=cfg.configure().buildSessionFactory();	//通过初始化对象获得Session工厂。
		//Configuration对象必须先调用一下confgiure方法,否则会出现Hibernate Dialect must be explicitly set错误。
		Session session=sf.openSession(); //得到Session对象。
		User user=new User();	
		user.setBirthday(new Date());
		session.beginTransaction();	//开启事务,否则不能保存成功,除非这个数据库用的引擎是不支持事务的引擎如:MyISAM引擎。
		session.save(user);
		session.getTransaction().commit();	//提交事务。
	}
}

 

 

 


   不开启事务也能保存成功的原因,可能是这张表所使用的数据库引擎不支持事务,如MyISAM引擎就不支持事务。查看数据库引擎的命令:show create table 表名;

   hibernate工程的基本目录结构如下图:




 
    进入MySql的命令是:在cmd内输入mysql -u 用户名 -p 密码;
    进入sql后,切换数据库的命令是:use 数据库名;
    显示数据库表详细信息的命令是:show create table 表名;此命令还可以查看表所用的引擎(MyISAM引擎不支持事务和外键),如图: 


 
   查看mysql数据库支持的所有引擎用命令:show engines;效果如下图:



 
 

  • 大小: 25 KB
  • 大小: 56.2 KB
  • 大小: 69.3 KB
  • 大小: 52.3 KB
1
0
分享到:
评论

相关推荐

    01 hibernate介绍与动手入门体验

    【标题】:“01 Hibernate介绍与动手入门体验” 在IT领域,Hibernate是一个广泛使用的对象关系映射(ORM)框架,它极大地简化了Java开发者在处理数据库操作时的工作。本课程旨在为初学者提供一个深入理解Hibernate...

    01_传智播客hibernate教程_hibernate介绍与动手入门体验

    【标题】"01_传智播客hibernate教程_hibernate介绍与动手入门体验" 涉及的是一门关于Hibernate的初学者教程,旨在帮助开发者了解并掌握这一流行的Java对象关系映射(ORM)框架。Hibernate是Java开发中的一个关键工具...

    hibernate介绍与动手入门体验

    ### Hibernate介绍与动手入门体验 #### 一、Hibernate概述 Hibernate是一种开源的对象关系映射(ORM)框架,用于简化Java应用程序中的数据持久化操作。它允许开发者以面向对象的方式处理数据库,而不需要直接编写...

    传智播客李勇hibernate源码1-20课

    传智播客李勇hibernate源码1-20课,目录如下:01_hibernate介绍与动手入门体验;02_hibernate入门案例的细节分析; 03_hibernate入门案例的代码优化; 04_Session接口及get|load|persist方法 05_实体对象的三种状态...

    01_传智播客hibernate教程_hibernate

    【压缩包子文件的文件名称列表】:01_传智播客hibernate教程_hibernate介绍与动手入门体验 Hibernate 是一个开源的 Java ORM 框架,它为开发者提供了一种在 Java 应用程序中管理和操作数据库的便捷方式。通过 ...

    hibernate code.rar

    在这个“hibernate code.rar”压缩包中,我们很可能会找到关于Hibernate的视频教程——"hibernate介绍与动手入门体验.avi",这个资源将引导我们深入了解Hibernate的核心概念和实际应用。 首先,让我们谈谈Hibernate...

    Hibernate学习笔记(1-13)

    1. **Hibernate介绍与动手入门体验**: - Hibernate引入:为了解决Java程序与数据库交互时的复杂性,通过ORM框架简化数据访问。 - 安装配置:包括添加必要的jar包,如hibernate3.jar、antlr.jar等,以及配置...

    Hibernate开发指南___夏昕

    “第一段代码”部分则鼓励读者动手实践,通过编写简单的代码来体验Hibernate的基本功能,如保存和查询数据。 #### Hibernate基础语义与高级特性 “Hibernate基础语义”深入介绍了Configuration、SessionFactory、...

    Spring初学者入门教程 PDF带书签高清版

    学习过程中,读者应该注重理论与实践相结合,通过动手编写代码来巩固所学知识。随着对Spring的理解不断深入,你可以逐步尝试更复杂的企业级应用场景,如微服务、消息队列、云原生等。希望这个教程能帮助初学者顺利迈...

    DWR入门教程及实例(含源代码)

    6. **DWR与其他技术结合**:可能会探讨DWR与Spring、Hibernate等框架的整合,以及在实际项目中的应用案例。 通过本教程的学习,开发者将能够熟练地运用DWR构建动态、交互性强的Web应用。同时,提供的源代码是实践...

    JavaWeb程序设计入门课件JavaWeb框架共25页

    【JavaWeb程序设计入门】是IT领域初学者进入Web开发世界的敲门砖,尤其是对于Java开发者来说,掌握JavaWeb框架是必备技能。本课件"JavaWeb程序设计入门课件JavaWeb框架共25页"提供了全面的基础知识,旨在帮助初学者...

    Java入门学习指导之最佳方向(上)

    本文将详细介绍Java学习的三个主要方向:桌面应用程序开发(C/S架构)、移动设备应用(J2ME)以及企业级应用开发(J2EE),并针对每个方向提供学习建议。 #### 一、桌面系统开发(C/S架构) **定义与特点:** - **C/S架构**...

    project_包括jsp基本功能开发_网站动态网页设计入门基础_

    在IT行业中,动态网页设计是构建交互性强、用户体验丰富的网站的关键技术。对于初学者来说,了解并掌握这一领域的基础知识至关重要。本项目“project_包括jsp基本功能开发_网站动态网页设计入门基础_”旨在帮助你迈...

    基本于J2EE的Ajax宝典.rar

    希望读者也不要仅仅“看书”,而一定要参照本书进行动手操作,将每个应用都实际做一遍,相信会有很大的提高。 目录 序言 3 第 2章 Ajax 初体验 5 2.1 Ajax带来的优势 5 2.2 传统的 JSP 聊天室 6 2.2.1 ...

    新闻发布系统--struts+mysql

    3. **数据库交互**:学习使用JDBC或ORM(对象关系映射)框架如Hibernate,与MySQL数据库进行交互,编写SQL查询语句。 4. **MVC模式**:理解模型、视图和控制器各自的职责,以及它们如何协同工作。 5. **权限控制**:...

    详细的Struts2教程

    在模型层,Struts2可以无缝集成各种持久化框架,如Hibernate、iBatis等,实现数据库操作。同时,Struts2支持Ajax,通过JSON或者XML响应,实现页面的部分刷新,提升用户体验。 此外,Struts2还具有异常处理、国际化...

    Java学习路线方法

    在这个阶段,阅读《Head First Java》或者《Thinking in Java》这样的入门书籍会有很大帮助。 其次,熟悉JavaSE(Java Standard Edition),这是Java的基础平台,用于桌面应用和服务器端开发。学习集合框架(如...

    JavaWeb开发之Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基础框架

    与Hibernate相比,MyBatis更加灵活,允许开发者直接编写SQL,对于复杂查询和性能优化更为友好。 4. **SpringSecurity**: SpringSecurity是Spring生态系统中的安全框架,用于实现身份验证和授权。它可以处理用户...

    弹簧靴训练

    "弹簧靴训练"主要指的是Spring Boot的培训和学习。Spring Boot是Java开发中的一个关键框架,它简化了创建独立的、生产...记住,理论学习与动手实践相结合,是掌握任何技术的关键。祝你在Spring Boot的旅程中收获满满!

Global site tag (gtag.js) - Google Analytics