SSH即为struts+spring+hibernate模式,当然最核心的是Struts,spring是绝大多数对象的生成,hibernate是对数据库的操作,hibernate是将数据库映射为一个类,对其的操作犹如对普通java类,利用面向对象的思想对数据库进行操作,对数据库的写入完成即是一个持久化过程,而持久化层即是把数据库实现当作一个独立逻辑拿出来,即数据库程序是在内存中的,为了使程序运行结束后状态得以保存。ORM即为object/relation mapping,是应用程序和数据库之间的桥梁。hibernate需要两种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>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driverproperty>
<property name="hibernate.connection.password">property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/xyz?characterEncoding=UTF-8property>
<property name="hibernate.connection.username">rootproperty>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialectproperty>
<property name="hibernate.format_sql">trueproperty>
<property name="hibernate.hbm2ddl.auto">updateproperty>
<mapping resource="org/crazyit/app/domain/News.hbm.xml"/>
session-factory>
hibernate-configuration>
一种是:表名.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="org.crazyit.app.domain.News" table="news">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
id>
<property name="title" type="java.lang.String">
<column name="title" />
property>
<property name="content" type="java.lang.String">
<column name="content" />
property>
class>
hibernate-mapping>
sessionfactory:单个数据库映射关系经过编译后的内存镜像。session: 其是应用程序和持久存储层之间交互操作一个单线程对象。
持久化对象,已经处在持久化状态的对象,
瞬态对象和脱管对象:系统进行new关键字创建java实例,没有session关联,此时处于瞬态;
hibernate.connection.driver_class:设置数据库连接驱动;
hibernate.connection.url:设置数据库的url
hibernate.connection.username:连接数据库用户名;
hibernate.connection.password:连接数据库的密码;
hibernate.connection.pool_size:设置hibernate数据库连接池的最大并发连接数;
hibernate.dialect:设置数据库连接所使用的方言;
hibernate.show_sql:是否在控制台输出sql语句,其值为Boolean;
持久化对象PO=POJO+映射文件;
PO一共有三个状态,分别为:瞬态(从未能与session发生关联过),持久化(PO实例与session实例发生关联,并且关联到数据库的记录),托管(如果PO与session实例关联过,但是由于session关闭等原因,PO脱离了session的管理)。
PO的操作必须在session的管理下才能同步到数据库,sessionFactory工厂产生,sessionfactory是数据库编译后的内存镜像,通常一个对应一个sessionfactory对象,sessionfactory对象通常由configuration对象产生;configuration负责加载hibernate的配置文件。
get():立即加载;
load():延迟加载。
在数据库表中通过主键实现记录识别的唯一性;而Hibernate中的持久化对象则通过标识符属性来实现唯一性识别。