首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate学习札记(z_1)

2012-10-17 
Hibernate学习笔记(z_1)来源:wcily123的blog? (特此赞一下^^很受益)??数据表现层业务逻辑层数据持久层SUN

Hibernate学习笔记(z_1)

来源:wcily123的blog? (特此赞一下^^很受益)

?

?

数据表现层

业务逻辑层

数据持久层

SUN的桌面应用

Swing AWT

普通Java类

JDBC

SUN的WEB基本应用

JSP

普通Servlet

JDBC

SUN的WEB高级应用

JSF

SessionBean

Persistence

WEB国内流行开源

Struts

Spring

Hibernate

2.对象持久化的原因(目标):

?

1) 内存不能持久,需要在硬盘上持久保存 //(物理上,物理的都不是根本原因)?

2) 内存容量有限,需要在容量更大的硬盘上保存?

3) 共享(Internet的本质:信息的收集、整理、发布)//最重要的原因

4) 检索(大规模) //也很重要

5) 管理(备份、安全)?

1) 对象序列化

2) DB技术(JDBC 数据库)?

po -> (pojo)?

-> oid(唯一,中性)?

-> getters/setters

-> 构造方法

<class name=“POJO的类全路径” table=“对应的库表名” //这两项一定要配置,其它的都可以不配置 discriminator-value=“discriminator_value” //区分不同子类的值,多态时使用。默认与类名一样 dynamic-update=“true | false” //是否动态更新SQL。false:每次都更新所有属性;true:只更新修改的 dynamic-insert=“true | false” //是否动态插入SQL。false:每次都插入所有属性;true:只插入非空的 select-before-update=“true | false” //是否在update前查询对象是否被修改过,修改过才update polymorphism=“implicit | explicit” //设置多态是显性(explicit)的还是隐性(implicit)的 where=“查询时使用的SQL的条件子句” //查询时使用的SQL的条件子句 lazy=“true | false” //设置延迟加载策略 />



???? 一个实体对应一个xml文件,组件用id,非组件用property。

???? *.hbm.xml文件样板:

<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!--package指文件所在的包名 --> <hibernate-mapping package="com.tarena.ebank.biz.entity"> <!-- name:POJO类的名; table数据库里对应的表名--> <class name="Account" table="student"> <!-- OID:(唯一,中性)表自动生成的(需要另外添加hilo表) --> <id name="oid" column="OID"> <generator column="ACTNO" unique="true" not-null="true"/> <property name="bal" column="BALANCE" not-null="true"/> </class> </hibernate-mapping>



?? 步骤四:Hibernate配置文件
???? hibernate.cfg.xml或hibernate.properties
???? 1.需要配置那些信息:持久化映射,方言,特性,登陆信息
???????? 多数使用默认的设置。
???????? A、dialect:方言,就是拼驱动程序和SQL语句。每种数据库对应一种方言其实就是指定了用那一种数据库。
Oracle数据库方言:org.hibernate.dialect.OracleDialect
MySql数据库方言:org.hibernate.dialect.MySQLDialect

???????? B、Object Persistence:对象持久化。把内存中的数据保存到一个永久的介质中,比如说数据库。
???????? C、ORM:对象关系映射,是一个自动的过程
???????? 注:持久对象与临时对象最大的区别是有没有数据库id标识。
??? 2.hibernate.cfg.xml的样板:

<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 数据库连接配置 --> <property name="connection.url">jdbc:mysql://localhost:3306/test</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.username">root</property> <property name="connection.password">password</property> <!-- 自动建表语句:create覆盖旧表,update自动更新,none不理会 --> <property name="hbm2ddl.auto">update</property> <!-- 是否在控制台上打印SQL(Hibernate把语句转化为SQL语句),默认false--> <property name="show_sql">true</property> <!-- 缓存策略,数据量不大可不写 --> <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property> <property name="cache.use_query_cache">false</property> <property name="cache.use_second_level_cache">false</property> <!-- 不同数据库使用的SQL选择 --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="myeclipse.connection.profile">mysql</property> <!-- 连接池配置,练习时不写,使用默认的 --> <property name="connection.pool_size">1</property> <!--决定是采用thread或jta或自定义的方式来产生session,练习时不写,使用默认的 --> <property name="current_session_context_class">thread</property> <!-- *.hbm.xml文件路径,各关联表要一同写上 --> <mapping resource="many_to_one/vo/Customer.hbm.xml" /> <mapping resource="com/tarena/ebank/biz/entity/Order.hbm.xml" /> </session-factory> </hibernate-configuration>

热点排行