hibernate笔记总结
1.什么是Hibernate,有什么用?什么时候使用?
Hibernate框架,用于对数据库访问和操作.是对JDBC的轻量级封装.
Hibernate现已被JBOSS公司收购,用于实现EJB中的EntityBean
JavaEE EJB-->EJB容器-->JBOSS,Weblogic,WebSphere
EJB有三种类型 www.zzzyk.com
SessionBean(会话Bean),用于封装业务逻辑
EntityBean(实体Bean),用于封装对数据库的操作
MessageDrivenBean(消息驱动Bean),封装基于消息的处理机制
2.什么是ORM技术,有何作用和优势
Object-Relation-Mapping对象关系映射,
用于实现对象和关系数据库之间的映射,当应用程序需要对
数据库操作时,只需要对这些对象操作即可.
常用的ORM技术有很多,例如
1.Hibernate
2.iBATIS
3.JPA
4.其他.......
=============Hibernate简介=============
Hibernate是一款实现ORM技术的框架
Hibernate是对JDBC轻量级封装
Hibernate适用于对数据库访问和操作,
为应用程序构建一个持久层.
Hibernate是以操作对象的方式,实现对数据库的操作.
减少了数据库操作的代码.
3.Hibernate框架体系结构
1)hibernate.properties或者hibernate.cfg.xml
主配置文件,定义了数据库连接参数,框架的一些系统参数等
2)持久类 Person.java
数据表对应的Java类
3)Mapping文件 Person.hbm.xml
用于描述持久类和数据表之间的映射关系.
4.Hibernate框架的核心API
1)Configuration
负责读取Hibernate.cfg.xml和hbm.xml映射描述文件,
创建SessionFactory实例.
2)SessionFactory
负责创建Session对象,管理了预编译的SQL语句
3)Session
负责执行增加,删除,修改,查询操作.Session是对Connection的封装.
4)Query
负责执行HQL查询语句.
5)Transaction
负责事务控制,Hibernate必须使用代码控制事务,
否则不会对数据库造成修改
eg. Configuration config=new Configuration();
config.configure();
SessionFactory sf=config.buildSessionFactory();
Session session=sf.openSession();
5.Hibernate应用示例(对dangdang.d_user表操作)
1)引入Hibernate开发包+驱动开发包
hibernate3.jar
commons-collections-2.1.1.jar
commons-logging-1.0.4.jar
dom4j-1.6.1.jar
mysql-connector-java-5.1.6-bin.jar
cglib-2.1.3.jar
asm.jar
2)定义hibernate.cfg.xml主配置文件
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="connection.url">
jdbc:mysql://127.0.0.1:3306/xgf
</property>
<property name="connection.username">root</property>
<property name="connection.password">xgfdiao</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="hbm2ddl.auto">update</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<mapping resource="mapping/School.hbm.xml" />
<mapping resource="mapping/Header.hbm.xml" />
<mapping resource="mapping/Person.hbm.xml" />
<mapping resource="mapping/Person_home.hbm.xml" />
</session-factory>
</hibernate-configuration>
3)定义持久类文件
<hibernate-mapping
package="entity">
<class name="Header" table="header">
<id name="id" column="id" type="integer">
<generator class="assigned"></generator>
</id>
<property name="hname" type="string">
<column name="hname"></column>
</property>
<property name="address" type="string">
<column name="address"></column>
</property>
<!-- 一对一映射 Product-->
<one-to-one name="sc" property-ref="he" cascade="all"><!-- 添加cascade="all"后,将同步两个表的数据操作 -->
</one-to-one>
</class>
</hibernate-mapping>
4)定义hbm.xml映射描述文件,在hibernate.cfg.xml
添加<mapping>元素.
<mapping resource="mapping/Person_home.hbm.xml" />
5)使用核心API进行操作
===================================================================
1.Hibernate主键生成方式
1)内置的快捷名
a. identity : 如果数据库支持自动增长,设计表时指定该功能
适用于MySQL,SQL Server
b. sequence : 如果数据支持sequence,主键由sequence生成
适用于Oracle
c. native : 根据数据库类型,自动选择identity,sequence,hilo
d.increment : 发送select max(id) from table语句获取主键值
e.assinged : 忽略,需要在程序中指定主键值.
f.uuid : 根据UUID算法生成一个字符串类型的主键值
适用于主键类型为varchar类型
g.hilo : 采用高低位算法生成一个数值类型的主键值
h.foreign : 使用另一个相关联对象的属性值充当主键值.
适用于一对一关系的数据表
2)自定义主键生成方式
a.编写主键生成器类,要实现IdentifierGenerator接口
在约定的generator方法中编写生成主键的逻辑
b.使用格式为<generator class="包名.类名">
2. Hibernate类型
在映射描述文件中,<property type="类型">,
type属性可以指定Java类型,也可以指定Hibernate类型
*1) 基本类型
integer,long,short,byte,double,float,character,
boolean,yes_no,true_false
*2)字符串类型
string
*3)日期和时间
date,time,timestamp
4)大的数值类型(了解下BigDecaimal,BigInteger)
big_decimal,big_integer
5)java.sql.Clob,java.sql.Blob
clob,blob
Hibernate也允许自定义类型.
3.Hibernate中对象的状态
1)临时状态
刚new出来的对象 ,session.delete()方法后
2)持久状态
调用session的load(),get(),save(),update()方法后,
该对象受Session管理,具有持久性的特征.
Hibernate可以将持久对象的信息保存到数据库中.(持久性)
3)脱管状态
调用session的close(),clear()方法后
注意:临时和脱管状态的对象,可以随时被垃圾回收,
不能与数据库同步.
4.高级映射
1)联合主键映射(参考Person.java,Person.hbm.xml)
2)组件映射(参考Order.java,Address.java,Order.hbm.xml)
(参考Emp.java,EmpAddress.java,Emp.hbm.xml)
=======数据库单表:最简单最基本的映射,联合主键映射,组件映射=======
3)一对一关系
a.基于主键关联的1:1
(1)需要添加对方类型的属性
public class Person implements Serializable{
private int id;
private String name;
private int age;
private Person_home ph;<-添加对方类型的属性
&nbs
补充:软件开发 , Java ,