关键词:
1.环境搭建:
三个准备+7个步骤
准备1:新建项目并添加hibernate依赖的jar文件
准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!--驱动名称,URL,用户名,密码 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/struts2</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <!--方言 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- 输出SQL语句 --> <property name="show_sql">true</property> </session-factory> </hibernate-configuration>
准备3:新建实体类和映射文件xxx.hbm.xml(将实体类与数据库中表建立映射关联)
Userinfo.java
package cn.zzsxt.entity; public class Userinfo { private int userId; private String userName; private String userPass; public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPass() { return userPass; } public void setUserPass(String userPass) { this.userPass = userPass; } }
Userinfo.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <!-- class name="实体类的全限定类名" table="表名" 如果table缺省情况下默认使用实体类的简单类名 --> <class name="cn.zzsxt.entity.Userinfo" table="userinfo"> <!-- id name="实体类中属性名称" column="表中的主键" type="数据类型" --> <id name="userId" column="userId" type="java.lang.Integer"> <!-- 主键的生成策略:native(主键自增),increment:主键自增,assigned:手工指定 --> <generator class="native"></generator> </id> <!-- property name="实体类的属性名" column="表中字段名" --> <property name="userName" column="userName" type="java.lang.String"></property> <property name="userPass" column="userPass" type="java.lang.String"></property> </class>
</hibernate-mapping>
注意:将映射文件应该在hibernate.cfg.xml中引入,否则将抛出异常
七个步骤:
public static void main(String[] args) { //步骤1:创建Configuration对象,调用configure()解析hibernate.cfg.xml配置文件 Configuration cfg = new Configuration().configure(); //步骤2:创建SessionFactory,解析映射文件xxx.hbm.xml SessionFactory sf = cfg.buildSessionFactory(); //步骤3:创建Session,类似jdbc中Connection Session session = sf.openSession(); //步骤4:开启事务 Transaction tx = session.beginTransaction(); //步骤5:执行持久化操作 Userinfo user = new Userinfo(); user.setUserName("test"); user.setUserPass("test"); session.save(user); //步骤6:提交事务 tx.commit(); //步骤7:关闭session session.close(); }
2.Hibernate.cfg.xml中重要属性的含义?
问答互动:前面已经配置好了Hibernate.cfg.xml,那么每个属性具体含义是什么?
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!--驱动名称,URL,用户名,密码 --> <property name="connection.driver_class"> com.mysql.jdbc.Driver </property> <property name="connection.url"> jdbc:mysql://localhost:3306/hibernate3 </property> <property name="connection.username">root</property> <property name="connection.password">root</property> <!--方言 --> <property name="hibernate.dialect"> org.hibernate.dialect.MySQL5Dialect </property> <!-- 输出SQL语句 --> <property name="show_sql">true</property> <!-- 格式化SQL语句 --> <property name="format_sql">true</property> <!-- 根据映射文件生产表: create:创建(不推荐:先删除原有表,重新创建表,原有数据丢失) update:创建+更新记录(推荐,会保存原有数据) --> <property name="hbm2ddl.auto">update</property> <!-- 引入映射文件的位置 --> <mapping resource="cn/zzsxt/entity/Userinfo.hbm.xml" /> </session-factory> </hibernate-configuration>
3.*.hbm.xml中重要属性的含义?
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- 一个映射文件中可以配置多个实体类与表的映射关系. 为了便于管理,建议每个文件只配置一个实体类与表的映射关系 --> <!-- hibernate-mapping标签: 此标签代表一个Hibernate映射.是映射文件的根标签. 属性: package: 可选属性,用于配置当前配置文件中,描述的实体类的默认包名. --> <hibernate-mapping package="cn.zzsxt.entity"> <!-- class标签: 此标签用于描述一个实体类与表的映射信息 属性: name: 可选属性,用于配置实体类的全命名,如果在hibernate-mapping中配置了包名,可省略包名. table:可选属性,用于配置与实体类对应的数据库表,如果表面与类名一致,可以省略. --> <class name="Userinfo" table="userinfo"> <!-- id标签: 此标签用于描述类中的主键属性.此属性对应数据库表中的主键字段. 在数据库设计范式中,明确定义了一个数据的唯一标识即为主键. 所以在Hibernate设计中,建议为类定义主键属性,也称为OID. 属性: name: 可选属性,配置类中的属性名,注意,这里的属性指property,而不是field. column:可选属性,配置与此属性对应的数据库表中的字段名,如果字段名与属性名一致,可以省略. length:可选属性,代表数据库中此字段的字段长度,不建议配置,Hibernate会自动识别数据库表的字段长度 type: 可选属性,代表当前数据的类型,此属性的数据值可用java标准类名或Hibernate框架定义类型赋值. 不推荐配置,Hibernate会自动识别类中属性的具体类型和表中字段的数据类型进行合适的匹配. --> <id name="userId" column="userId" type="java.lang.Integer"> <!-- generator标签: 此标签用于描述主键生成策略,即当进行数据新增的时候,数据的主键数据如何生产.常见策略如下: increment 用于为long, short或者int类型生成唯一标识.只有在没有其他进程往 同一张表中插入数据时才能使用. 在集群下不要使用。. identity 对DB2, MySQL, MS SQL Server, Sybase和HypersonicSQL 的内置标识字段提供支持. 返回的标识符是long, short或者int类型. native 本地化策略,根据底层数据库的能力选择identity, sequence或者hilo中的一个. 如果是mysql,native和identity是一样的,默认使用主键自增 如果是Oracle,native和sequence是一样的, 默认使用命名为hibernate_sequence的序列 sequence 在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence), 而在Interbase中使用生成器(generator).返回的标识符是long, short或者 int类型的. 配置方式如下: <generator class="sequence"> <param name="sequence">sequenceName</param> </generator> assigned 让应用程序在save()之前为对象分配一个标示符.这是 <generator>元素没有指定时 的默认生成策略. --> <generator class="native"></generator> </id> <!-- propety标签: 此标签用于描述类中的属性与数据库表中字段的对应关系. 属性: name: 可选属性,配置类中的属性名,注意,这里的属性指property,而不是field. column:可选属性,配置与此属性对应的数据库表中的字段名,如果字段名与属性名一致,可以省略. length:可选属性,代表数据库中此字段的字段长度,不建议配置,Hibernate会自动识别数据库表的字段长度 type: 可选属性,代表当前数据的类型,此属性的数据值可用java标准类名或Hibernate框架定义类型赋值. 不推荐配置,Hibernate会自动识别类中属性的具体类型和表中字段的数据类型进行合适的匹配. --> <property name="userName" column="userName" type="java.lang.String" length="20"></property> <property name="userPass" column="userPass" type="java.lang.String" length="20"></property> </class> </hibernate-mapping>
4.Hibernate常用API对象
5.HibernteUitl.java
public class HibernateUtil { private static SessionFactory sessionFactory; private static ThreadLocal<Session> threadLocal = new ThreadLocal<Session>(); private static Session session; static{ Configuration configuration = new Configuration().configure(); sessionFactory = configuration.buildSessionFactory(); } public static Session getSession(){ session = threadLocal.get(); if(session!=null){ return session; } session = sessionFactory.openSession(); threadLocal.set(session); return session; } }
6.对象生命周期图
7.数据对象的三种状态
1.临时状态/瞬时状态
代表当前数据对象只在内存中存在,对象的主键属性无数据或数据无效.
临时状态对象的出现: 可能是新创建的对象,可能是被删除的持久状态或游离状态的数据对象.
2.持久状态
代表当前数据对象在内存中存在,且在数据库对应表中有相应的记录与之完全对应.
此状态下的数据对象被Session所管理.
此状态下的数据对象一定存在主键属性数据.
持久状态对象的出现: 可能是从数据库中查询对象时,临时状态对象被保存时,游离状态对象被更新或锁定时.
3.游离状态
代表当前数据对象在内存中存在,且在数据库对应表中有相应的记录.
此状态下的数据对象不被Session管理.
此状态下的数据对象一定存在主键属性数据.
游离状态对象的出现: 可能是被Session清理(clear/evict)时,或Session被关闭时.
8.增删查改:
TestSave:
package cn.zzsxt.test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import cn.zzsxt.entity.Userinfo; public class TestSave { public static void main(String[] args) { //步骤1:创建Configuration对象,调用configure()解析hibernate.cfg.xml配置文件 Configuration cfg = new Configuration(); //步骤2:创建SessionFactory,解析映射文件xxx.hbm.xml SessionFactory sf = cfg.buildSessionFactory(); //步骤3:创建Session,类似jdbc中Connection Session session = sf.openSession(); //步骤4:开启事务 Transaction tx = session.beginTransaction(); //步骤5:执行持久化操作 Userinfo user = new Userinfo(); user.setUserName("test"); user.setUserPass("test"); session.save(user); //步骤6:提交事务 tx.commit(); //步骤7:关闭session session.close(); } }
TestDelete:
package cn.zzsxt.test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import cn.zzsxt.entity.Userinfo; public class TestDelete { public static void main(String[] args) { Configuration cfg = new Configuration().configure(); SessionFactory sf = cfg.buildSessionFactory(); Session session = sf.openSession(); //开启事务,应为hibernat默认没有开启事务,必须手工开启事务和提交事务,否则更改的数据无法保存至数据库中,查询可以不开启或提交事务 Transaction tx = session.beginTransaction(); //查询编号为17的用户信息 Userinfo user = session.get(Userinfo.class, 17); //删除用户信息 session.delete(user); tx.commit(); session.close(); } }
TestGetAll:
package cn.zzsxt.test; import java.util.List; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.query.Query; import cn.zzsxt.entity.Userinfo; public class TestGetAll { public static void main(String[] args) { Configuration cfg = new Configuration().configure(); SessionFactory sf = cfg.buildSessionFactory(); Session session = sf.openSession(); //创建Query对象,用于执行查询HQL(Hiberante Query Language)语句 //String sql = select * from userinfo String hql="from Userinfo"; Query query = session.createQuery(hql); List<Userinfo> list = query.list(); for (Userinfo userinfo : list) { System.out.println(userinfo); } session.close(); } }
TestGetById:
package cn.zzsxt.test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import cn.zzsxt.entity.Userinfo; public class TestGetById { public static void main(String[] args) { Configuration cfg = new Configuration().configure(); SessionFactory sf = cfg.buildSessionFactory(); Session session = sf.openSession(); //开启事务,应为hibernat默认没有开启事务,必须手工开启事务和提交事务,否则更改的数据无法保存至数据库中,查询可以不开启或提交事务 // Transaction tx = session.beginTransaction(); Userinfo user = session.get(Userinfo.class, 17); System.out.println(user); // tx.commit(); session.close(); } }
TestUpdate:
package cn.zzsxt.test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import cn.zzsxt.entity.Userinfo; public class TestUpdate { public static void main(String[] args) { Configuration cfg = new Configuration().configure(); SessionFactory sf = cfg.buildSessionFactory(); Session session = sf.openSession(); //开启事务,应为hibernat默认没有开启事务,必须手工开启事务和提交事务,否则更改的数据无法保存至数据库中,查询可以不开启或提交事务 Transaction tx = session.beginTransaction(); //查询编号为17的用户信息 Userinfo user = session.get(Userinfo.class, 17); //修改用户信息 user.setUserName("test2"); user.setUserPass("test2"); // session.update(user); //savaOrUpdate()===>save()+update() session.saveOrUpdate(user); tx.commit(); session.close(); } }
java:hibernate框架(环境搭建,hibernate.cfg.xml中属性含义,hibernate常用api对象,hibernteuitl,对象生命周期图,数据对象的三种状态)
...nbsp; 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件 准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cfg.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEhibernate-c 查看详情
hibernate学习路程之一(hibernate环境的搭建)
Hibernate学习路程之一(Hibernate环境的搭建)学习之前首先知道hibernate是干啥的; Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框... 查看详情
Java 11:OSGi:生成 EntityManager,无法构建 Hibernate SessionFactory java.lang.ClassNotFoundException:org.hib
】Java11:OSGi:生成EntityManager,无法构建HibernateSessionFactoryjava.lang.ClassNotFoundException:org.hibernate.proxy.HibernateProxy【英文标题】:Java11:OSGi:SpawningEntityManager,UnabletobuildHibernateSessionFactoryjava.lang.ClassNotFo 查看详情
hibernate框架
一.简介: Hibernate是一个开放源代码的ORM(Object Relational Mapping,对象关系映射)框架,他对JDBC进行了轻量级的对象封装,使得Java开发人员可以使用面向对象的编程思想来操作数据库。二.框架实现: 三.Hi... 查看详情
spring+hibernate环境搭建
整体项目结构如图:src各个包是按照springMVC建立包格式建立的,如下图:entity层的代码:有Book.java和Account.javapackagecom.elgin.spring.hibernate.entity;publicclassBook{privateintid;privateStringbookName;privateStringisbn;privatefloatpric 查看详情
spring+springmvc+hibernate环境搭建与配置
这里给出JavaWeb项目Spring+Springmvc+Hibernate框架环境的搭建与配置,方便以后快速创建项目。下面是以本人的一个项目为例给出的配置,不同项目具体的结构都是可以按一下结构完成的,至于配置内容则需要按照具体的项目需求更改... 查看详情
ssh框架总结(框架分析+环境搭建+实例源码下载)《转》
... 首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活、易于扩展的多层Web应用程序。 集成SSH框架的系统从职责上分为四层:表示层、业务逻... 查看详情
spring学习笔记--环境搭建和初步理解ioc
...ss等支持EJB的容器中,核心思想是IOC,AOP,Spring能够协同Struts,hibernate等其他众多的框架. 下面介绍环境的搭建,首先下载好spring的完整包,我下载的是4.2.5版本的,在elipse中,新建java项目: 1,导入核心jar包: 查看详情
hibernate入门知识-01
1.Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装2.是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可... 查看详情
如何在centos上搭建struts2+spring+hibernate的运行环境
Struts2+Spring+Hibernate是J2EE的最新流行框架。本篇是我搭建这个框架的经验总结,有很多人搭建这个框架总会遇到大大小小的问题,网上也没有什么行之有效的方案或成体系的介绍,所以我就决定总结一下我的搭建过程。给一些搭... 查看详情
hibernate入门
1、Hibernate概述Hibernate是一个开放源代码的对象关系映射(ORM,ObjectRelationMapping)框架,是一个轻量级的JavaEE应用的持久层解决方案,它对JDBC进行了非常轻量级的封装,使得Java程序员可以使用面向对象编程的思维来操作数据库。2、... 查看详情
hibernate使用总结(代码片段)
https://www.cnblogs.com/zhangzongle/p/5819505.htmlhibernate简介:hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库。hibernate核心接口session:负责... 查看详情
hibernate环境搭建
hibernate基本使用(代码片段)
Hibernate框架概述一、什么是框架软件的一个半成品,已经帮你完成了部分功能。把一些不确定的东西,按照框架要求,达到相应的功能Hibernate是JavaEE技术三层架构所用到的技术二、hibernate简介1.hibernate是什么框架Hibernate是一个开... 查看详情
ssm框架搭建jdk和maven环境搭建
SSM框架搭建(一)JDK和MAVEN环境搭建 JDK配置CLASSPATH.;%JAVA_HOME%lib;%JAVA_HOME%lib ools.jar JAVA_HOMED:Javajdk1.8.0_31 path%JAVA_HOME%in%JAVA_HOME%jrein验证一下,成功 MAVEN配置MAVEN_HOME 查看详情
框架起始
...edis的入门redis的数据结构消息订阅与发布事务持久化 Hibernate:第一天:Hibernate的入门(Hibernate的环境搭建、Hibernate的API、Hibernate的C 查看详情
hibernate入门
学习hibernate的一个Demo,使用hibernate对Customer类进行单表增删改查,hibernate是ORM对象关系映射技术,可以对JDBC数据库底层操作进行封装,简化开发。1.环境搭建官网上下载hibernate的依赖包,hibernate可以再java环境下也可以在web环境... 查看详情
struts2spring3.2hibernate4.1框架搭建整合
...以后查看。我的搭建过程是,首先struts,然后spring,最后hibernate。struts2的最新版本为2.3.8,我下载的是完整包,包含示例和所有jar包,下载地址为:http://struts.apache.org/spring的最新版本为3.2.1,下载地址为:http://www.springsource.org/ 查看详情