数据库设计

mybatis总结

牧云@^-^@ 提交于 2020-01-06 04:17:29
1.mybatis的工作原理 1:使用连接池,datasource,在驱动并连接的这个过程中优化并解耦 JDBC第一步其实从效率角度来看是不合适的,因为无论什么数据库都不可能支撑随机和庞大的连接数,而且不可避免的存在连接浪费的情况,Mybatis就封装了这些优化的方法。 2:统一sql存取到XML 如果代码写在java块中,在团队合作中很可能出现两个交叉业务的代码使用类似的sql语句,而开发人员的工作本身没有交集,那就代表sql语句肯定是无法复用的。而且对sql的修改,就代表着对java文件的修改,需要重新编译和打包部署(比如常见的状态值更改,sql修改随着业务变化必然存在修改)。 mybatis将sql统一存取到xml中,就算存在业务交叉,但因为统一配置的缘故,sql在xml中一目了然,两个跨team的程序员可以看到对方的sql,来判断自己是否需要重用。并且使用xml配置可以减少代码编译。 3:参数和结果集映射 sql的方式需要传入参数,如果存在多条件“或类型”的查询(列表查询的查询条件允许空),那就代表你必须传参进行sql拼接,就算使用xml的方式也不行。要么每个业务独立配置xml中的sql,要么还是写入java代码中,或者以工具的方式进行自动拼接。 Mybatis使用映射的方式,方便model管理参数,同时以解析器的方式将参数动态拼接到sql(sqlmaper里那些标签)

数据库设计准则(第一、第二、第三范式说明)

浪子不回头ぞ 提交于 2020-01-04 23:48:29
关于数据库的设计准则,平时我也就知道怎么去做。当有人问起我第三范式的时候,我还真不知道怎么去表述了。找到这篇解说,觉得概念和例子都讲得不错,收藏起来,以备后用。 I、关系数据库设计范式介绍 1.1 第一范式(1NF)无重复的列 所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。 说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。 1.2 第二范式(2NF)属性完全依赖于主键[消除部分子函数依赖] 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。例如员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是惟一的,因此每个员工可以被惟一区分。这个惟一属性列被称为主关键字或主键、主码。 第二范式(2NF

数据库设计三大范式

主宰稳场 提交于 2020-01-03 11:43:36
数据库设计三大范式 数据库设计的三大范式 为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就叫做范式。 范式就是符合某一种设计要求的总结,要想设计一个结构合理的关系型数据库,必须满足一定的范式。 在实际开发中最常见的设计范式有三个: 1、第一范式(确保每列保持原子性) 第一范式是最基本的范式。如果数据库表中的 所有字段值都是不可分解的原子值,就说明该数据库满足第一范式。 第一范式的合理遵循需要根据系统给的实际需求来确定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成为一个数据库表的字段就行,但是如果系统经常访问“地址”属性中的“城市”部分,那么一定要把“地址”这个属性重新拆分为省份、城市、详细地址等多个部分来进行存储,这样对地址中某一个部分操作的时候将非常方便,这样设计才算满足数据库的第一范式。如下图。 上图所示的用户信息遵循第一范式的要求,这样对用户使用城市进行分类的时候就非常方便,也提高了数据库的性能。 2、第二范式(确保表中的每列都和主键相关) 第二范式在第一范式的基础上更进一层,第二范式需要确保数据库表中每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。 比如要设计一个订单信息表

软件工程——团队作业3

主宰稳场 提交于 2020-01-03 01:24:57
团队的编码规范 HTML编码规范 1、代码风格 1.1缩进与换行 使用 4 个空格做为一个缩进层级,不允许使用 2 个空格 或 tab 字符。 建议:每行不得超过 120 个字符。过长的代码不容易阅读与维护。但是考虑到 HTML 的特殊性,不做硬性要求。 1.2 命名 1) class 必须单词全字母小写,单词间以 - 分隔。 2) class 必须代表相应模块或部件的内容或功能,不得以样式信息进行命名。 3) 元素 id 必须保证页面唯一。 4) 禁止为了 hook 脚本,创建无样式信息的 class。 5) 同一页面,应避免使用相同的 name 与 id。 建议: 1) id 建议单词全字母小写,单词间以 - 分隔。同项目必须保持风格一致。 2) id、class 命名,在避免冲突并描述清楚的前提下尽可能短。 1.3标签 1) 标签名必须使用小写字母。 2) 对于无需自闭合的标签,不允许自闭合。常见无需自闭合标签有input、br、img、hr等。 3) 对 HTML5 中规定允许省略的闭合标签,不允许省略闭合标签。 4) 标签使用必须符合标签嵌套规则。 5) 标签使用必须符合标签嵌套规则。 6) 常见的标签语:p - 段落、h1,h2,h3,h4,h5,h6 - 层级标题、strong,em - 强调等。 1.4属性 1)属性名必须使用小写字母。 2)属性值必须用双引号包围。

