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框架的工作原理

hibernate框架的工作原理Hibernate框架的工作原理Hibernate是一个开源的ORM(Object-Relational Mapping)框架,它将Java对象映射到关系型数据库中。
它提供了一种简单的方式来处理数据持久化,同时也提供了一些高级特性来优化性能和可维护性。
1. Hibernate框架的基本概念在开始讲解Hibernate框架的工作原理之前,需要先了解一些基本概念:Session:Session是Hibernate与数据库交互的核心接口,它代表了一个会话,可以用来执行各种数据库操作。
SessionFactory:SessionFactory是一个线程安全的对象,它用于创建Session对象。
通常情况下,应用程序只需要创建一个SessionFactory对象。
Transaction:Transaction是对数据库操作进行事务管理的接口。
在Hibernate中,所有对数据库的操作都应该在事务中进行。
Mapping文件:Mapping文件用于描述Java类与数据库表之间的映射关系。
它定义了Java类属性与数据库表字段之间的对应关系。
2. Hibernate框架的工作流程Hibernate框架主要分为两个部分:持久化层和业务逻辑层。
其中,持久化层负责将Java对象映射到数据库中,并提供数据访问接口;业务逻辑层则负责处理业务逻辑,并调用持久化层进行数据访问。
Hibernate框架的工作流程如下:2.1 创建SessionFactory对象在应用程序启动时,需要创建一个SessionFactory对象。
SessionFactory是一个线程安全的对象,通常情况下只需要创建一个即可。
2.2 创建Session对象在业务逻辑层需要进行数据访问时,需要先创建一个Session对象。
Session是Hibernate与数据库交互的核心接口,它代表了一个会话,可以用来执行各种数据库操作。
2.3 执行数据库操作在获取了Session对象之后,就可以执行各种数据库操作了。
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>
hibernate4学习笔记

