101.请解释下 ORM?

对象关系映射(Object Relational Mapping)模式
是一种为了解决面向对象与关系数据库
存在的互不匹配的现象的技术。
简单来说,
ORM是通过使用描述对象和数据库之间映射的元数据,
将程序中的对象自动持久化到关系数据库中。 传统如何实现持久化:
、采用硬编码方式,
为每一种可能的数据库访问
操作提供单独的方法,
、ORM提供了对数据库的映射,
不用sql直接编码,
能够像操作对象一样从数据库获得数据。 ORM核心原则: 、简单:
以最基本的形式建模数据。 、传达性:
数据库结构被任何人都能理解的语言文档化。 、精确性:
基于数据库模型创建正确标准化的结构。 ORM技术特点:
、提高开发效率。
由于可以自动对entity对象与数据库中的table
进行字段与属性的映射,
所以我们实际可能已经不需要一个专用的、
庞大的数据访问层。 ORM缺点:
使用ORM所生成的代码
一般不太可能写出很高效的算法,
性能会受影响。

102.Hibernate 与 JPA 区别在哪?

在讨论Hibernate与Jpa的关系是,
首先要明确Jpa的用途。
JPA全称为Java Persistence API ,
Java持久化API是Sun公司在Java EE 5规范中
提出的Java持久化接口。
JPA吸取了目前Java持久化技术的优点,
旨在规范、简化Java对象的持久化工作。
使用JPA持久化对象,
并不是依赖于某一个ORM框架。
与Jpa相关的就是这个ORM技术,
ORM 是Object-Relation-Mapping,
即对象关系影射技术,
是对象持久化的核心。O
RM是对JDBC的封装,
从而解决了JDBC的各种存在问题: 知道Jpa是一种规范,
而Hibernate是它的一种实现。
除了Hibernate,
还有EclipseLink(曾经的toplink),
OpenJPA等可供选择,
所以使用Jpa的一个好处是,
可以更换实现而不必改动太多代码。

103.什么是懒加载(Lazy Loading)?

 . 懒加载顾名思义就是延迟加载。
即当两个及以上表
使用Hibernate来管理级联关系时,
一个表被加载到JVM内存中,
而其他表会被暂存在数据库的缓存中,
当需要使用相关表数据的时候
再加载到JVM内存中。
因此通过懒加载机制可以
减少内存中不必要的开销,
以提高程序的性能。
. 问题描述:当使用懒加载时,
如果将session关闭,
则断开了与数据库的连接,
这时如果要访问字表数据,
由于字表数据存放在数据库缓存中,
而连接已经关闭,
则访问字表数据时会抛出LazyInitializationException异常。 解决办法:
. 不使用懒加载,将字表配置文件中的lazy属性改为false
.使用过滤器,
把close session操作推迟到得到页面结果后执行,
这里可以采用Spring中的OpenSessionViewFilter过滤器来实现
.手动将需要的字表数据
从数据库缓存加载到jvm内存中

104.什么是 N+1 难题?

一般而言说n+1意思是,
无论在一对多还是多对一当查询出n条数据之后,
每条数据会关联的查询1次他的关联对象,
这就叫做n+。 本来所有信息可以一次性查询出来,
也就是简单的连表查询,
但是Hibernate会首先查询1次得到当前对象,
然后当前对象里面的n个关联对象
会再次访问数据库n次,
这就是1+n问题。 Hibernate给出了3中解决方案,
.延迟加载,
当需要的时候才查询,不
需要就不查询,
但是感觉这种方式治标不治本,
尤其是在那种报表统计查询的时候更为明显。 .fetch="join",
默认是fetch="select",
这个其实说白了就是一个做外连接,
允许外键为空的情况之下。 .二级缓存,
第一次查询之后存在内存中,
后面的相同查询就快了。
但是有2个缺点:
二级缓存首先是有点浪费内存空间,
如果多了的话浪费还比较严重,

105.简介下 Hibernate Session 与 SessionFactory。

Session接口负责执行
被持久化对象的CRUD操作
CRUD的任务是完成与数据库的交流,
包含了很多常见的SQL语句。
需要注意的是,
Session对象是非线程安全的,
同时,
Hibernate的Session
不同于JSP应用中的HttpSession。
这里当使用Session这个术语时,
其实指的是Hibernate中的Session,
而以后会将HttpSession对象
称为用户Session。 SessionFactory接口负责初始化Hibernate。
它充当数据存储源的代理,
并负责创建Session对象。
这里用到了工厂模式。
需要注意的是,
SessionFactory并不是轻量级的,
因为一般情况下,
一个项目通常只需要
一个SessionFactory就够,
当需要操作多个数据库时,
可以为每个数据库指定
一个SessionFactory。

