JAVA学习总结二十九

企业级开发对实现层操作的解决方案

企业级应用需要解决并发,交互,事务,集群,安全,分布式,WEB的一系列问题。

什么是EJB

由EJB(企业级javabean)服务主要提供生命周期管理、代码产生、持续性管理、安全、事务管理、锁和并发性管理等服务。

EJB提供会话BEAN。消息驱动BEAN。

什么是J2EE

  • J2EE是一套设计、。开发、汇编和部署企业应用程序的规范。
  • J2EE提供了企业级应用程序的开发平台,提供了多层结构,分布式、基于组件、松耦合、安全可靠、独立于平台且反应迅速的应用程序环境。

J2EE包括的组件技术

  • JSP:J2EE的web层核心技术
  • Servlet:j2EE的WEB层核心技术
  • JDBC:数据库访问技术
  • XML:跨平台的可扩展标记语言
  • EJB:J2EE的业务层核心技术
  • JNDI:java命名和目录接口
  • JMS:JAVA消息服务
  • JTA和JTS:JAVA事务管理
  • JavaMail:邮件收发
  • RMI:远程方法调用
  • IDL:接口定义语言,将JAVA和CORBA集成的一种技术

框架的重量

  • 重量级框架:启动,测试,运行都不能离开容器单独进行。依赖性强。
  • 轻量级框架:SUN提出容器提供服务,轻量级框架提供同样的服务,用来支持POJO。通过代理方式实现服务的附加。用轻量级框架,持久层和业务层可以单独测试。

spring框架:

  • 表现层:struts1,struts2,webwork,springMVC
  • 业务层
  • 持久层:hibernate,mybatis,jdo,EJB实体Bean
  • DB

O/R Mapping

对象-关系映射是一门非常实用的工程技术,它实现了JAVA应用中的对象到关系数据库中的表的自动的(和透明的)持久化,实用元数据(meta data)描述对象与数据库间的映射。

O/R Mapping的优点

  • 提供生产率
  • 可维护性
  • 更好性能

Hibernate特点

  • 是一种开放源代码的对象/关系映射持久层框架
  • 事务处理,生命周期管理不依赖于J2EE容器
  • 解决数据库的方言问题
  • hbernate只需要操作对象就可以完成数据库的增、删、改、查操作。使用hibernate更面向对象
  • 轻量级,无侵入性,移植性很好。

ssh

  • struts撑杆
  • hibernate:冬眠
  • spring:春天

hibernate应用范围

不适用于:
- 批量对对象进行操作
- 使用数据库特定映射
- 表间关系很复杂时,会造成性能问题

主键生成策略

  • increment(自动增长,其主键由hibernate控制,数据库中响应的字段没有设置自动增长,不能用于集群)
  • identity(自动增长,对DB2,Mysql,sql server数据库中响应的字段设置自动增长)
  • sequence(对Oracle数据库中响应的字段设置自动增长)
  • UUID:采用UUID算法生成字符串唯一标识,UUID生成策略相对来说较快,不需要使用数据库相关的维护表的操作,但查找相对较慢
  • native(根据数据库底层的描述,决定采用identity,sequence中的一个)
  • assigned:手动分配主键,当generator没有设置时,采用这种方式
  • select:使用触发器分配主键
  • foreign:使用另外一个相关联的对象的标识符。通常和联合起来使用

oracle序列添加主键生成策略

    <id name="custld">
        <generator class="sequence">
        S_CUST_ID为序列名称
            <param name="sequence">S_CUST_ID</param>
        </generator>
    </id>

对象的状态

  • Transient(瞬时状态):当生成PO对象时产生,数据库中没有相应的记录,没有session对其进行管理
  • persistent(持久状态):当session对象调用saveorupdate()时,数据库汇总有与之对应的记录,有session对象对峙进行管理,当PO对象的值发生变化时,session对象让数据库记录与之同步
  • Detached(游离状态):当session事务提交时,数据库中有与之对应的记录,从session一级缓存中清除,session对其不再进行管理

hibernate中get和load的区别

  • get为立即加载,调用get方法时,会马上执行SQL将结果查询出来。
    load为延迟加载,调用load方法时,不会马上查询结果。而是当查询出来的对象在使用时才发出SQL语句查询结果。
  • 当查询的主键不存在时,get方法返回null,load方法会抛出“对象为找到异常”。

注意:对延迟加载而言。一旦查询的对象不适用,不会真正查询数据库。这时,如果session关闭,再使用查询的对象,那么会抛出org.hebernate.lazyInitializationException异常

数据库表一对一关系的两种方式:

  • 主键关联:从表的主键,同时又是主表的外键。从表没有单独的外键列。
  • 外键关联:从表中存在外键列,关联柱表的主键列。但外键列是不重复的。

级联操作

    <one-to-one name="card"
        class="com.demo.model.Card"
        cascade="all"

cascade中的all,none,delete,save-update几种关键字,表示主表发生的操作从表同样进行

cascade和inverse的区别

  • cascade表示级联操作,当主表记录做操作时,从表记录做相应的操作,维护的是记录。
  • inverse表示控制反转。当该属性设置为真时,表示由关联对象维护外键关系,当前对象不做外键维护,维护的是外键。一般来说,inverse设置在一方,外键由从表维护。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值