Hibernate学习札记(z_1)
发布时间: 2012-10-17 10:25:46 作者: rapoo
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>