撩课-Java每天5道面试题第14天的更多相关文章

  1. 撩课-Java每天5道面试题第13天

    撩课Java+系统架构点击开始学习 96.JDBC操作数据库的步骤 ? .加载数据库驱动 .创建并获取数据库链接 .创建jdbc statement对象 .设置sql语句 .设置sql语句中的参数(使 ...

  2. 撩课-Java每天5道面试题第15天

    撩课Java+系统架构点击开始学习 106.什么是Hibernate的并发机制?怎么去处理并发问题? a.Hibernate的Session对象是非线程安全的, 对于单个请求,单个会话, 单个的工作单 ...

  3. 撩课-Java每天5道面试题第10天

    撩课Java+系统架构 视频 点击开始学习 81.Servlet的会话机制? HTTP 是一种无状态协议, 这意味着每次客户端检索网页时, 都要单独打开一个服务器连接, 因此服务器不会记录下 先前客户 ...

  4. 撩课-Java每天5道面试题第9天

    撩课Java+系统架构 视频 点击开始学习 76.XML技术的作用? XML技术用于数据存储. 信息配置. 数据交换三方面. 可以将数据存储在XML中, 通过节点. 元素内容. 属性标示数据内容及关系 ...

  5. 撩课-Java每天5道面试题第8天

    撩课Java+系统架构 视频 点击开始学习 71.jsp有哪些内置对象?作用分别是什么? Page, pageContext, request, response, session, applicat ...

  6. 撩课-Java每天10道面试题第7天

    撩课Java+系统架构 视频 点击开始学习 61.什么是并发修改异常? 什么是并发修改异常: 当我们在遍历实现了collection接口 与iterator接口的集合时(List.Set.Map), ...

  7. 撩课-Java每天10道面试题第4天

    撩课Java+系统架构 视频 点击开始学习 31.静态变量和实例变量的区别? 静态变量也叫类变量, 这种变量前加了static修饰符. 可以直接用类名调用, 也可以用对象调用, 而且所有对象的同一个类 ...

  8. 撩课-Java每天5道面试题第17天

    116.说下Struts的设计模式 MVC模式: web应用程序启动时 就会加载并初始化ActionServler. 用户提交表单时, 一个配置好的ActionForm对象被创建, 并被填入表单相应的 ...

  9. 撩课-Java每天5道面试题第24天

    151.springMVC和struts2的区别有哪些? .springmvc的入口是一个servlet即前端控制器(DispatchServlet), 而struts2入口是一个filter过虑器( ...

随机推荐

  1. “全栈2019”Java第一百零七章:匿名内部类与构造方法注意事项

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  2. python学习笔记-练手实例

    1.题目:输出 9*9 乘法口诀表.     程序分析:分行与列考虑,共9行9列,i控制行,j控制列     代码: for i in range(1,10): print ('\r') for j ...

  3. [转载] cassandra Unable to complete request: one or more nodes were unavailable

    今天碰到的问题跟这个一模一样,特地转过来记录一下 https://support.datastax.com/hc/en-us/articles/204893189-CQL-query-results- ...

  4. 网站架构:PHP针对并发访问如何优化?

    1.拆表:大表拆小表(垂直拆,水平拆:分表,分区partition,分片sharding),可以在应用层实现,也可以在数据库层面实现一部分:提高系统性能. 2.分库:把表放到不同的数据库,这也是分布式 ...

  5. python数据类型详解(全面)

    python数据类型详解 目录1.字符串2.布尔类型3.整数4.浮点数5.数字6.列表7.元组8.字典9.日期 1.字符串1.1.如何在Python中使用字符串a.使用单引号(')用单引号括起来表示字 ...

  6. Laravel 的核心概念

    工欲善其事,必先利其器.在开发Xblog的过程中,稍微领悟了一点Laravel的思想.确实如此,这篇文章读完你可能并不能从无到有写出一个博客,但知道Laravel的核心概念之后,当你再次写起Larav ...

  7. leetcode-78-子集(用bfs解决)

    题目描述: 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums = [1,2,3] 输出: [ [3],   [1] ...

  8. leetcode-867-Transpose Matrix(矩阵由按行存储变成按列存储)

    题目描述: Given a matrix A, return the transpose of A. The transpose of a matrix is the matrix flipped o ...

  9. FlowPortal-BPM——管理员、功能的权限设置

    一.管理员设置 管理工具→安全组→安全组名称→管理授权→[添加管理人员]→[设置管理人员权限] 二.访问功能权限设置 (1)模块访问权限 (2)访问控制→[在需要的文件夹下]新建子资源→[资源名称]. ...

  10. Python基础部分的疑惑解析——运算符和数据类型(3)

    补充上一篇: #! /user/bin/env python   代码内声明这一个就可以用1.py类似的文件直接执行,但是要在linux内加权限, 不需要在前面加python 1.py执行了.文件可以 ...