Hibernate 马上入门(一)

1Hibernate框架介绍:

简述Hibernate(冬眠)的作用:ORMObject Relational Mapping,对象关系映射。将java程序中的对象自动持久化到关系数据库中。而Hibernate 的作用好比就是在java 对象与关系数据库之间的一座桥梁,它主要负责两者之间的映射。在Hibernate 内部封装了JDBC技术(但只是一个轻量级的封装,因而可以让程序设计人员更方便的以面向对象的思想操纵数据库),并向外提供API 接口。 常见的ORMapping框架: hibernatetoplinkojb等。

 

 

2Hibernate框架结构:

源码包结构(可以在www.hibernate.org下载): * |- doc API references (参考手册)

java persistence with hibernate (Gavin King) |- eg hibernate框架开发例子(拍卖行) *|- etc 配置文件 |- grammar hql语法目录 *|- lib 第三方jar |- src 源代码目录 |- test 测试目录 *|- hibernate3.jar

 

3Hibernate框架开发概述:

1)搭建开发环境: a) 导入jar包: 1 hibernate3.jar 2 第三方jar 3 ojdbc14.jar (驱动文件) b)导入配置文件: Ahibernate.cfg.xml (etc) 作用: 配置hibernate运行相关的参数 名字:hibernate.cfg.xml 放置位置:src根下面

具体内容:a)连接相关的参数 <hibernate-configuration> <session-factory> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost/hibernate</property> <property name="connection.username">root</property> <property name="connection.password">root</property> …… </session-factory> </hibernate-configuration>

c) Hibernate自身属性相关的参数 dialect方言:通过方言告知hibernate连接的是那种数据库,hibernate会根据这种数据库的特点,进行性能调优。 show_sql :true|false会把hibernate运行过程中执行的sql语句显示在控制台中。 format_sql: true|false会把hibernate在控制台中执行的sql语句格式化输出。 <propertyname="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="show_sql">true</property> <property name="format_sql">true</property> Bxxx.hbm.xml (映射文件): 书写ORMapping:类 ---- 表; 名字:.hbm.xml结尾; 放置位置:随便。

 

2) Hibernate CORE API (简述): a) Configuration (读取配置文件) b) Session .save() update() delete() get() |- Transaction(事务) 要求: save() update() delete() 必须手工控制事务 |- Query 复杂插叙(非主键的查询) c) SessionFactory 创建Session

 

3) hibernate开发过程O-R-Ma) O 创建Entity Object b) R 创建实体对应的表 c) M (mapping) 映射文件 ORM映射原则 4)映射文件的注册: 在hibernate.cfg.xml 中配置: <mapping resource="xxx.hbm.xml" /> 5) HibernateAPI 编程: a) 读取配置文件 Configurationb) 获得SessionFactoryc) 获得Sessionsave() update() delete() get()。 注意:事务处理(Transaction)。

 

4Hibernate_CORE_API(高级ADV):

1)Configuration读取配置文件: a)配置文件: 1) hibernate.cfg.xml 2) xxx.hbm.xml 映射文件 b) hibernate程序一启动,就需要应用Configuration读取配置文件 2)SessionFactory (接口): *重量级对象(资源);特点: 大量侵占内存资源,功能强。 功能:1 创建Session 2 二级缓存 、、、、、、

注意:在一个应用中,只创建一个SessionFactorySessionFactory内部处理多

线程访问的问题 3) Session 提供通用的API进行: 轻量级(对象)资源 注意: 每一次用户操作,都要创建一个新的Session完成,不能被多用户共享。 ACRUD 增删改查。 BSession 内部封装了 Jdbc Connection

 

4) Hibernate查询,应用非主键进行查询: SQLStructured query language)结构化的查询语言: select * from t_teacher_suns where name= ? HQLhibernate query language): 例如: sql: select * from t_teacher_suns; hqlfrom Teacher sql: select * from t_teacher_suns where t_name = 'suns'; hql:from Teacher as t where t.name='suns' sql:select * from t_teacher_suns where t_name = 'suns' and t_age = 10; hql:from Teacher as t where t.name='suns' and t.age = 10;

 

HQL 特点: 1类似于SQL 2没有select关键字 3 from类名 4如果有条件进行判断 通过 as 定义类的别名;通过别名.属性访问操作数据。 使用Query对非主键进行查询: 例如: Query query = session.createQuery("from Teacher"); List<Teacher> teachers = query.list(); Query query = session.createQuery("from Teacher as t where t.name = ? and t.age= ? "); query.setString(0,"xiaohei"); query.setInteger(1, 10); List<Teacher> teachers = query.list();

 

5Hibernate实体间关联关系:

1)实体关联关系分为: 1:1 1:* *:1 *:* 一对一 一对多 多对一 多对多 2)例如:Hibernate 处理有关联关系的实体(O R M) 1O 对象 处理有关联关系的实体:

