提问:
(这一些题是答辩或是面试可能遇到的或是我经常搞混的题)
1 JDBC是什么?
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用java语言编写的类和接口组成。
2 JDBC遇到的一些麻烦是什么?
1 从效率上来说,每次操作都要重新连接数据库,对数据库的压力比较大。
2 从代码上考虑,每次执行的语句都是经过编译及连接的控制,还有考虑事务提交回滚什么的,程序员的重复性和验证性的工作量加大。
3 java提倡的是面向对象编程,但是数据库是对数据进行操作。
3 三层架构是哪三成?
界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。
4 数据库分页的关键字(oracle,MySQL 以及 SQL Server)?
Oracle---》 ROWNUM ;MySQL---》limit ;SQL Server---》top
5 谈谈你对hibernate缓存的了解?
开始今天的知识点总结
1 认识hibernate
hibernate是轻量级JavaEE应用的一个持久层框架。它的作用在于管理Java实体类到数据库表之间的映射关系,并且提供数据查询和获取数据的方法,可以大幅度的缩短使用JDBC处理数据持久化的时间。
java则是一门面向对象的编程语言,hibernate完成了对象模型和基于SQL关系模型的映射关系,使得程序员可以只用这个来面向对象编程。
2 对象--关系映射
ORM全称Object/Relation Mapping,对象/关系数据库映射。该框架的基本特征就是完成面向对象的编程语言到关系数据库之间的映射。
因为java一开始项目就是面向对象分析,面向对象设计,面向对象编程,所以关系数据库就把数据库的数据包装成面向对象模型,这就是ORM框架。
面向对象编程的优点:
1、 面向对象建模,操作
2、 多态,继承,封装
3、 摒弃难以理解的过程
4、 简单易用,容易理解
关系型数据库的优点:
1、 大量数据查询、排序
2、 集合数据连接操作、映射
3、 数据库访问的并发、事物
4、 数据库的约束、隔离
结合着两个的优点,采用ORM框架后,我们的应用程序就可以直接访问对象的方式对对象进行持久化(CRUD)。
基本映射的方式:
1 数据库表映射类(实体类———数据库表):持久化类被映射到一个数据表 ,当使用一个持久类来创建,增加,修改,伤处实例的时候,系统会自动的对这个表进行CRUD操作。
2 数据表的行映射对象(new实例———行):持久化类会生成很多实例,每个实例就对应数据库一行的操作。每个持久化对象对应数据表的一行记录。
3 数据表中的列映射对象的属性(属性———字段):持久化类对属性值进行修改的时候,orm将会转化成数据库对应行指定列来改变值。
4 Hibernate的介绍
Hibernate是一个面向JAVA环境的对象/关系数据库映射工具,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去 ,Hibernate的目标主要是为了释放开发者通常的数据持久化相关的编程的繁重任务。
对于一数据为中心的程序员来说,hibernate不是最好的方法,但是对于以java为中心的程序员来说,hibernate是最有用的。
Hibernate还提供数据查询和获取数据的方法。
5 Hibernate就是一个ORM框架的典型代表;那么与其他的ORM框架相比,他的特点在于什么地方?
1、 开源和免费的License,方便需要时研究源码,改写源代码,进行功能定制。
2、 轻量级封装,调试容易,减轻程序员负担。
3、 有可扩展性,API开放,功能不够用时,自己可以编码扩展。
6 Hibernate持久化解决方案:?
Hibernate的持久化解决方案用户将不再使用jdbc来链接数据库进行操作了。而是以面向对象的方式进行持久层操作。对于数据的访问,事务用户都不用管了。将应用从底层的JDBC中抽象出来,通过配置文件管理底层的JDBC连接,让Hibernate解决持久化访问的实现。
7 hibernate工作原理图:
8 理解JAVA对象的3种形态
1 瞬态 ---对象是通过new出来的,被认为处于瞬态。
瞬态对象不会被持久化到数据库中,也不会被赋予持久化标识(ID),如果程序中失去了瞬态对象的引用,瞬态对象将被垃圾回收机制销毁。
2 持久态--- 持久化实例在数据库中有对应的记录,并拥有一个持久化标识(id),持久化的实例可以是刚保存的。也可以是刚被加载的。无论那种,持久化对象都必须与指定的Hibernate Session关联。
Hibernate会检测到处于持久化状态对象的改动,在当前操作执行完成时将对象数据写回数据库。数据库与java中的改变是同步的。
3 游离态-- 这个实例他曾经处于持久化状态,但随着与之关联的session被关闭,该对象就变成游离状态了。
游离对象的引用依旧有效,对象可以继续被修改,只是不会同步到数据库中。如果重新让游离对象与某个session关联,该对象会重新转换为持久化状态。
比如说先关闭了session关联,在java中改变对象的属性,这时数据库数据不会改变,但是当你连接到session的时候,数据库的数据就会改变成你java中相同的数据了。