数据库设计

Sprng Data JPA与hibernate的关系

夙愿已清 提交于 2020-02-23 09:59:47
1.ORM 概述 ORM ( Object-Relational Mapping ) 表示对象关系映射。在面向对象的软件开发中,通过 ORM ,就可以把对象映射到关系型数据库中。只要有一套程序能够做到建立对象与数据库的关联,操作对象就可以直接操作数据库数据,就可以说这套程序实现了 ORM 对象关系映射 简单的说: ORM 就是建立实体类和数据库表之间的关系,从而达到操作实体类就相当于操作数据库表的目的。 1.1 为什么使用 ORM 当实现一个应用程序时(不使用 O/R Mapping ),我们可能会写特别多数据访问层的代码,从数据库保存数据、修改数据、删除数据,而这些代码都是重复的。而使用 ORM 则会大大减少重复性代码。对象关系映射( Object Relational Mapping ,简称 ORM ),主要实现程序对象到关系数据库数据的映射。 1.2 常见 ORM 框架 常见的 orm 框架: Mybatis ( ibatis )、 Hibernate 、 Jpa 2.hibernate 与 JPA 的概述 [ 了解 ] 2.1 hibernate 概述 Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,它将 POJO 与数据库表建立映射关系,是一个全自动的 orm 框架, hibernate 可以自动生成 SQL 语句

MyBatis和Hibernate相比较

若如初见. 提交于 2020-02-23 07:30:50
作者:乌拉拉 链接:http://www.zhihu.com/question/21104468/answer/58579295 1、开发对比开发速度 Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些。个人觉得要用好Mybatis还是首先要先理解好Hibernate。 开发社区 Hibernate 与Mybatis都是流行的持久层开发框架,但Hibernate开发社区相对多热闹些,支持的工具也多,更新也快,当前最高版本4.1.8。而Mybatis相对平静,工具较少,当前最高版本3.2。 开发工作量 Hibernate和MyBatis都有相应的代码生成工具。可以生成简单基本的DAO层方法。 针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。 2、系统调优对比Hibernate的调优方案 制定合理的缓存策略; 尽量使用延迟加载特性; 采用合理的Session管理机制; 使用批量抓取,设定合理的批处理参数(batch_size); 进行合理的O/R映射设计 Mybatis调优方案 MyBatis在Session方面和Hibernate的Session生命周期是一致的,同样需要合理的Session管理机制

mybatis和hibernate的特点

本秂侑毒 提交于 2020-02-23 07:28:59
第一方面:开发速度的对比 就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些。个人觉得要用好Mybatis还是首先要先理解好Hibernate。 比起两者的开发速度,不仅仅要考虑到两者的特性及性能,更要根据项目需求去考虑究竟哪一个更适合项目开发,比如:一个项目中用到的复杂查询基本没有,就是简单的增删改查,这样选择hibernate效率就很快了,因为基本的sql语句已经被封装好了,根本不需要你去写sql语句,这就节省了大量的时间,但是对于一个大型项目,复杂语句较多,这样再去选择hibernate就不是一个太好的选择,选择 mybatis 就会加快许多,而且语句的管理也比较方便。 第二方面:开发工作量的对比 Hibernate和MyBatis都有相应的代码生成工具。可以生成简单基本的DAO层方法。针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。 第三方面:sql优化方面 Hibernate的查询会将表中的所有字段查询出来,这一点会有性能消耗。Hibernate也可以自己写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。而Mybatis的SQL是手动编写的

数据库设计误区:备用字段 / 保留字段 / 预留字段

