数据持久层

所谓的持久层框架?ORM框架?以及Hibernate和Mybatis区别?

久未见 提交于 2020-01-14 08:47:22
ORM框架? Object Relational Mapping,对象-关系映射。 项目中的业务实体有两种表现形式:对象和关系数据,即在内存中表现为对象,在数据库中表现为关系数据。 为什么需要ORM框架? ORM框架是对象关系映射,那为什么要映射mapping? 因为对象之间可以存在关联和继承关系,但是在数据库中,关系数据无法表达多对多关联和继承关系。(ps:在数据库原理中,会把逻辑上的多对多转换为多个一对关系才能实现)因此,对象和关系(业务实体的两种表现形式)想要映射正确,项目系统一般以中间件的形式,即持久层框架。 Hibernate? Hibernate是一个开源的对象关系映射框架。 它对jdbc进行了非常轻量级的对象封装,将pojo(普通的Java对象)与数据库表建立映射关系,是一个全自动的ORM框架,甚至自动生成SQL语句,自动执行。 因此,程序员可以随心所有地使用对象编程思维来操纵数据库。 Hibernate特点: Hibernate通过修改一个“持久化”对象的属性,从而修改数据库表中对应的记录数据 提供线程和进程两个级别的缓存提升应用程序性能 有丰富的映射方式将 Java对象之间的关系(POJO) 转换为 数据库表之间的关系 屏蔽不同数据库实现之间的差异。在Hibernate中只需通过“方言”的形式指定当前使用的数据库,就可以根据底层数据库的实际情况生成适合的SQL语句

PHP ORM-持久层框架解决方案

懵懂的女人 提交于 2020-01-13 09:38:39
重点推荐: http://www.phpactiverecord.com/ ---- php.activerecord 1、Propel Propel是一个适用于PHP5的OR映射(Object Relational Mapping)框架,它基于Apache Torque提供对象持久层支持。它通过XML格式的模式定义文件和相应的配置文件来生成SQL和类,它允许你使用对象代替SQL来读写数据库表中的记录。Propel提供一个生成器来为你的数据模型创建SQL定义文件和PHP类。开发者也可以十分简单的定制生成的类,我们还可以通过XML, PHP类和Phing构建工具把Propel集成到已有的应用开发框架中去.例如PHP框架symfony的1.2以前的版本就是默认使用了精简版的Propel作为默认ORM框架。 官方网站: http://www.propelorm.org/ 2、Doctrine Doctrine是一个PHP的ORM框架,它必须运行在>=php5.2.3版本上,它是一个功能强大的数据抽象层.它的一个主要特征就是使用面向对象的方式来实现数据库查询的封转,它底层通过一个类似 Hibernate HQL的DQL的查询语句进行数据库查询, 这使得开发的灵活性更强,大大减小了重复代码。相比Propel,Doctrine的优点在于它支持支持全文检索

三、持久层框架(Hibernate)

限于喜欢 提交于 2020-01-11 05:40:33
一、Hibernate处理关系 关系主要有三种:1、多对一  2、一对多  3、多对多 1、多对一 一个Product对应一个Category,一个Category对应多个Product(一个产品对应一个类别,一个类别对应多个产品) 也就是Product和Category是多对一的关系。(多个产品对应一个类别) 1.1在数据test下创建表category_table,两个字段,id(自增),字符串格式name 其实也不用建表,因为Hibernate会自动建表。 use test; CREATE TABLE category_ table( id int(11) NOT NULL AUTO_INCREMENT, name varchar(30) , PRIMARY KEY (id) ) DEFAULT CHARSET=UTF8; View Code 1.2、准备类别实体类(Category.java) package com.demo.pojo public class Category{ private int id;//类别id private String name;//类别名称 //属性的getter/setter方法 public int getId(){ return id; } public void setId(int id){ this.id=id; }

持久层框架:MyBatis 3.2(1)

删除回忆录丶 提交于 2019-12-17 04:19:48
MyBatis 的前身就是 iBatis 。是一个数据持久层(ORM)框架。 iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO),同时还提供一个利用这个框架开发的 JPetStore 实例。 看到Mybatis的框架图,可以清晰的看到Mybatis的整体核心对象,我更喜欢用自己的图来表达Mybatis的整个的执行流程。如下图所示: 原理详解: MyBatis应用程序根据XML配置文件创建SqlSessionFactory,SqlSessionFactory在根据配置,配置来源于两个地方,一处是配置文件,一处是Java代码的注解,获取一个SqlSession。SqlSession包含了执行sql所需要的所有方法,可以通过SqlSession实例直接运行映射的sql语句,完成对数据的增删改查和事务提交等,用完之后关闭SqlSession。 MyBatis的优缺点 优点: 1、简单易学 mybatis本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。 2、灵活 mybatis不会对应用程序或者 数据库 的现有设计强加任何影响。