Person (人) Passport(护照) id id name serial age expiry Passport pp Person pp 关系属性:把关系的一方,作为一个属性,存储在本方,从而表达出两个对象之间的关系;

关系的方向性: 根据具体的需求而定; 单向关系: 只能从关系的一方找到另一个方; 双向关系: 关系的双方彼此都可以找到对方; 传递性持久化(级联):对关系的一方进行操作关系的另一方同时也会级联操作。 例如: session.save(Person); 自动把Passport一起保存; session.save(Passport); 自动把Person一起保存; session.get(Person.class,pk); 自动把Passport一起查询。

 

2R 数据库 处理关联关系: 外键:一张表的主键内容到另外一张表中充当外键,从而保证两张表的关系; 关系的方向性:双向关系; 注意: 没有外键 父表 1 先插入父表 有外键 子表 * 先删除子表 例如(表结构): t_user 没有外键 父表 1 先插入父表 id name age 1 suns 30 2 liyi 32 t_order 有外键 子表 * 先删除子表 id order_no price u_id 1 2001 10 1 2 2002 20 1 3 2003 30 2

 

3M 映射文件:

A.一对一,主键同时作为外键的映射文件xxx.hbm.xml:

 

<class name="Person" table="t_person"> <id name="id" column="t_id" type="java.lang.Integer"> <generator class="increment"/> </id> <property name="name" column="t_name" type="java.lang.String"/> <property name="birthday" column="t_birthday" type="java.util.Date"/> <one-to-one name="p" class="Passport" cascade="all"></one-to-one> </class> <class name="Passport" table="t_passport"> <id name="id" column="t_id" type="java.lang.Integer"> <generator class="foreign"> <param name="property">p</param> </generator>

</id> <property name="serial" column="t_serial" type="java.lang.String"></property> <property name="exprity" column="t_expiry" type="java.lang.Integer"></property> <one-to-one name="p" class="Person" cascade="all" constrained="true"/>

</class>

 

B.一对一,关联表有独立外键的映射文件xxx.hbm.xml:

<class name="Company" table="t_company"> <id name="id" column="t_id" type="java.lang.Integer"> <generator class="increment"></generator> </id> <property name="name" column="t_name" type="java.lang.String"></property> <property name="open" column="t_open" type="java.util.Date"></property> <one-to-one name="address" class="Address" property-ref="company" cascade="save-update"></one-to-one> </class> <class name="Address" table="t_address"> <id name="id" column="t_id" type="java.lang.Integer"> <generator class="increment"></generator> </id> <property name="city" column="t_city" type="java.lang.String"></property> <property name="street" column="t_street" type="java.lang.String"></property> <property name="zipCode" column="t_zip_code" type="java.lang.String"></property> <many-to-one unique="true" name="company" class="Company" column="c_id" cascade="save-update"></many-to-one>

</class>

C.一对多,映射文件xxx.hbm.xml(注意:inverse="true":

<class name="Dept" table="t_dept"> <id name="id" column="t_id" type="java.lang.Integer"> <generator class="increment"/> </id> <property name="name" column="t_name" type="java.lang.String"/> <property name="code" column="t_code" type="java.lang.String"/> <property name="open" column="t_open" type="java.util.Date"/> <set inverse="true" name="employees" cascade="save-update"> <key column="d_id"/> <one-to-many class="Employee"/> </set> </class> <class name="Employee" table="t_employee"> <id name="id" column="t_id" type="java.lang.Integer">

<generator class="increment"/>

</id> <property name="name" column="t_name" type="java.lang.String"/> <property name="birthday" column="t_birthday" type="java.util.Date"/> <property name="age" column="t_age" type="java.lang.Integer"/> <property name="salary" column="t_salary" type="java.lang.Double"/> <many-to-one name="dept" class="Dept" column="d_id" cascade="save-update"></many-to-one>

</class>

D.多对多,映射文件xxx.hbm.xml:

 

<class name="Student" table="t_student"> <id name="id" type="java.lang.Integer"> <generator class="increment"> </generator> </id> <property name="name" type="java.lang.String"></property> <property name="age" type="java.lang.Integer"></property> <set name="courses" cascade="save-update" table="t_s_c" > <key column="s_id"/> <many-to-many column="c_id" class="Course"></many-to-many> </set> </class> <class name="Course" table="t_course"> <id name="id" type="java.lang.Integer"> <generator class="increment"></generator> </id> <property name="name" type="java.lang.String"></property> <property name="score" type="java.lang.Integer"></property> <set inverse="true" name="students" cascade="save-update" table="t_s_c"> <key column="c_id"/> <many-to-many column="s_id" class="Student"></many-to-many> </set>

</class>

 

 

你可能感兴趣的:(Web,Hibernate,职场,Java框架,休闲)