hibernate4学习笔记Hibernate4学习笔记本⼈全部以⾃学为主,在⽹上收集各种学习资料,总结归纳学习经验,现将学习路径给予⼤家分享。
此次学习的hibernate的版本是:hibernate-release-4.2.4.Final(截⽌2015年7⽉31⽇最新版),JAVA的版本是:java8.0,使⽤的开发⼯具是:Eclipse Mars Release (4.5.0)。
第⼀天:Hibernate4基础知识和HelloWorld简单编程Hibernate是⼀种半成品ORM框架,对数据库持久化操作,程序员对数据库的操作转换成对对象的操作。
ORM 采⽤元数据来描述对象-关系映射细节, 元数据通常采⽤XML 格式, 并且存放在专门的对象-关系映射⽂件中。
HelloWorld简单编程1、准备Hibernate环境(1)导⼊Hibernate的Jar包,如下:(2)导⼊Mysql驱动包,我⽤的数据库是:Mysql 5.0,数据库驱动包如下:以上所有Jar加完毕之后,需要加⼊到Eclipse⾃⾝系统⾥⾯,具体如下:以上操作完毕之后,Hibernate的环境就算搭建完毕,下⾯就可以进⼀步操作。
2、配置hibernate.cfg.xml⽂件,主要是对数据库的连接,具体如下:"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/doc/63fa364d5022aaea998f0fde.html /hibernate-configuration-3.0.dtd ">rootmysqlname="connection.driver_class">com.mysql.jdbc.Driver jdbc:mysql:///Test(或者:jdbc:mysql://localhost:3306/Test)name="dialect">org.hibernate.dialect.MySQLInnoDBDialecttruetrueupdate3、编写⼀个实例类News.java,具体代码如下:package com.hibernate.helloworld;import java.sql.Date;public class News {private Integer id;private String title;private Date date;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}public News(String title, String author, Date date) { super();this.title = title;this.author = author;this.date = date;}public News(){}@Overridereturn"News [id="+ id+ ", title="+ title+ ", author="+ author + ", date=" + date + "]";}}4、创建News.hbm.xml配置映射⽂件,具体代码如下:"/doc/63fa364d5022aaea998f0fde.html /hibernate-mapping-3.0.dtd">5、将映射⽂件News.hbm.xml指定到hibernate.cfg.xml配置⽂件⾥⾯,即在hibernate.cfg.xml⽂件⾥加⼊⼀⾏映射代码,具体如下:6、创建hibernate API操作测试类(Juit测试),验证hibernate的优势效果,具体代码如下:package com.hibernate.helloworld;import java.sql.Date;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.hibernate.service.ServiceRegistryBuilder;import org.junit.Test;public class HibernateTest {@Testpublic void test() {//1. 创建⼀个 SessionFactory 对象SessionFactory sessionFactory=null;//1). 创建 Configuration 对象: 对应 hibernate 的基本配置信息和对象关系映射信息Configuration configuration=new Configuration().configure();//4.0 之前这样创建//sessionFactory=configuration.buildSessionFactory();//2). 4.0以后创建⼀个 ServiceRegistry 对象: hibernate 4.x 新添加的对象//hibernate 的任何配置和服务都需要在该对象中注册后才能有效.ServiceRegistry serviceRegistry=newServiceRegistryBuilder().applySettings(configuration.getProperties() ).buildServiceRegistry();sessionFactory=configuration.buildSessionFactory(serviceRegistry) ;//2. 创建⼀个 Session 对象Session session=sessionFactory.openSession();//3. 开启事务Transaction transaction=session.beginTransaction();//4. 执⾏保存操作News news = new News("Java12345", "ATGUIGU", new Date(new java.util.Date().getTime()));session.save(news);//5. 提交事务/doc/63fa364d5022aaea998f0fde.html mit();//6. 关闭 Sessionsession.close();//7. 关闭 SessionFactory 对象sessionFactory.close();}}7、测试结果如下:(1)数据库⾥⾯的结果如下:(2)Eclipse下的语句⽣成如下:以上就是简单Hibernate的测试,总结:1、不需要在数据库⾥⾯创建任何数据,由hibernate ⾃动⽣成;2、代码简单易理解,不复杂,测试数据只需要先创建以下⼏个步骤:SessionFactory-→Session-→Transaction-→session操作数据库-→提交-→关闭;3、不需要写SQL 语句,从头到尾没有写⼀条SQL语句,反⽽Hibernate帮我们⽣成SQL语句。
韩顺平 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)。
准备Hibernate3-2
创建Hibernate配置文件
用于配置数据库连接 运行时所需的各种属性 默认文件名为“hibernate.cfg.xml”
<property name="dialect"> org.hibernate.dialect.Oracle9Dialect </property> <property name="connection.url"> jdbc:oracle:thin:@127.0.0.1:1521:ORCL </property> <property name="ername">jbit</property> <property name="connection.password">bdqn</property> <property name="connection.driver_class"> oracle.jdbc.driver.OracleDriver </property>
Hibernate执行过程
创建和销毁都相当耗费 资源,通常一个系统内 一个数据库只创建一个
Configuration 创建 SessionFactory
Hibernate.cfg.xml
类似于JDBC中的 Connection
FWXX.cfg.xml User.hbm.xml
创建 Session 执行 开始 Transaction
复杂的查询操作稍后介绍
save delete update get mit() session.close() 结束
使用Hibernate实现增加用户
public static void main(String[] args) { 七个步骤对应的程序代码 Configuration conf = new Configuration().configure();//1、读取配置文件 SessionFactory sf = conf.buildSessionFactory();// 2、创建SessionFactory Session session = sf.openSession();// 3、打开Session Transaction tx = null; try{ tx = session.beginTransaction();// 4、开始一个事务 // 5、持久化操作 User user = new User(); user.setUname("Hibernate user"); user.setUpass("password"); session.save(user); mit();// 6、 提交事务 }catch(Exception e){ if (null!=tx){tx.rollback();} e.printStackTrace(); }finally{ session.close();// 7、关闭Session } }
(5)数据库操作
session.save(user);//或其它操作
(6)提交事务(回滚事务)
mit();(tx.rollback();)
(7)关闭session
session.close();
如果Hibernate 配置文件中,current_session_context_class 参数 设置为thread 并采用SessionFactory 的getCurrentSession()方法 获的Session 实例则不需要此步 演示示例:使用Hibernate 操作数据库的步骤
Hibernate 是一个优秀的Java 持久化层解决方案 是当今主流的对象—关系映射工具 Hibernate 简化了JDBC 繁琐的编码
Session session = HiberanteUtil.getSession(); Query query = session.createQuery("from User"); List<User> users =(List<User>)query.list();
使用Hibernate实现数据的加载/删除/修改
程序代码
根据主键加载 没有更新数据, 不进行事务控 制 修改 Session session = sf.openSession(); User user = (User)session.get(User.class, id); session.close(); System.out.println(user.getUname() + "," + user.getUpass()); tx = session.beginTransaction(); User user = this.testLoad(id); user.setUname("new Name"); session.update(user); mit();
先加载,再更新 不再需要繁琐的逐字 段编码 删除
tx = session.beginTransaction(); 先加载, User user = this.testLoad(id); 再删除 session.delete(user); mit();
使用Hibernate实现查询操作
Configuration conf = null; Session提供了两种方法加载数据 SessionFactory sessionFactory = null; Object null; Session session = get(Class clazz, Serializable id):通过实体 类Class对象和ID 加载数据 Transaction tx = null; try { Object load(Class theClass, Serializable id):通过 conf = new Configuration().configure(); 实体类Class对象和ID加载数据 sessionFactory = conf.buildSessionFactory(); 两种方法加载数据的区别 session = sessionFactory.openSession(); session.load(User.class,1002); session.get(User.class,1001); 使用get 方法加载数据时,如果数据不存在,返回null 使用get方式加载数据 使用load方式加载数据 } catch (HibernateException e) { 对象 e.printStackTrace(); 使用load 方法加载数据时,如果数据不存在,系统就 } finally{ 会抛出异常 session.close(); sessionFactory.close(); } 演示示例:使用Hibernate 查询数据
使用Hibernate操作数据库需要七个步骤
(1)读取并解析配置文件
Configuration conf = new Configuration().configure();
(2)读取并解析映射信息,创建SessionFactory
SessionFactory sf = conf.buildSessionFactory();
(3)打开Session
Session session = sf.openSession();
(4)开始一个事务(增删改操作必须,查询操作可选)
Transaction tx = session.beginTransaction();
使用Hibernate 操作数据库
使用Hibernate操作数据库需要七个步骤
Hibernate 将数据库的连接信息都存放在配置文 件中
持久化
持久化
将程序中数据在瞬时状态和持久状态间转换的机制
持久化
持久化层
JDBC 就是一种持久化机制 将程序数据直接保存成文本文件也是持久化机制的 一种实现 在分层结构中,DAO 层(数据访问层)也被称为持 久化层
持久化完成的操作
将对象保存到关系型数据库中 将关系型数据库中的数据读取出来 以对象的形式封装
使用Hibernate 操作数据库
使用Hibernate的7个步骤:
1、 Configuration
7、 关闭Session 2、 创建 SessionFactory
6、 提交事务 5、
3、 打开 Session
4、 开始一个事务
持久化操作 save/update/delete/find
使用Hibernate 操作数据库
JDBC操作数据库的步骤
JDBC的缺点
开发效率低 代码冗余
pstmt的setXX方法 方法参数冗余的getXX方法 如果POJO的属DBC如此低开发效率? 解决:使用 Hibernate IBatis JDO 等技术简化 数据库操作.
Hibernate优势
准备Hibernate3-3
<hibernate-mapping> 创建实体类和实体映射文件 <class name="cn.jbit.houserent. er" table="users"> <id name="id" type="ng.Integer"> 定义实体类(也称持久化类),实现 <column name="id" /> java.io.Serializable 接口,添加默认构造方法 <generator class="sequence" > public class User implements java.io.Serializable { 配置映射文件(*.hbm.xml) <param name="sequence">SEQ_ID</param> //字段 </generator> 向hibernate.cfg.xml文件中配置映射文件 private Integer id; </id> <session-factory>name; private String <property name="name" type="ng.String"> <!--省略其他配置password; private String --> <column name="name" length="50" not-null="true" /> <!--注意配置文件名必须包含其相对于classpath 的全路径--> private String telephone; </property> <mapping resource="cn/jbit/houserent/entity/User.hbm.xml" /> private String username; <property name="password" type="ng.String"> </session-factory> private String isadmin; <column name="password" length="50" not-null="true" /> public User(){ </property> } <!-省略其他配置--> //省略getter&setter 方法 </class> 演示示例:使用Hibernate 三个准备步骤 } </hibernate-mapping>