Hibernate学习入门教程
hibernate的基本用法

hibernate的基本用法Hibernate是一个开源的Java框架,用于简化数据库操作。
它为开发人员提供了一个更加简单、直观的方式来管理数据库,同时也提高了应用程序的性能和可维护性。
本文将逐步介绍Hibernate的基本用法,包括配置、实体映射、数据操作等。
一、配置Hibernate1. 下载和安装Hibernate:首先,我们需要下载Hibernate的压缩包并解压。
然后将解压后的文件夹添加到Java项目的构建路径中。
2. 创建Hibernate配置文件:在解压后的文件夹中,可以找到一个名为"hibernate.cfg.xml"的文件。
这是Hibernate的主要配置文件,我们需要在其中指定数据库连接信息和其他相关配置。
3. 配置数据库连接:在"hibernate.cfg.xml"文件中,我们可以添加一个名为"hibernate.connection.url"的属性,用于指定数据库的连接URL。
除此之外,还需要指定数据库的用户名和密码等信息。
4. 配置实体映射:Hibernate使用对象关系映射(ORM)来将Java类映射到数据库表。
我们需要在配置文件中使用"mapping"元素来指定实体类的映射文件。
这个映射文件描述了实体类与数据库表之间的对应关系。
二、实体映射1. 创建实体类:我们需要创建一个Java类,用于表示数据库中的一行数据。
这个类的字段通常与数据库表的列对应。
同时,我们可以使用Hibernate提供的注解或XML文件来配置实体的映射关系。
2. 创建映射文件:可以根据个人喜好选择使用注解还是XML文件来配置实体类的映射关系。
如果使用XML文件,需要创建一个与实体类同名的XML文件,并在其中定义实体类与数据库表之间的映射关系。
3. 配置实体映射:在配置文件中,我们需要使用"mapping"元素来指定实体类的映射文件。
Hibernate学习笔记

Hibernate项目的构建与配置1.在项目里倒入Hibernate所必须的Jar包(1)Hibernate框架可以使用在任何的Java项目里,并不一定是Web项目。
只需要在项目里倒入Hibernate所必须要使用的jar包就可以了。
(2)在Hibernate的官网下载hibernate-release-4.2.2.Final.zip解压,要使用Hibernate必须导入的jar包就在目录“hibernate-release-4.2.2.Final\lib\required”下。
倒入此路径下的所有jar包就可以了。
2.配置hibernate.cfg.xml文件(1)配置hibernate.cfg.xml文件可以参考“\project\etc”目录下的hibernate.cfg.xml文件与hibernate.properties文件。
(2)使用Hibernate连接MySQL的hibernate.cfg.xml配置文件如下:<hibernate-configuration><session-factory>(设置显示Hibernate产生的SQL语句)<property name="show_sql">true</property>(设置MySQL的SQL语法的方言)<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>(设置MySQL的驱动程序)<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>(设置MySQL的数据库路径、用户名、密码)<property name="hibernate.connection.url">jdbc:mysql:///java</property><property name="ername">root</property><property name="hibernate.connection.password">lizhiwei</property>(设置当数据库要保存的表不存在时,就新建表)<property name="hibernate.hbm2ddl.auto">update</property>(设置对象与数据库表的关系映射文件)<mapping resource="vo/User.hbm.xml"/></session-factory></hibernate-configuration>(3)此配置文件一般放在项目的src目录下。
Hibernate入门之注解@Enumerated详解

Hibernate⼊门之注解@Enumerated详解前⾔我们知道对于枚举既可以存储字符串也可以存储数字,那我们看看在JPA中到底应该如何正确的配置呢,⽂中若有错误之处,还望指正。
@Enumerated注解在JPA中,必须⽤@Enumerated注解标记Enum类型,配置枚举类型有ORDINAL和STRING两种。
接下来我们定义⼀个Order对象,如下:@Entity@Table(name = "orders")public class Order {@Id@GeneratedValuepublic long id;@Enumeratedprivate Status status;}此时将映射为int类型,这也是默认映射的类型即ORDINAL,将枚举映射到表中的列类型为tinyint、enum应该是我们常见的⽅案,接下来我们来看看映射为varchar,如下:@Entity@Table(name = "orders")public class Order {@Id@GeneratedValuepublic long id;@Enumerated(EnumType.STRING)@Column(length = 8)private Status status;}如我们预期的结果,枚举类型为String表⽰来填充关联的数据库列值,对于我们开发⼈员⽽⾔,此列虽可读性强,但是明显将占⽤⼤量的空间,在这种情况下,状态列占⽤8个字节,如果我们要存储1亿条记录,仅status列将占⽤800 MB,所以我们都不会将枚举类型映射为varchar。
我们可以将java中的枚举类型映射为数据库表中的列映射为enum,进⾏如下配置:@Enumerated(EnumType.STRING)@Column(columnDefinition = "enum('PENDING','SUCCESS', 'FAILED', 'CANCEL', 'CLOSED')")private Status status;将枚举类型映射为enum在⽹上存在较⼤的争议,这不是我们关注的点,其实我们也可以映射为tinyint、smallint类型,不过对于枚举类型利⽤tinyint已⾜够,我们进⾏如下配置:@Enumerated@Column(columnDefinition = "tinyint")private Status status;我个⼈认为将枚举映射为tinyint是最合适的,因为它效率更⾼,但可读性却不强,我们并不知道具体数字代表什么含义,对开发⼈员并不友好,其实在这种情况下,我们完全可以再创建⼀个表对状态的描述。
传智播客hibernate教程