Objective-C中Sqlite3持久层框架

旧城冷巷雨未停 提交于 2019-12-10 13:21:59
Objective-c 中 Sqlite3 持久层 框架 是本文要介绍的内容,Cocoa与Cocoa Touch(主要是指 iphone ,ipad,ipod等等)都对 sqlite3 提供了良好的支持,但 objective-c 语言中的 sqlite3 持久层 框架 确没有java中那样丰富与强大、灵活,直到我发现sqlitepersistentobjects这个 框架 。 这个框架利用反射机制与value objects的完美结合,对sqlite3进行了非常轻量级的对象封装(这点有点像我2007年时写的一个java持久层框架,过些时候我整理一下,开源出来),使用者在编程过程中,基本不用再写sql语句,也不需要再手工生成sqlite3数据库文件。你所关心的,就是值对象继承一个核心类,然后添加值对像的属性,实际他就是一款Objective-C实现的ActiveRecord–Rails社区红透半边天的ORM模式。 一、sqlite persistent objects的下载与安装 sqlitepersistentobjects是google code上的一个开源项目,大家可以出下载它,本项目地址是:http://code.google.com/p/sqlitepersistentobjects/ 下载后,得到的源码包src内的源文件,copy到自己的项目中,建议最好新建一个分类

mybatis学习日记3

雨燕双飞 提交于 2019-12-07 12:10:27
1.mybatis的延迟加载 问题:在一对多中,当我们有一个用户,他有100个账户 在查询用户的时候,要不要把关联的账户查出来? 在查询账户的时候,要不要把关联的用户查出来? 解决:在查询用户的时候,用户下的账户信息应该是,什么时候使用,什么时候查询出来,如果每次查询用户的时候都把关联的账户信息查询出来,会浪费内存空间 但是在查询账户时,账所属的用户信息应该是随着账户查询时一起查询出来 1.1.什么是延迟加载: 延迟加载:在真正使用数据时才发起查询,不用的时候不查询,所以是按需加载(懒加载)。 1.2.延迟加载的优缺点 延迟加载的好处:先从单表查询,需要时再从关联表去关联查询,大大提高数 据库性能,因为查询单表要比关联查询多张表速度要快。 延迟加载的坏处:因为只有当需要用到数据时,才会进行数据库查询,这样在大批量数据查询时,因为查询工作也要消耗 时间,所以可能造成用户等待时间变长,造成用户体验下降。 2.多对一、一对一延迟加载的实现 使用assocation实现延迟加载 需求:查询账户信息同时查询用户信息 2.1 账户的持久层 DAO 接口 public interface IAccountDao { /** *查询所有账户,同时获取账户的所属用户名称以及它的地址信息 * @return */ List<Account> findAll(); } 2.2. 账户的持久层映射文件 <

Java面试之持久层(10)

我的未来我决定 提交于 2019-12-05 10:04:38
91,什么是ORM? 对象关系映射(Object-Relational Mapping,简称ORM)是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术; 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据(在Java中可以用XML或者是注解),将程序中的对象自动持久化到关系数据库中或者将关系数据库表中的行转换成Java对象,其本质上就是将数据从一种形式转换到另外一种形式。 92,Hibernate中SessionFactory是线程安全的吗?Session是线程安全的吗(两个线程能够共享同一个Session吗)? SessionFactory对应Hibernate的一个数据存储的概念,它是线程安全的,可以被多个线程并发访问。SessionFactory一般只会在启动的时候构建。对于应用程序,最好将SessionFactory通过单例模式进行封装以便于访问。 Session是一个轻量级非线程安全的对象(线程间不能共享session),它表示与数据库进行交互的一个工作单元。Session是由SessionFactory创建的,在任务完成之后它会被关闭。Session是持久层服务对外提供的主要接口。 Session会延迟获取数据库连接(也就是在需要的时候才会获取)。为了避免创建太多的session

