对象关系映射

java面试小结——框架(hibernate、MyBatis、spring、Spring MVC)

ε祈祈猫儿з 提交于 2019-12-03 08:16:06
Hibernate 什么是ORM 对象关系映射(Object-Relational Mapping,简称ORM)是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术;简单的说,ORM是通过使用描述对象和数据库之间映射的元数据(在Java中可以用XML或者是注解),将程序中的对象自动持久化到关系数据库中或者将关系数据库表中的行转换成Java对象,其本质上就是将数据从一种形式转换到另外一种形式。 持久层设计要考虑的问题有哪些?你用过的持久层框架有哪些? 所谓”持久”就是将数据保存到可掉电式存储设备中以便今后使用,简单的说,就是将内存中的数据保存到关系型数据库、文件系统、消息队列等提供持久化支持的设备中。持久层就是系统中专注于实现数据持久化的相对独立的层面。 持久层设计的目标包括: - 数据存储逻辑的分离,提供抽象化的数据访问接口。 - 数据访问底层实现的分离,可以在不修改代码的情况下切换底层实现。 - 资源管理和调度的分离,在数据访问层实现统一的资源调度(如缓存机制)。 - 数据抽象,提供更面向对象的数据操作。 持久层框架有: - Hibernate - MyBatis - TopLink - Guzz - jOOQ - Spring Data - ActiveJDBC Hibernate中SessionFactory是线程安全的吗?Session是线程安全的吗

Sping MVC不使用任何注解处理(jQuery)Ajax请求(基于XML配置)

假装没事ソ 提交于 2019-12-03 08:15:50
1. Spring Spring框架是一个轻量级的解决方案,是一个潜在的一站式商店,用于构建企业就绪的应用程序。 Spring框架是一个Java平台,为开发Java应用程序提供全面的基础架构支持。Spring处理基础结构,因此您可以专注于应用程序。Spring使您能够从“普通的Java对象”(POJO)构建应用程序,并将企业服务非侵入性地应用于POJO。此功能适用于Java SE编程模型以及全部和部分Java EE 。但是,Spring是模块化的,允许您仅使用所需的那些部分,而不必引入其余部分。您可以将IoC容器与顶部的任何Web框架一起使用,但也可以仅使用 Hibernate集成代码或JDBC抽象层。Spring框架支持声明式事务管理,通过RMI或Web服务对逻辑的远程访问以及用于持久化数据的各种选项。它提供了功能全面的MVC框架,并使您能够将AOP透明地集成到软件中。 Spring被设计为非侵入式的,这意味着您的域逻辑代码通常不依赖于框架本身。在您的集成层(例如数据访问层)中,将存在对数据访问技术和Spring库的某些依赖关系。但是,将这些依赖项与其余代码库隔离起来应该很容易。Spring的两大核心特征:IoC(控制反转),AOP(面向切面编程)。IoC作用:把对象的控制权交给容器管理。AOP作用:面向切面编程(比如日志打印),底层使用动态代理实现。

从JDBC到hibernate再到mybatis之路

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-03 08:14:39
一、传统的JDBC编程   在java开发中,以前都是通过JDBC(Java Data Base Connectivity)与数据库打交道的,至少在ORM(Object Relational Mapping)框架没出现之前是这样,目前常用的ORM框架有JPA、hibernate、mybatis、spring jdbc等,我一开始也是使用JDBC编程,后面开始使用hibernate,有一次开发一个CRM管理系统使用的是Spring JDBC操作数据库,但个人还是不太喜欢这个框架,本人目前使用的最多还是通过mybatis操作数据库,尽管我现在使用的是Spring boot开发,继承了JPA来操作数据库,但是实体类和dao、service、controller层的基本CRUD操作还是通过hibernate代码工具自动生成的,其他操作都是通过mybatis自己编写SQL语句来操作的,因此本文只提JDBC到hibernate再到mybatis的一个过程。 1、什么是JDBC   JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,是用Java语言编写的类和接口组成的,可以为多种关系型数据库提供统一访问的接口。JDBC提供了一种基准,说白了,也就是sun公司为各大数据库厂商的关系型数据库连接java所制定的规范

Mybatis面试题一

