java 框架
事务处理
同一个业务中保证同时成功和同时失败,不可以一个成功一个失败
子主题 2
企业级开发需要解决的问题
并发,交互,集群,事务,安全,分布式,
数据库隔离级别
Read Uncommited
没有提交就能 读到
存在脏读
Read Commited
提交之后才能更新数据库
不可复读
虚读
Repeatable Read
可重复读
读取事务时禁止写事务,写事务时禁止任何其他事务
Serializable
可序列化读
事务只能一个接一个执行,不能并发执行
连接池
不用连接池的缺点
每次请求都要建立一次数据库连接
每次建立数据库连接后都要断开
不能控制被创建的连接对象数量
工作流程
为数据库建立一个缓冲池.预先在缓冲池中放入一定数量的连接.当需要建立数据连接时,便从缓冲池中取出一个,使用完毕后再放回去.通过设定连接池最大连接数来防止系统无休止的数据库连接.还可以管理 监视数据库的连接的数量,使用情况,位系统开发,测试及性能的调试提供依据
持久层向连接池申请一个连接.连接池返回一个空闲连接.如果没有空闲连接就检查连接池中的连接数量是否达到最大连接数.如果没有到达最大连接数则建立新的连接对象,放入连接池,如果达到最大连接数,用户需要等待,这时可以设置最大等待时间来控制用户的 等待状态,等待时间内有别 的连接对象就分配给用户,如果超时则返回null
javaee
概念
为企业级应用程序提供的开发平台,提供了多层结构,分布式,基于组件,松耦合,安全可靠,独立于平台且反应迅速的应用程序
组件
JSP
JAVAEE的web核心技术
servlet
JAVAEE的web核心技术
JDBC
数据库访问技术
XML
跨平台可扩展标记性语言
JNDI
java命名和目录接口
EJB
java业务层核心技术
EJB(企业级javaBean)
服务主要提供生命周期管理,代码产生,持续性管理,安全,事务性管理,锁和并发行管理
JMS
java消息服务
jta和jts
java事务管理
javaMail
邮件收发
RMI
远程方法调用
IDL
定义接口语言
延迟加载
实体对象延迟加载(load())
集合延迟加载(一对多和多对多时关联集合)
属性的延迟加载(clob大多数数据时)
clob
存放大文本的类
blob
存放二进制数据的类型
ssh
spring
春天
轻量级框架
IoC 控制反转
概念
不创建对象,但是描述创建他们的方式.在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要那一项配置(在String的容器IOC容器中),容器负责将这些连接在一起
组件注入方式
接口注入
通过SET方法注入
.
构造方法注入
优点
String 能消除许多工程中常见的对Singleton的过多使用
String 能消除格式各样的属性的文件的需要,使配置信息一元化
真正意义上的面向接口编程
使用String构建的程序易于单元测试
String支持 JDBC和O/RMapping 产品
MVC web框架提供一种清晰无侵略性的MVC实现方式
String能使AOP提供声明性事务管理,可以不直接操作JTA也能够对事务进行管理
容器
bean工厂
延迟加载
应用上下文的父接口
缺省状态为单例模式
ApplicationContext
功能
扩展bean工厂的接口
立即加载
同=提供附加功能
常用类
ClassPathXmlApplicationContext 文件必须放在src目录下
FileSystemXmlApplicationContext 文件放在工程下面,用在java项目中
XmlWebAppilcationContext 用在web项目中
配置文件
配置实体类时用ID和name的 区别
id唯一标示bean不能使用特殊字符,在bean引用的时候只能有id指向你需要的bean
name可以用特殊字符,可以使用多个名称,用逗号隔开,如果没有id默认第一个名称为Id
struts
撑杆
hibernate
冬眠
概念
一种持久层框架
作用
作用封装JDBC和SQL,简化持久层操作,由面向JDBC编程变为面向对象编程
应用范围
不适合于批量操作
是用数据库特定映射
表间关系很复杂时,会造成性能问题
优点
持久层框架
事务处理
解决数据库方言问题
面向对象
轻量级
O/R Mapping
对象-关系映射
实现了Java应用中的对象到关系数据库的表的自动的持久化,使用元数据(meta data) 描述对象于数据库建的映射
优点
提高生产率
可维护性
更好的性能
主键生成策略
increment
自动增长,主键由hibernate控制
identity
自动增长,对 DB2,Mysql.sql.server数据库中相应的字段设置自动增长
sequence
Oracle专属
使用oracle序列添加主键生成策略
<id name="custld">
<generator class="sequence">
<param name="sequence">S_CUST_ID</param>
</generator>
</id>
.
UUID
查找慢,生成快
native
根据底层数据库描述,决定用identity, 或 sequence
assigned
手动分配
select
使用触发器分配主键
foreign
使用另一个相关联的对象的标识符
cascade 和 inverse 的区别
cascad
cascade 表示联级操作,当主表记录做操作时,从表记录做相应操作,维护的时记录
inverse
inverse 表示控制反转.当属性设置为真时,表示由关联 对象的维护外键关系,当前对象不做外键维护,维护的是外.一般来说,inverse设置在一方由从表来维护
数据库表的关系
一对一关系
主键关联
从表的主键,同时又是主表的外键,从变频没有单独外键列
外键关联
从表中存在外键,关联主表的主键,单外键是不重复的
级联操作
当当前对象执行某操作的情况下,其关联的对象也执行 cascode 设置的同样操作
all none delete save-update
对象的状态
瞬时状态
当生成PO记录的时候数据库没有相应的记录,没有session对其进行管理
持久状态
当session对象调用saveupdate()时,数据库有相应的记录,有session对象进行管理,PO值发生变化时,session对象让数据库记录与之同步
游离状态
当session提交事物时,数据库与之相对应的记录从session缓存中消除,session不再对其管理
get 和 load 的区别
加载
get立即加载
调用SQL语句会立即执行SQL语句的结果查询出来
load延迟加载
调用load方式时,不会马上查询除结果,当查询结果使用时,才查询SQL语句的查询结果
当主键不存在时
get返回null
load方法返回对象为找到异常
对延迟对象而言,一旦查询对象不使用不会正真的查询数据库,如果,session 关闭,再使用查询的对象,就会抛出了‘懒加载异常’
优化策略
用高版本的hibernate
制定合理的缓存策略
采用合理的session管理机制
劲量使用延迟加载
如果有可能采用UUID作为主键生成策略
如果有可能使用乐观键代替悲观键
在开发中显示hibernate执行的SQL语句,从而制定更好的实现策略
复杂查询和统计查询可以使用SQL语句完成,甚至可以考虑使用储存过程完成
框架类型
重量级框架
测试,启动,运行,都不能离开容器单独运行,依赖性强
轻量级框架
sun公司提出容器提供服务,轻量级提供同样的服务,用来支持POJO.通过代理方法实现服务的附加.用轻量级框架,可以单独测试,持久层和业务层
缓存
概念
数据库数据在内存中的临时容器
描述
位置
位于数据库与数据访问层中间
ORM在查询数据时首先会根据自身的缓存管理策略,在缓存中找点相应数据,如发现所需的数据,则直接将此数据作为结果利用
优点
避免数据库性能的开销
相对内存而言,数据库调用是一个相对昂贵的过程
分类
一级缓存
在当前事务范围内的数据缓存
就hibernate而言,以及缓存基于 session的生命周期实现,session一旦关闭,一级缓存就清除,一级缓存是hibernate自带的缓存,是必须的
应用级缓存(二级缓存)
既在某个应用中或应用中某个独立数据库访问子集中的共享缓存,此缓存可由多个事务共享
在hibernate中由sessionFactory实现
分布式缓存
在多个应用实例,多个JVM间共享的缓存
锁
当多个用户同时读取或更新一个数据时,需要一个机制来保证数据在这个操作过程中不会被外界修改,这样的机制称为锁
悲观锁
在读取数据过程中不允许其他用户对数据进行读取或修改,一般用于都事务,不合适并发
乐观锁
为数据增加一个版本标示,增加一个version字段
读取数据时将版本号一同读出
更新时版本号加一
加数据的提交的版本和当前版本进行对比
如果提交的数据大于当前版本则给以更新,否则认为是过期数据
配置文件放在SRC下面
事务处理
同一个业务中保证同时成功和同时失败,不可以一个成功一个失败
子主题 2
企业级开发需要解决的问题
并发,交互,集群,事务,安全,分布式,
数据库隔离级别
Read Uncommited
没有提交就能 读到
存在脏读
Read Commited
提交之后才能更新数据库
不可复读
虚读
Repeatable Read
可重复读
读取事务时禁止写事务,写事务时禁止任何其他事务
Serializable
可序列化读
事务只能一个接一个执行,不能并发执行
连接池
不用连接池的缺点
每次请求都要建立一次数据库连接
每次建立数据库连接后都要断开
不能控制被创建的连接对象数量
工作流程
为数据库建立一个缓冲池.预先在缓冲池中放入一定数量的连接.当需要建立数据连接时,便从缓冲池中取出一个,使用完毕后再放回去.通过设定连接池最大连接数来防止系统无休止的数据库连接.还可以管理 监视数据库的连接的数量,使用情况,位系统开发,测试及性能的调试提供依据
持久层向连接池申请一个连接.连接池返回一个空闲连接.如果没有空闲连接就检查连接池中的连接数量是否达到最大连接数.如果没有到达最大连接数则建立新的连接对象,放入连接池,如果达到最大连接数,用户需要等待,这时可以设置最大等待时间来控制用户的 等待状态,等待时间内有别 的连接对象就分配给用户,如果超时则返回null
javaee
概念
为企业级应用程序提供的开发平台,提供了多层结构,分布式,基于组件,松耦合,安全可靠,独立于平台且反应迅速的应用程序
组件
JSP
JAVAEE的web核心技术
servlet
JAVAEE的web核心技术
JDBC
数据库访问技术
XML
跨平台可扩展标记性语言
JNDI
java命名和目录接口
EJB
java业务层核心技术
EJB(企业级javaBean)
服务主要提供生命周期管理,代码产生,持续性管理,安全,事务性管理,锁和并发行管理
JMS
java消息服务
jta和jts
java事务管理
javaMail
邮件收发
RMI
远程方法调用
IDL
定义接口语言
延迟加载
实体对象延迟加载(load())
集合延迟加载(一对多和多对多时关联集合)
属性的延迟加载(clob大多数数据时)
clob
存放大文本的类
blob
存放二进制数据的类型
ssh
spring
春天
轻量级框架
IoC 控制反转
概念
不创建对象,但是描述创建他们的方式.在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要那一项配置(在String的容器IOC容器中),容器负责将这些连接在一起
组件注入方式
接口注入
通过SET方法注入
.
构造方法注入
优点
String 能消除许多工程中常见的对Singleton的过多使用
String 能消除格式各样的属性的文件的需要,使配置信息一元化
真正意义上的面向接口编程
使用String构建的程序易于单元测试
String支持 JDBC和O/RMapping 产品
MVC web框架提供一种清晰无侵略性的MVC实现方式
String能使AOP提供声明性事务管理,可以不直接操作JTA也能够对事务进行管理
容器
bean工厂
延迟加载
应用上下文的父接口
缺省状态为单例模式
ApplicationContext
功能
扩展bean工厂的接口
立即加载
同=提供附加功能
常用类
ClassPathXmlApplicationContext 文件必须放在src目录下
FileSystemXmlApplicationContext 文件放在工程下面,用在java项目中
XmlWebAppilcationContext 用在web项目中
配置文件
配置实体类时用ID和name的 区别
id唯一标示bean不能使用特殊字符,在bean引用的时候只能有id指向你需要的bean
name可以用特殊字符,可以使用多个名称,用逗号隔开,如果没有id默认第一个名称为Id
struts
撑杆
hibernate
冬眠
概念
一种持久层框架
作用
作用封装JDBC和SQL,简化持久层操作,由面向JDBC编程变为面向对象编程
应用范围
不适合于批量操作
是用数据库特定映射
表间关系很复杂时,会造成性能问题
优点
持久层框架
事务处理
解决数据库方言问题
面向对象
轻量级
O/R Mapping
对象-关系映射
实现了Java应用中的对象到关系数据库的表的自动的持久化,使用元数据(meta data) 描述对象于数据库建的映射
优点
提高生产率
可维护性
更好的性能
主键生成策略
increment
自动增长,主键由hibernate控制
identity
自动增长,对 DB2,Mysql.sql.server数据库中相应的字段设置自动增长
sequence
Oracle专属
使用oracle序列添加主键生成策略
<id name="custld">
<generator class="sequence">
<param name="sequence">S_CUST_ID</param>
</generator>
</id>
.
UUID
查找慢,生成快
native
根据底层数据库描述,决定用identity, 或 sequence
assigned
手动分配
select
使用触发器分配主键
foreign
使用另一个相关联的对象的标识符
cascade 和 inverse 的区别
cascad
cascade 表示联级操作,当主表记录做操作时,从表记录做相应操作,维护的时记录
inverse
inverse 表示控制反转.当属性设置为真时,表示由关联 对象的维护外键关系,当前对象不做外键维护,维护的是外.一般来说,inverse设置在一方由从表来维护
数据库表的关系
一对一关系
主键关联
从表的主键,同时又是主表的外键,从变频没有单独外键列
外键关联
从表中存在外键,关联主表的主键,单外键是不重复的
级联操作
当当前对象执行某操作的情况下,其关联的对象也执行 cascode 设置的同样操作
all none delete save-update
对象的状态
瞬时状态
当生成PO记录的时候数据库没有相应的记录,没有session对其进行管理
持久状态
当session对象调用saveupdate()时,数据库有相应的记录,有session对象进行管理,PO值发生变化时,session对象让数据库记录与之同步
游离状态
当session提交事物时,数据库与之相对应的记录从session缓存中消除,session不再对其管理
get 和 load 的区别
加载
get立即加载
调用SQL语句会立即执行SQL语句的结果查询出来
load延迟加载
调用load方式时,不会马上查询除结果,当查询结果使用时,才查询SQL语句的查询结果
当主键不存在时
get返回null
load方法返回对象为找到异常
对延迟对象而言,一旦查询对象不使用不会正真的查询数据库,如果,session 关闭,再使用查询的对象,就会抛出了‘懒加载异常’
优化策略
用高版本的hibernate
制定合理的缓存策略
采用合理的session管理机制
劲量使用延迟加载
如果有可能采用UUID作为主键生成策略
如果有可能使用乐观键代替悲观键
在开发中显示hibernate执行的SQL语句,从而制定更好的实现策略
复杂查询和统计查询可以使用SQL语句完成,甚至可以考虑使用储存过程完成
框架类型
重量级框架
测试,启动,运行,都不能离开容器单独运行,依赖性强
轻量级框架
sun公司提出容器提供服务,轻量级提供同样的服务,用来支持POJO.通过代理方法实现服务的附加.用轻量级框架,可以单独测试,持久层和业务层
缓存
概念
数据库数据在内存中的临时容器
描述
位置
位于数据库与数据访问层中间
ORM在查询数据时首先会根据自身的缓存管理策略,在缓存中找点相应数据,如发现所需的数据,则直接将此数据作为结果利用
优点
避免数据库性能的开销
相对内存而言,数据库调用是一个相对昂贵的过程
分类
一级缓存
在当前事务范围内的数据缓存
就hibernate而言,以及缓存基于 session的生命周期实现,session一旦关闭,一级缓存就清除,一级缓存是hibernate自带的缓存,是必须的
应用级缓存(二级缓存)
既在某个应用中或应用中某个独立数据库访问子集中的共享缓存,此缓存可由多个事务共享
在hibernate中由sessionFactory实现
分布式缓存
在多个应用实例,多个JVM间共享的缓存
锁
当多个用户同时读取或更新一个数据时,需要一个机制来保证数据在这个操作过程中不会被外界修改,这样的机制称为锁
悲观锁
在读取数据过程中不允许其他用户对数据进行读取或修改,一般用于都事务,不合适并发
乐观锁
为数据增加一个版本标示,增加一个version字段
读取数据时将版本号一同读出
更新时版本号加一
加数据的提交的版本和当前版本进行对比
如果提交的数据大于当前版本则给以更新,否则认为是过期数据
配置文件放在SRC下面