北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
基本概念和CURD
Java代码 代码 1.初始化代码 只做一次 初始化代码(只做一次 初始化代码 只做一次)
Configuration cfg = new Configuration(); cfg.configure(“config.cfg.xml”); 也可以通过cfg.setProperty设置属性。 SessionFactory sessionFactory = cfg.buildSessionFactory();
Criteria
Criteria是一种比HQL更面向对象的查询方式;Criteria的创建方式: Criteria crit = session.createCriteria(DomainClass.class); 简单属性条件如:criteria.add(Restrictions.eq(propertyName, value)), criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName))
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
关联映射
多对一(Employee - Department) 一对多(Department-Employee) 一对一(room - door) 多对多(teacher - student) 组件映射(User-Name) 集合映射(set, list, map, bag) inverse和cascade(Employee – Department)
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
Hibernate教程_从入门到精通_第二篇(共四篇)

目标: •Hibernate API简介
Hinernate的体系结构(运行时)
SessionFactory:它保存了对当前数据库配置的所有映射关系,它是将某 个数据库的映射关系经过编译之后全部保存在内存中的。 它还是生成 Session的工厂,它在进行实例化的过程中将会用到ConnectionProvider。 一个SessionFactory对应一个数据库连接,当数据库连接改变时需要修改 SessionFactory Sesion: 是进行持久化操作的基础,所有的持久化操作都是在Session的 基础上进行的。它相当与JDBC中的Connection。它是Hibernate的持 久化 管理器的核心,提供了一系列的持久化操作方法。另外,它还持有一个针 对持久化对象的一级缓存,在遍历持久化对象或者根据持久化标识查找对 象的时候会用 到。 Transation:功能上和数据库中的事务完全一样,通过它实现对数据库中 事务的控制。Transation对象是Session对象产生的,所以他的生命周期比 Session短。一个Session的生命周期中可以有多个Transaction对象。 ConnectonProvider:主要作用是生成与数据库建立了连接的JDBC对象 ,同时他还作为数据库连接的缓冲池。通过ConnectionProvider实现了应 用程序和底层的DataSource和DriverManager的隔离。 TransactionFactory:是生成Transaction对象的工厂,通过 TransactionFactory实现了事务的封装,使其具体的实现方法与应用程序无 关。
判断一个实体对象是否处于瞬态: 该实体对象的<id>属性(如果存在)的值为空 如果在映射文件中为<id>设置了unsaved-value属性,并且 实体对象的id属性的值与unsaved-value属性的值相同 如果这个实体对象配置version属性,并且version属性的 空 在映射文件中为version属性设置了unsaved-value属性,并且 version属性的值与unsaved-value属性的值相同。 如果设置了interceptor,并且interceptor的isUnsaved() 方法的返回值为true
最经典的hibernate教程 从入门到精通 第一篇(共四篇)

• </session-factory>
准备3:添加实体类和映射文件(UserInfo.hbm.xml)
使用Hibernate的7个步骤:
1、 Configuration 7、 关闭Session 2、 创建 SessionFactory
6、 提交事务 5、
3、 打开 Session 4、 开始一个事务
2-1):添加配置文件 -- hibernate.cfg.xml
<session-factory> <property name="connection.url"> jdbc:microsoft:sqlserver://localhost:1433;Database=pubs </property> <property name="ername">sa</property> <property name="connection.password">pwd</property> <property name="connection.driver_class"> com.microsoft.jdbc.sqlserver.SQLServerDriver </property> <property name="dialect"> org.hibernate.dialect.SQLServerDialect </property> <property name="show_sql">true</property> <mapping resource="com/aptech/jb/entity/User.hbm.xml" /> </session-factory>
Hibernate操作数据库的方法