JPA教程

▼魔方 西西 提交于 2019-12-02 19:16:16
1,基础 domain: 数据库建模 repository: 基础数据库操作接口 service: 设计复杂数据库操作实现/复杂业务实现 service.dto:数据库业务数据传输对象 web.rest: ui交互接口 web.vm: ViewModel前台显示数据模型 引自: https://www.ibm.com/developerworks/cn/opensource/os-cn-spring-jpa/index.html http://blog.csdn.net/linzhiqiang0316/article/details/53022683 http://blog.csdn.net/id_kong/article/details/70225032#criteriabuilder- 安全查询创建工厂 http://blog.csdn.net/dracotianlong/article/details/28445725 使用 Spring Data JPA 简化 JPA 开发 从一个简单的 JPA 示例开始 本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示例;接着重构该示例,并引入 Spring 框架,这两部分不会涉及过多的篇幅,如果希望能够深入学习

JAVA持久层框架的概述(ibatis>>mybatis)

纵然是瞬间 提交于 2019-12-01 07:00:46
现在主流的ORM映射框架有Hibernate、Apache OJB;这些基于Java的持久层框架都提供了全自动的对象–关系映射机制,能很好的实现从对象到关系数据的持久化操作。几乎不需要写任何的SQL语句(根据配置好的映射关系文件自动生成对应的 SQL 并调用 JDBC 接口加以执行),以面向对象的形式就能实现对数据库的操作。给我们的编程带来了很大的好处,不需要再接触底层的SQL语句,同时也避免了在书写SQL语句时带来的诸多问题。 但这些ORM框架也是有它的问题的,那就是对于复杂的SQL查询、多表的联合查询实现起来很麻烦,甚至某些业务方面用Hibernate无法实现。举个例子:假如有2张几乎相同的表(在实际的项目中这样的情况是存在的),现在需要把这2张表的数据全部查询出来在页面显示,使用Hibernate可能会这样操作,首先各执行一次findAll,然后在Service中循环,再存到一个List中,最后在页面显示。这样是能实现,但是很麻烦,那么简单的方法是什么呢?使用SQL语句中的union all 关键字,一个SQL语句就能实现,所以在这种情况下使用Hibernate就不是很合适了。面对这样的需求,再次举起 Hibernate 大刀,却发现刀锋不再锐利,甚至无法使用,奈何?恍惚之际,只好再摸出JDBC 准备拼死一搏,但JDBC也很麻烦,对于返回的ResultSet也需要处理

JAVA后端常用框架SSM,Mybatis,Dubbo,RabbitMQ,Redis,Docker

南笙酒味 提交于 2019-11-29 11:52:07
01 前言 Java框架一直以来都是面试必备的知识点,而掌握Java框架,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能对当前正在开发中的系统有整体的认知,从而更好的熟悉和学习技术,这篇文章胖达就打算给大家介绍几款现阶段流行的框架组合,不管是在传统企业开发还是在互联网开发领域,这几种框架应该都是比较常用的。 02 三层架构 说到框架首先需要明确的是,在Web开发领域一般会将架构分为三个部分:表示层、持久层、业务层,之所以将整体架构分为三个层面,主要目的是让整个系统更具有条理性,通过分配任务的方式进行系统的解耦,让每一层只关心自己内部的事情,只知道下层的存在,不知道上层的存在。达到局部改变而不影响全局的目的,就比如餐馆中有服务员、厨师、收银员一样,各司其职,让系统有条不紊的运行下去。三层架构如下图所示(图中的数据访问层就是文中的持久层): 下面就简单介绍一下三层架构: 1.表示层 表示层其实就是用户能够看到的界面显示层,但是它的职责并不仅仅是显示界面那么简单,而是需要完成三件事情: 从界面中取得数据跟后台服务器交互 跟后台交互后进行数据绑定 将绑定的数据呈现在页面中 一般来说,这一层的设计会采用MVC的模式,M称为模型也就是实体类,用于数据的封装和数据的传输;V也就是页面组件,用于数据的展示;C为控制也就是流程事件,用于流程的控制。 2.业务层