数据库设计那些事儿

两盒软妹~` 提交于 2020-01-02 16:24:35
逻辑设计 一行数据中的每个属性值都叫做分量 基于上面几个实体。画出他们的ER图: 一对一 一对多 多对多 逻辑设计中使用的一些规范: 数据库操作异常与数据冗余 第一范式: 第二范式: 说白了,就是 联合主键中的某一关键字,决定着非关键字的值 ,就不符合二范式 第三范式: BC范式: 物理设计: 选择哪种数据库? 大的事务性操作推荐Oracle,Oracle同时也是大型的关系型数据库 MySQL存储引擎: MyISAM:写很少 读很多,不支持事务 InnoDB,适用于事务,行级锁,没有表级锁,推荐使用 MySQL5.5以后默认的存储引擎 MySQL 表及字段的命名规则 来源: CSDN 作者: 留歌36 链接: https://blog.csdn.net/liuge36/article/details/103798873

hibernate映射-继承映射

半城伤御伤魂 提交于 2020-01-02 04:31:17
(学习记录,错误不足之处,请您耐心指正^_^) hibernate映射-继承映射 对于面向对象的程序设计语言而言,继承和多态是两个最基本的概念。Hibernate的继承映射可以理解成持久化类之间的继承关系。例如:人和学生之间的关系。学生继承人,可以认为学生是一个特殊的人,如果对人进行查询,学生的实例也将被得到。 Hibernate支持3种继承映射策略: ①使用 subclass进行映射: 将域模型中的每一个实体对象映射到一个独立的表中,也就是说不用在关系数据模型中考虑域模型中的继承关系和多态。 ②使用 joined-subclass进行映射: 对于继承关系中的子类使用同一个表,这就需要在数据库表中增加额外的区分子类类型的字段。 ③使用 union-subclass进行映射: 域模型中的每一个类映射到一个表,通过关系数据模型中的外键来描述表之间的继承关系。这也就相当于按照域模型的结构来建立数据库中的 表,并通过外键来建立表之间的继承关系。 二、详解: 1. subclass元素的继承映射: 采用subclass的继承映射可以实现对于继承关系中的父类和子类使用同一张表,因为父类和子类的实例全部保存在同一个表中,因此需要在该表内增加一列,使用该列来区分每行记录到底是哪个类的实例---这个列被称为辨别者列(discriminator) 在这种映射策略下,使用 subclass 来映射子类

2019年mybatils面试高频题(java)

浪尽此生 提交于 2019-12-31 12:33:04
前言 2019即将过去,伴随我们即将迎来的又是新的一年,过完春节,马上又要迎来新的金三银四面试季。 那么,作为程序猿的你,是否真的有所准备的呢,亦或是安于本职工作,继续做好手头上的事情。 当然,不论选择如何,假如你真的准备在之后的金三银四跳槽的话,那么作为一个Java工程师,就不可不看了。 如何在几个月的时间里,快速的为即将到来的面试进行充分的准备呢? 一、什么是MyBatis? 答:MyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架。 二、讲下MyBatis的缓存 答:MyBatis的缓存分为一级缓存和二级缓存,一级缓存放在session里面,默认就有二级缓存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置 三、Mybatis是如何进行分页的?分页插件的原理是什么? 答: 1、Mybatis使用RowBounds对象进行分页,也可以直接编写sql实现分页,也可以使用Mybatis的分页插件。 2、分页插件的原理:实现Mybatis提供的接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql。 举例:select * from student,拦截sql后重写为:select t.* from (select * from student)t

hibernate中dialect的讲解

*爱你&永不变心* 提交于 2019-12-31 07:45:40
RDBMS方言 DB2 org.hibernate.dialect.DB2Dialect DB2 AS/400 org.hibernate.dialect.DB2400Dialect DB2 OS390 org.hibernate.dialect.DB2390Dialect PostgreSQL org.hibernate.dialect.PostgreSQLDialect MySQL org.hibernate.dialect.MySQLDialect MySQL with InnoDB org.hibernate.dialect.MySQLInnoDBDialect MySQL with MyISAM org.hibernate.dialect.MySQLMyISAMDialect Oracle (any version) org.hibernate.dialect.OracleDialect Oracle 9i/10g org.hibernate.dialect.Oracle9Dialect Sybase org.hibernate.dialect.SybaseDialect Sybase Anywhere org.hibernate.dialect.SybaseAnywhereDialect Microsoft SQL Server org.hibernate

Spring Boot 学习(11)整合MyBatis-Plus

可紊 提交于 2019-12-30 23:04:24
写在前面 :最近利用晚上的时间在网上看视频学习Spring Boot,这博客是对学习的一点点总结及记录, 技术是开源的、知识是共享的 。 如果你对Spring Boot 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让家人过上更好的生活 。 文章目录 一、Mybatis-Plus 介绍 1. 什么是 Mybatis-Plus 2. 特性 二、设计建表结构 三、搭建工程 1. 使用 Spring Initializer 初始化一个 Spring Boot 工程 2. 在 application.properties配置文件中添加 数据库的相关配置 3. 配置 MapperScan 注解 四、Mybatis-Plus入门 1. 编写实体类 2. 编写Mapper类 3. 添加测试类,进行功能测试 五、分页 1. 创建配置类 2. 测试分页功能 六、自动填充功能 1. 数据库表中添加自动填充字段 2. 实体上添加注解 3. 实现元对象处理器接口 七、逻辑删除 1.数据库中添加 deleted字段 2. 实体类添加deleted 字段 3. 元对象处理器接口添加deleted的insert默认值 4. application.properties 加入配置 5. 在 MybatisPlusConfig 中注册 Bean 八、乐观锁 1. 数据库中添加version字段 2.

博客系统的数据库设计

本秂侑毒 提交于 2019-12-30 03:52:40
----------- -- user 用户表 ----------- CREATE TABLE user ( user_id mediumint ( 8 ) NOT NULL AUTO_INCREMENT COMMENT '用户ID' , group_id mediumint ( 8 ) NOT NULL COMMENT '用户组ID' , user_name varchar ( 32 ) NOT NULL COMMENT '用户名' , user_pwd varchar ( 32 ) NOT NULL COMMENT '用户密码' , user_phone int ( 12 ) NOT NULL COMMENT '用户手机号码' , user_sex varchar ( 6 ) NOT NULL COMMENT '用户性别' , user_qq mediumint ( 9 ) NOT NULL COMMENT '用户QQ号码' , user_email varchar ( 64 ) NOT NULL COMMENT '用户EMAIL地址' , user_address varchar ( 255 ) NOT NULL COMMENT '用户地址' , user_mark mediumint ( 9 ) NOT NULL COMMENT '用户积分' , user_rank_id