*爱你&永不变心* 提交于 2020-02-22 13:02:16
数据库设计误区:备用字段 / 保留字段 / 预留字段 【现象描述】 在数据表中,不仅设计了当前所需要的字段,而且还在其中留出几个字段作为备用。 比方说,我设计了一个人员表(Person),其中已经添加了各种必要的字段,包括姓名(Name)、性别(Sex)、出生年月日(birthday)等等。大功告成之后,我忽然想到,将来系统中应该还会有很多其它与人相关的内容吧,比方说毕业院校,比方说工作单位等等,尽管现在根本不需要填写,以后可能还是会用到的吧。拍脑袋一项,那就加入5个varchar2型的字段,分别叫做Text1、Text2……Text5,然后又想,应该还有一些日期型的字段需要备用,就又建立了三个date型的字段,分别起名叫做date1、date2、date3,…… 【原因分析】 大家应该已经看出问题了,在这个数据表中存在大量暂时无用的字段,我们可以称之为备用字段,它们的作用是什么呢?就是以防万一,防备可能的情况。 这似乎可以叫做防患于未然,等到需要的时候,就不需在表中增加新的字段了,而且这样做的话,一个表的数据应该会被存储在相邻的物理空间中,这对于性能也是有好处的。 另外的原因就是,在古老的数据库中,如果改变数据库的定义(包括增加字段、改变字段的类型、删除字段等等),那么其中所有的数据就会丢失,所以这项工作非常麻烦,我们需要先建立临时表,将数据备份出来,然后创建新表,将数据导入其中

主键生成策略

馋奶兔 提交于 2020-02-20 19:22:22
     1、自动增长identity 适用于MySQL、DB2、MS SQL Server,采用数据库生成的主键,用于为long、short、int类型生成唯一标识 使用SQL Server 和 MySQL 的自增字段,这个方法不能放到 Oracle 中,Oracle 不支持自增字段,要设定sequence(MySQL 和 SQL Server 中很常用) 数据库中的语法如下: MySQL:create table t_user(id int auto_increment primary key, name varchar(20)); SQL Server:create table t_user(id int identity(1,1) primary key, name varchar(20)); <id name="id" column="id" type="long"> <generator class="identity" /> </id> 2、sequence DB2、Oracle均支持的序列,用于为long、short或int生成唯一标识 数据库中的语法如下: Oracle:create sequence seq_name increment by 1 start with 1; 需要主键值时可以调用seq_name.nextval或者seq_name

Hibernate主键生成策略

六月ゝ 毕业季﹏ 提交于 2020-02-20 17:05:21
1、自动增长identity 适用于MySQL、DB2、MS SQL Server,采用数据库生成的主键,用于为long、short、int类型生成唯一标识 使用SQL Server 和 MySQL 的自增字段,这个方法不能放到 Oracle 中,Oracle 不支持自增字段,要设定sequence(MySQL 和 SQL Server 中很常用) 数据库中的语法如下: MySQL:create table t_user(id int auto_increment primary key, name varchar(20)); SQL Server:create table t_user(id int identity(1,1) primary key, name varchar(20)); <id name="id" column="id" type="long"> <generator class="identity" /> </id> 2、sequence DB2、Oracle均支持的序列,用于为long、short或int生成唯一标识 数据库中的语法如下: Oracle:create sequence seq_name increment by 1 start with 1; 需要主键值时可以调用seq_name.nextval或者seq_name.curval得到

阿里新零售数据库设计与实战完整资料

☆樱花仙子☆ 提交于 2020-02-18 01:50:51
阿里新零售数据库设计与实战 获取课程资料地址: 点击这里 课程以”阿里系新零售”的“苏宁云商”业务为蓝本,带你从零到一完成数据库设计,兼顾“基础与拔高”:基础涵盖CRUD、索引、事务;拔高囊括集群、Lucene全文检索与中文分词,助你掌握数据库的设计与实战能力。梳理核心痛点问题,给出企业级解决方案,项目面试也可以游刃有余。 第1章 新零售数据库序章【6.21优惠券过期啦,适用于618薅羊毛の压轴课】 618活动期间最后一门课啦,这里有个羊毛可以薅。本章首先介绍为什么学本课程,适合谁学习,课程内容纲要,课程所提供的服务等。重磅压轴课,千呼万唤使出来,让大家久等啦~ 1-1 【卷首语】没有梦想,何必远方?【选看】 1-2 【迈出第一步】开门见山 试看 第2章 前置准备【磨刀不误砍柴工】 本章首先介绍“新零售”概念,即线上+线下销售模式。有别于纯电商,所以业务上既要考虑线下又要考虑线上。接下来,需要配置好学习环境,安装VMware虚拟机,安装CentOS操作系统。掌握VMware虚拟机的常用管理:创建快照以及创建克隆镜像等等。 ... 2-1 新零售业务介绍 试看 2-2 前置知识与环境要求 2-3 搭建VM虚拟机,安装Linux系统 2-4 Linux基础知识 2-5 本章总结 第3章 前导知识【九层之台,起于累土】 本章带大家夯实基础,首先在CentOS系统上安装MySQL数据库

