public
static
void
main(String[]
args
)
{
Connection
con
=
null
;
PreparedStatement
pr
=
null
;
try
{
//
设置是否自动提交
//
默认为真,一旦更新数据库,,就写入数据库
//
如果设置为
false
,表示手动提交,必须调用
commmit
()
方法才能更新数据库
con
.setAutoCommit(
false
);
pr
.executeQuery();
//
提交事物
con
.commit();
}
catch
(SQLException
e
) {
//
TODO
Auto-generated catch block
e
.printStackTrace();
try
{
//
回滚事物
con
.rollback();
}
catch
(SQLException
e1
) {
//
TODO
Auto-generated catch block
e1
.printStackTrace();
}
}
企业开发需要解决的问题:
需要解决
并发,交互,事物,集群,安全,分布式,
web
的一系列问题。
EJB:
EJB
服务主要提供生命周期管理,代码产生,持续性管理,锁和并发行管理等服务。
J2EE:
J2EE
是一套设计,开发,汇编和部署企业应用程序的规范;
J2EE
提供了企业应用级程序的开发平台,提供了多层结构,分布式,基于组件,松耦合,安全可靠,独立于平台且反应迅速的应用程序环境。
J2EE
包含的组件技术:
JSP
:
J2EE
的
web
层核心技术;
servlet:J2EE
的
web
层核心技术;
JDBC
:数据库访问技术;
XML
:跨平台的可扩展标记语言;
EJB
:
J2EE
的业务层核心技术;
JNDI
:
JAVA
的命名和目录接口;
JMS
:
JAVA
消息事物;
JTA
和
JTS:JAVA
事物管理;
JAVAemail
:邮件收发;
RMI:
远程方法调用;
IDL
:接口定义语言;将
JAVA
和
CORBA
集成的一种技术。
轻量级框架:启动,测试,运行都不能离开容器单独进行,依赖性强。
表现层
业务层
持久层
DB
strtus1 hibernate
strtus2 mybatis
webwork jdo
springMVC EJB
实体
bean
重量级框架:
SUN
提出容器提供服务,轻量级框架提供同样的服务,用来支持
POJO
,通过了代理方式实现服务的附加,用轻量级框架,持久层和业务层可以单独测试。
O/R Mapping
:
O/R
映射
对象-关系映射是一门非常实用的工程技术,它实现了Java应用中的对象到关系数据库中标的自动(和透明的)持久化,实用元数据(meta data)描述对象与数据库间的映射。
O/R Mapping
的优点:
提高生产率;
可维护性;
更好性能。
Hibernate是一种开放源代码的对象/关系映射持久层框架;
事物处理,生命周期管理不依赖于J2EE容器;
解决数据的方言问题
hibernate只需要操作对象就可以完成数据的增删改查操作,实用hibernate更面向对象;
轻量级、无侵入性,移植性很好。
SSH:
strtus:撑杆
hibernate:冬眠
spring:春天
hibernate
应用范围:
不适用范围:
批量对象进行操作时;
使用数据库特定映射;
表间关系复杂时,会造成性能问题
主键生成策略:
increment:自动增长,主键由hibernate控制,数据库中相应的字段没有设置自动增长,不能用于集群;
identity:自动增长,对DB2,Mysql,sql,server数据库中对应的字段设置自动增长;
sequence:对oracle数据库中相应的字段设置自动增长;
UUID:采用UUID算法生成字符串唯一 标识,UUID对生成策略来说速度较快,不需要使用数据库相关的维护表的操作,但查找相对较慢;
native:根据数据库底层描述,决定采用identity,sequence中的一个;
select:使用触发器分配主键;
foreign:使用另一个相关联的对象的标识符,通常和<one-to-one>;联合起来使用
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
的区别:
1. get
为立即加载,调用
get
方法时,会马上执行
SQL
将结果查询出来;
load
为延迟加载,调用
load
方法时不会马上查询结果,而是当查询结果在使用时会发出
SQL
查询结果;
2.
当查询主键不存在时,
get
方法返回空,
load
方法会抛出对象未找到异常;
对延迟加载而言,一旦查询的对象不使用,不会真正查询数据库,这时,如果
session
关闭,再使用查询的对象,那么会抛出
org.hibernate.LazyInitializationException
: could not initialize proxy - no Session
懒加载异常
一对一有两种方式:
主键关联:从表主键,同时又是主表的外键,从表没有单独的外键列;
外键关联:从表中存在外键列,关联主表的主键列,但外键列不能重复;
cascade="all" 级联操作,(all none delete save-update)当当前对象执行操作的情况下,其关联的对象也执行cascade设置的同样操作
cascade和inverse的区别:
cascade表示级联操作,当主表记录做操作时,从表记录做相应的操作,维护的是记录。
inverse表示控制反转,当该属性设置为真时,表示由关联对象维护外键关系,当前对象不做外键的维护。维护的是外键。一般来说,inverse设置在一方,外键由从表维护。
org.hibernate.MappingException: Unknown entity: com.lovo.bean.GradeBean
没有添加映射抛出的异常