解决方案是什么?
企业级应用需要解决并发,交互,事务,集群,安全,分布式,WEB的一系列问题。
什么是EJB?
由EJB(企业级javabean)服务主要提供生命周期管理、代码产生、持续性管理、安全、事务管理、锁和并发行管理等服务。
什么是J2EE
J2EE是一套设计、开发、汇编和布署企业应用程序鄂规范。
J2EE提供了企业级应用程序的开发平台,提供了多层结构、分布式、基于组件、松耦合、安全可靠、独立于平台且反应迅速的应用程序环境。
J2EE包含的组件技术:
①JSP:J2EE的WEB层核心技术
②Servlet:J2EE的Web层核心技术
③JDBC:数据库访问技术
④XML:跨平台的可扩展标记语言
⑤EJB:J2EE的业务层核心技术
⑥JNDI:JAVA命名和目录接口
⑦JMS:JAVA消息服务
⑧JTA和JTS:JAVA事务管理
⑨javaMail:邮件收发
10、RMI:远程方法调用
11、IDL:接口定义语言,将JAVA与CORBA集成的一种技术
重量级框架:启动、测试、运行都不能离开容器单独进行。依赖性强。
轻量级框架:SUN提出容器提供服务,框架提供同样的服务,用来支持POJO。通过代理方式实现服务的附加。用轻量级框架,持久层和业务层可以单独测试。
类通过请求拦截,附加功能,添加服务
EJB组件分布式处理,轻量级框架通过RPC远程方法调用,WEBSERVICE
表现层 |
| 业务层 |
| 持久层 |
| 数据库DB |
Struts1 |
|
|
| hibernate |
|
|
Struts2 |
|
|
| mybatis |
|
|
webwork |
|
|
| jdo |
|
|
springMVC |
|
|
| EJB实体Bean |
|
|
O/RMapping
什么是O/R Mapping?
对象-关系映射是一门非常实用的工程技术。它实现了java应用中的对象到关系数据库中的表的自动的(和透明的)持久化,实用元数据描述对象与数据库间的映射。
O/R Mapping的优点:
提高生产率 可维护性 更好性能
Hibernate特点:
①Hibernate是一种开放源代码的对象/关系映射持久层框架
②事务处理,生命周期管理不依赖于J2EE容器
③解决数据库的方言问题
④hibernate只需要操作对象就可以完成数据库的增、删、查、改操作。使用hebernate更面向对象
⑤轻量级、无侵入性,移植性很好。
Ssh:
Struts:撑杆
Hibernate:冬眠
spring:春天
主键生成策略:
Increment(自动增长,其主键由hibernate控制,数据库中相应对的字段没有设置自动增长,不能用于集群)
Indentity(自动增长,对DB2、Mysql,sql server数据库中相应的字段设置自动增长)
Sequence(对Oracle数据库中相应的字段设置自动增长)
UUID:采用UUID算法生成字符串唯一标识,UUID生成策略相对涞水速度较快。不需要使用数据库相关的维护表的操作,但查找相对较慢
Native(根据数据库底层的描述,觉得采用indentity,sequence中的一个)
assigned:手动分配主键,当generator没有设置时,采用这种方式
Select:使用触发器分配主键
foreign:使用另外一个相关联的对象的标识符。通常和<one-ti-one>联合起来使用
oracle序列添加主键生成策略
<idname="custld">
<generator class="sequence">
S_CUST_ID为序列名称
<paramname="sequence">S_CUST_ID</param>
<generator>
</id>
对象状态
Transient(瞬时状态)
当生成PO对象时产生,数据库中没有相应的记录,没有session对其进行管理
Persistent(持久状态)
当session对象调用saveorupdate()时,数据库中有与之对应的记录,有session对象对之进行管理,当PO对象的值发生变化时,session对象让数据库记录与之同步
Detached(游离状态)
当session植物提交时,数据库中有与之对应的记录,从session一级缓存中清楚,session对其不再进行管理
hibernate中getheload的区别
1、get为立即加载,调用get方法时,会马上执行SQL将结果查询出来。
load为延迟加载,调用load方法时,不会马上查询结果。二十当查询出来的对象在使用时,才发出SQL语句查询结果。
2、当查询的主键不存在时,get方法返回null,load方法会抛出“对象未找到异常”。
对延迟加载而言。一旦查询的对象不使用,不会真正查询数据库。这时,如果session关闭,再使用查询的对象,那么会抛出
org.hibernate.LazyInitializationException。