Oracle 查询的十个小技巧

 ̄綄美尐妖づ 提交于 2020-02-17 14:05:19
Oracle数据库查询十个小技巧 数据查询,是数据库操作中最主要的功能之一;有时候数据库查询性能的好坏,直接关系到数据库的运行效率,关系到数据库的选型。下面笔者不谈大道理,只是对其中对一些平时大家容易忽略的查询小技巧做一些总结。或许大家可能正在为此犯愁呢?   第一个技巧:利用连接符连接多个字段。   如在员工基本信息表中,有员工姓名、员工职位、出身日期等等。如果现在视图中这三个字段显示在同一个字段中,并且中间有分割符。如我现在想显示的结果为“经理Victor出身于1976年5月3日”。这该如何处理呢?其实,这是比较简单的,我们可以在Select查询语句中,利用连接符把这些字段连接起来。   如可以这么写查询语句:   SELECT员工职位 ||’ ’ ||员工姓名||’出身于’||出身日期 as 员工出身信息 FROM 员工基本信息表;   通过这条语句就可以实现如上的需求。也就是说,我们在平时查询中,可以利用||连接符把一些相关的字段连接起来。这在报表视图中非常的有用。如笔者以前在设计图书馆管理系统的时候,在书的基本信息处有图书的出版社、出版序列号等等内容。但是,有时会在打印报表的时候,需要把这些字段合并成一个字段打印。为此,就需要利用这个连接符把这些字段连接起来。而且,利用连接符还可以在字段中间加入一些说明性的文字,以方便大家阅读。如上面我在员工职位与员工姓名之间加入了空格

数据库性能优化

我是研究僧i 提交于 2020-02-16 07:26:30
数据库设计   实现sql server数据库的优化,首先要有一个好的数据库设计方案。在实际工作中,许多sql server方案往往是由于数据库设计得不好导致性能很差。实现良好的数据库设计必须考虑这些问题:   1. 逻辑数据库规范化问题    一般来说,逻辑数据库设计会满足规范化的前3级标准:    第1规范:没有重复的组或多值的列;    第2规范: 每个非关键字段必须依赖于主关键字,不能依赖于一个组合式主关键字的某些组成部分;    第3规范: 一个非关键字段不能依赖于另一个非关键字段。    遵守这些规则的数据库设计会产生较少的列和更多的表,因而也就减少了数据冗余,也减少了用于存储数据的页。   2. 生成物理数据库    要想正确选择基本物理实现策略,必须了解和利用好数据库访问格式和硬件资源的操作特点,特别是内存和磁盘子系统i/o。以下是一些常用技巧:    与每个表列相关的数据类型应该反映数据所需的最小存储空间,特别是对于被索引的列更是如此。比如能使用smallint类型就不要用integer类型,这样索引字段可以被更快地读取,而且可以在一个数据页上放置更多的数据行,因而也就减少了i/o操作。    把一个表放在某个物理设备上,再通过sql server的段把它的不分簇索引放在一个不同的物理设备上,这样能提高性能

数据库设计的三大范式

只愿长相守 提交于 2020-02-15 17:37:51
转载自: http://www.cnblogs.com/zhhh/archive/2011/04/21/2023355.html 。 三大范式一直没有记住,看了这个有了理解!挺好的记着,以后忘了,可以再看看! 为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。 在实际开发中最为常见的设计范式有三个: 1 .第一范式 第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。 第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算满足了数据库的第一范式,如下表所示。 用户信息表 编号 姓名 性别 年龄 联系电话 省份 城市 详细地址 1 张红欣 男 26 0378-23459876 河南 开封 朝阳区新华路23号 2 李四平 女 32 0751-65432584 广州 广东 白云区天明路148号 3 刘志国 男 21 0371