半腔热情 提交于 2019-12-03 07:26:41
1、什么是Mybatis? (1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高。 (2)MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 (3)通过xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过java对象和 statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。(从执行sql到返回result的过程)。 2、Mybaits的优点: (1)基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用。 (2)与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接; (3)很好的与各种数据库兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持)。 (4

IBatis和Hibernate区别

荒凉一梦 提交于 2019-12-03 05:27:57
1. 简介 Hibernate是当前最流行的O/R mapping框架。它出身于sf.net,现在已经成为Jboss的一部分了。iBATIS是另外一种优秀的O/R mapping框架,现已改名叫myBATIS。目前属于apache的一个子项目了。相对Hibernate"O/R"而言,iBATIS 是一种"Sql Mapping"的ORM实现。 Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO和数据库表之间的映射,以及SQL的自动生成和执行。程序员往往只需定义好了POJO到数据库表的映射关系,即可通过 Hibernate提供的方法完成持久层操作。 程序员甚至不需要对SQL的熟练掌握,Hibernate/OJB会根据制定的存储逻辑,自动生成对应的 SQL并调用JDBC接口加以执行。 而iBATIS的着力点,则在于POJO与SQL之间的映射关系。也就是说,iBATIS并不会为程序员在运行期自动生成SQL执行。 具体的SQL需要程 序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。 使用iBATIS提供的ORM机制,对业务逻辑实现人员而 言,面对的是纯粹的Java对象,这一层与通过Hibernate 实现ORM而言基本一致,而对于具体的数据操作,Hibernate会自动生成SQL语句

MyBatis入门

半腔热情 提交于 2019-12-03 05:26:15
title: MyBatis入门 date: 2018-07-12 15:22:24 tags: [Java,MyBatis] categories: 框架 1. MyBatis 简介 MyBatis是一个优秀的 持久层框架 ,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。 Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回 2. MyBatis架构 MyBatis配置 SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息、 mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载 SqlSessionFactory 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂 SqlSession

SSH框架面试题(转)

我们两清 提交于 2019-12-03 04:50:38
Hibernate工作原理及为什么要用? 原理: 1. 读取并解析配置文件 2. 读取并解析映射信息,创建SessionFactory 3. 打开Sesssion 4. 创建事务Transation 5. 持久化操作 6. 提交事务 7. 关闭Session 8. 关闭SesstionFactory 为什么要用: * 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 * Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 * hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 * hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。 Hibernate是如何延迟加载? * Hibernate2延迟加载实现:a)实体对象 b)集合(Collection) * Hibernate3 提供了属性的延迟加载功能 当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。 Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)

MyBatis学习总结(五)——实现关联表查询

匆匆过客 提交于 2019-12-03 03:57:55
一、一对一关联 1.1、提出需求   根据班级id查询班级信息(带老师的信息) 1.2、创建表和数据   创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系。 CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name VARCHAR(20) ); CREATE TABLE class( c_id INT PRIMARY KEY AUTO_INCREMENT, c_name VARCHAR(20), teacher_id INT ); ALTER TABLE class ADD CONSTRAINT fk_teacher_id FOREIGN KEY (teacher_id) REFERENCES teacher(t_id); INSERT INTO teacher(t_name) VALUES('teacher1'); INSERT INTO teacher(t_name) VALUES('teacher2'); INSERT INTO class(c_name, teacher_id) VALUES('class_a', 1); INSERT INTO class(c_name, teacher_id) VALUES('class_b', 2);

MyBatis学习总结(五)——实现关联表查询

允我心安 提交于 2019-12-03 03:57:44
一、一对一关联 1.1、提出需求   根据班级id查询班级信息(带老师的信息) 1.2、创建表和数据   创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系。 CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name VARCHAR(20) ); CREATE TABLE class( c_id INT PRIMARY KEY AUTO_INCREMENT, c_name VARCHAR(20), teacher_id INT ); ALTER TABLE class ADD CONSTRAINT fk_teacher_id FOREIGN KEY (teacher_id) REFERENCES teacher(t_id); INSERT INTO teacher(t_name) VALUES('teacher1'); INSERT INTO teacher(t_name) VALUES('teacher2'); INSERT INTO class(c_name, teacher_id) VALUES('class_a', 1); INSERT INTO class(c_name, teacher_id) VALUES('class_b', 2);

在ASP.NET Core中使用AutoMapper

你。 提交于 2019-12-03 02:39:19
普通的模型映射 现在有两个类,实体类Student和返回展示的 View类StudentView 两个实体类字段还基本可以,不是很多,假如字段非常非常多,还需要手动去赋值的话,简直太痛苦了。 想了想这才是一个方法,一般的系统都会少则几十,多则上百个这样的方法,这还不算,大家肯定遇到过一个情况,如果有一天要在页面多显示一个字段,噗!不是吧,首先要存在数据库,然后在该实体类就应该多一个,然后再在每一个赋值的地方增加一个,而且也没有更好的办法不是,一不小心就少了一个,然后被产品测试说咱们不细心,心塞哟,别慌!神器来了,一招搞定。 先来引入DTO讲解 我们已经知道了ORM(Object Relational Mapping)映射,是一种对象关系的映射,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。 而Automapper是一种实体转换关系的模型,AutoMapper是一个.NET的对象映射工具。主要作用是进行领域对象与模型(DTO)之间的转换、数据库查询结果映射至实体对象。 引入AutoMapper的包 在Services层中引用Nuget包,AutoMapper 和 AutoMapper.Extensions.Microsoft.DependencyInjection AutoMapper.Extensions.Microsoft