Transaction tx = session.beginTransaction();
//创建UserTable类实例
UserTable userTable=new UserTable();
//设置userName属性
userTable.setUserName("张三");
//设置password属性
//取得SessionFactory实例
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
//打开一个Session实例
Session session = sessionFactory.openSession();
//开始事务
sessionFactory = new Configuration().configure(file)
.buildSessionFactory();
} catch (Throwable ex) {
//创建SessionFactory失败信息
System.err.println("Initial SessionFactory creation failed." + ex);
//开始事务
Transaction tx = session.beginTransaction();
//创建UserTable类实例
UserTable userTable=new UserTable();
//设置userName属性
userTable.setUserName("张三");
//设置password属性
userTable.setPassword("123456");
韩顺平 hibernate 第3讲

<property name="hbm2ddl.auto">create</property> hbm2ddl.auto其中有四个属性分别有validate,update,create,create-drop。 在sessionFactory 建立的时候自动检查数据库表结构,或者将数据库schema的DDL导到数据库中, 使用create-drop时,在显示关闭 sessionFactory时,将drop掉数据库的schema, create顾名思义,每次都会根据映射文件创建新表. update是数据库中表已经存在了,如果配置文件改变了(增加了一个属性,相当于再数据库中加了一个字 段)那么update会自动在数据库中加上这个字段, validate相当于每次插入数据之前都会验证数据库中的表结构和hbm文件的结构是否一致
hibernate从入门到精通
主讲 韩顺平
主讲:韩顺平 email:hanshunping@
hibernate从入门到精通
主讲 韩顺平
HQL和Criteria
HQL(Hibernate Query Language)-官方推荐
面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的(除了JAVA类 和属性其他部分不区分大小写);HQL中查的是对象而不是表,并且支持多态;HQL 主要通过Query来操作,Query的创建方式: Query q = session.createQuery(hql); from Person from User user where =:name from User user where =:name and user.birthday < :birthday
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Hibernate学习入门教程开发环境搭建[日期:2015-08-11] 来源:Linux社区作者:doctorJoe [字体:大中小]其实一两个月前就在了解Hibernate方面的知识了,但一直以来,都没有好好的总结,而且一直使用的是myeclipse,感觉有些傻瓜式的操作就可以搭建起Hibernate的开发环境,但这样一点都不好,没有理解到Hibernate到底是怎么配置的,所以你今天特使用Eclipse来一步一步搭建Hibernate的开发环境,下面,正式进入正题。
在Hibernate中开启日志/Linux/2015-07/120499.htmHibernate+JUnit测试实体类生成数据库表/Linux/2015-07/120161. htmHibernate整体理解/Linux/2014-07/104405.htmHibernate的映射机制/Linux/2014-12/110265.htm 新建一个web项目,名字就随便吧,你喜欢什么名字就什么吧,这是我的截图。
引入hibernate的依赖jar包,我使用的是hibernate-release-4.3.10.Final,下载好后解压,打开压缩包下的lib目录下的require文件夹,这是hibernate的所以来的必须的jar包,接下来,在刚才新建的项目里新建一个libs文件夹,将刚才的所说的jar包copy进去,另外,由于我们需要连接MySQL数据库以及使用JUnit测试,将所需的mysql-connector-java-5.0.8-bin.jar和junit-4.5.jar两个jar包引用进去,关于这些jar包,可以在网上搜索。
接下来,就是把这些jar 包添加到编译环境中去,选中libs下的jar包,右击选择Build Path –>Add to Build Path,这样就把依赖jar包成功添加进去了。
继续往下,我们需要配置最重要的hibernate配置文件hibernate.cfg.xml以及进行日志处理的log4j.properties属性文件:打开上一步解压后的hibernate文件夹,打开project—>etc文件夹,将该文件夹下的hibernate.cfg.xml和log4j.properties文件拷贝到项目的src文件夹下,打开hibernate.cfg.xml文件,将session-factory标签中的内容替换成如下的内容:<s e s s i o n-f a c t o r y> <!--配置m y s q l数据库的连接参数--> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><!--驱动程序名--> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</propert y><!--数据库名称--> <property name="hibernate.connection.url">jdbc:mysql:///hibernatedemo</property><!--用户名--> <property name="ername">root</property><!--密码--> <property name="hibernate.connection.password">yzp140103</property></session-factory>这样就配置好了。
接下来,要做的就是做开发测试了:在项目的src目录下新建一个实体类包com.joe.entity,在该包下新建一个实体类Student,代码如下:package com.joe.entity;import java.io.Serializable;p u b l i c c l a s s S t u d e n t i m p l e m e n t s S e r i a l i z a b l e{/****/ pr i va t e s ta ti c f ina l l o ng s er i a lV e r s ion U ID=5548279324472937805L;p r i v a t e i n t i d;p r i v a t e S t r i n g n a m e;p r i v a t e i n t a g e;/***申明无参构造函数*/ p u b l i c S t u d e n t(){} p u b l i c i n t g e t I d(){r e t u r n i d;} p u b l i c v o i d s e t I d(i n t i d){t h i s.i d=i d;} p u b l i c S t r i n g g e t N a m e(){r e t u r n n a m e;} p u b l i c v o i d s e t N a m e(S t r i n g n a m e){t h i s.n a m e=n a m e;} p u b l i c i n t g e t A g e(){r e t u r n a g e;} p u b l i c v o i d s e t A g e(i n t a g e){t h i s.a g e=a g e; }}对了,说明下,必须申明一个无参的构造函数,这是必须的哦!关键问题来了,我们不是说hibernate是做数据持久化的吗?那说百了就是要和数据库打交道呗,对于Student类,怎么和数据库关联呢,那我们就要说说这对象关系映射文件了Xxx.hbm. xml文件了,其中的Xxx是实体类的名称,那我们的Student.hbm.xml文件的内容就是:<?x m l v e r s i o n="1.0"?> <!DOCTYPE hibernate-mapping SYSTEM "/dtd/hibernate-mapping-3.0.d t d"><h i b e r n a t e-m a p p i n g> <!-- 一个class标签对应一个实体类,name属性指定实体类名称,table属性指定关联的数据库表--><c l a s s n a m e="c o m.j o e.e n t i t y.S t u d e n t"t a b l e="s t u_t a b"><!--主键--><i d n a m e="i d"c o l u m n="s t u_i d"><!--主键的生成策略--><g e n e r a t o r c l a s s="n a t i v e"></g e n e r a t o r></i d> <!-- 其他属性,name对应实体类的属性,column对应关系型数据库表的列--><p r o p e r t y n a m e="n a m e"c o l u m n="s t u_n a m e"></p r o p e r t y><p r o p e r t y n a m e="a g e"c o l u m n="s t u_a g e"></p r o p e r t y></c l a s s> </hibernate-mapping>将该文件同样添加到com.joe.entity包下,这样就行了吗?答案当然是否定的,我们还要将这个实体类注册到hibernate.cfg.xml文件中,在session-factory标签下面最后一个property标签后添加:<!--添加S t u d e n t.h b m.x m l映射文件--> <mapping resource="com/joe/entity/Student.hbm.xml"/>再往下走,我们来测试一下,在项目下新建一个资源文件夹test,再在test文件下新建测试包com.joe.test,在该包下新建一个StudentTest.java类,并书写如下代码:package com.joe.test;i m p o r t o r g.h i b e r n a t e.S e s s i o n;i m p o r t o r g.h i b e r n a t e.S e s s i o n F a c t o r y;i m p o r t o r g.h i b e r n a t e.T r a n s a c t i o n;i m p o r t o r g.h i b e r n a t e.b o o t.r e g i s t r y.S t a n d a r d S e r v i c e R e g i s t r y B u i l d e r;i m p o r t o r g.h i b e r n a t e.c f g.C o n f i g u r a t i o n;i m p o r t o r g.h i b e r n a t e.s e r v i c e.S e r v i c e R e g i s t r y;i m p o r t o r g.h i b e r n a t e.t o o l.h b m2d d l.S c h e m a E x p o r t; import org.junit.Test;import com.joe.entity.Student;p u b l i c c l a s s S t u d e n t T e s t{/** *@T e s t是j u n i t4测试的注解方式申明*根据对象关系映射文件生成D D L*/@T e s t p u b l i c v o i d c r e a t e T a b l e(){C o n f i g u r a t i o n c f g=n e w C o n f i g u r a t i o n().c o n f i g u r e();S c h e m a E x p o r t s e=n e w S c h e m a E x p o r t(c f g);s e.c r e a t e(t r u e,t r u e);} }当然,也可以使用如下的方式生成DDL,在hibernate.cfg.xml问价中新增:<!--生成D D L的配置--> <property name="hibernamr.hbm2ddl.auto">create |update</property>最后,执行StudentTest.java类,选择Run As—>JUnit Test,在控制台可以看到如下的信息,那就证明成功了:当然,也可以打开MySQL ,进一步验证。