数据库设计

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中怎样实现类之间的关系?(如:一对多、多对多的关系)

hibernate框架学习之主键生成策略generator

匿名 (未验证) 提交于 2019-12-03 00:43:02
1)手工控制 assigned(不限制类型) 2)数据库自动生成 uuid(字符串类型) increment(整型数值类型) identity (整型数值类型) sequence (整型数值类型) native(整型数值类型) assigned策略是由程序员手工控制输入数据模型OID的一种id生成策略 assigned策略不限定数据库中id字段的类型 assigned策略无法保障id的不重复性 assigned策略通常配合外部自定义的id生成策略使用,否则将具有很大的风险性 assigned策略对于集群式数据库id控制相对简单些,也可以理解为“为所欲为” 后期配合一些主键自增工具类(UuidService)完成 在UuidService基础上加入缓存机制有效提升其效率 ======= uuid策略是由以下4种数据联合计算得出的一种OID生成策略 IP地址 JVM启动时间(精确到250ms) 当前系统时间 JVM提供的计数器(保障唯一) uuid策略要求数据库中id字段为字符串类型 uuid策略可以保障id的唯一性,因此不具有风险性 ========= increment策略是由Hibernate内部控制生成OID的一种id生成策略 increment策略要求数据库中id字段为整型数值类型 increment策略首先从对应数据库表中取出当前已使用的最大id值max,然后在此基础上+1

数据库系统原理试题之数据库设计基本步骤

匿名 (未验证) 提交于 2019-12-03 00:37:01
按照规范设计的方法,考虑数据库及其应用系统开发全过程,将数据库设计分为以下6个阶段 1.需求分析 2.概念结构设计 3.逻辑结构设计 4.物理结构设计 5.数据库实施 6.数据库的运行和维护 1.需求分析阶段(常用自顶向下) 进行数据库设计首先必须准确了解和分析用户需求(包括数据与处理)。需求分析是整个设计过程的基础,也是最困难,最耗时的一步。需求分析是否做得充分和准确,决定了在其上构建数据库大厦的速度与质量。需求分析做的不好,会导致整个数据库设计返工重做。 2.概念结构设计阶段(常用自底向上) 自顶向下。即首先定义全局概念结构的框架,再逐步细化。 自底向上。即首先定义各局部应用的概念结构,然后再将他们集成起来,得到全局概念结构。 逐步扩张。首先定义最重要的核心概念结构,然后向外扩张,以滚雪球的方式逐步生成其他的概念结构,直至总体概念结构。 混合策略。即自顶向下和自底向上相结合。 3.逻辑结构设计阶段( E-Rͼ ) 4.物理设计阶段 首先要对运行的事务详细分析,获得选择物理数据库设计所需要的参数,其次,要充分了解所用的RDBMS的内部特征,特别是系统提供的存取方法和存储结构。 5.数据库实施阶段 6.数据库运行和维护阶段 文章来源: 数据库系统原理试题之数据库设计基本步骤

数据库设计――smallint(5) VS varchar(5)

匿名 (未验证) 提交于 2019-12-03 00:18:01
一个比较有意思的 case,写出来自嘲一下。背景很简单,同事调用我方创建账单接口,创建失败,查日志显示 Data truncation: Out of range value for column 'channel' at row 1 明显,对方传入的 channel字段超过了smallint的最大值。(业务上该值不会超过smallint最大值,对方误传告终)。于是笔者顺手百度了两个点 1、 smallint的最大值。答案从 -2^15 到 2^15 即(-32768到32767) 的整型数据 2、 D b字段中,5的具体含义,同理bigint(20)的20,varchar(255)中的255.这些db设计时经常出现的数字都是限长么?答案no。 正解: 1)对于 int类型而言 ,括号中的数字只是 补位数字 ,对该字段所表示的取值范围并没影响,这个补位的数字只有当你设置该字段为 zerofill 的时候才会体现差别; 测试验证:非 zerofill类型(建表语句,非zerofill时,插入数据查询结果显示如下:) 修改 id为zerofill类型后 可以看出在将bigint类型的id设置为bigint(20) zerofill后,id值自动左补齐20; 此时再insert id到bigint的max值, 9223372036854775807 也成功插入。说明 bigint(20

Hibernate&MyBatis different

匿名 (未验证) 提交于 2019-12-03 00:14:01
一、框架介绍 二、框架使用 三、总结 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Hibernate的优点: 1、hibernate是全自动,hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql。 2、功能强大,数据库无关性好,O/R映射能力强,需要写的代码很少,开发速度很快。 3、有更好的二级缓存机制,可以使用第三方缓存。 4、数据库移植性良好。 5、hibernate拥有完整的日志系统,hibernate日志系统非常健全,涉及广泛,包括sql记录、关系异常、优化警告、缓存提示、脏数据警告等 Hibernate的缺点: 1、学习门槛高,精通门槛更高,程序员如何设计O/R映射,在性能和对象模型之间如何取得平衡,以及怎样用好Hibernate方面需要的经验和能力都很强才行 2、hibernate的sql很多都是自动生成的,无法直接维护sql;虽然有hql查询,但功能还是不及sql强大,见到报表等变态需求时

以及Hibernate和Mybatis区别

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

数据库设计优化

匿名 (未验证) 提交于 2019-12-03 00:11:01
数据库的基本语法的使用,很多,我也没有去整理,所以在这里就不介绍那些基本的语法了。如果对这方面有问题,我在这里给大家分享一个方法:   SQL语句应该怎样去优化?在职业生涯中,有一次维护一个项目中的一个模块。之前做的那个同事离职了,交给我来维护。我记得好像是七八张表吧,各种join、order by、distinct、group by.......看得头大。这样的SQL语句应该怎么优化呢?额......这怎么优化啊?建议从表的设计方面考虑吧。后来我也是这样做的,重新设计表,将表的数量减少,将数据更新到那写新表中去。即使不刷数据,流程中做下控制,时间久了,老表中的数据也都会更新到新表中去。 数据库设计步骤:   1、需求分析:大概明白需要存储什么   2、概要设计阶段:E-R图,表-属性-关系表,解决多方的沟通问题   3、详细设计,细致到表甚至字段 关系型数据库:面向对象的封装+关系 面向对象的思想来建表:   一对一:人----身份证;垂直分别的时候;相同主键/外键   一对多:订单----商品表;省-----市;公司-----员工;主外键表示   多对多:用户----菜单;学生----课程;女神----备胎;关系表/中间/映射表 三大范式:   第一范式:每一列保持原子性,不可分割     原子性:不可分割。     人----工作电话/家庭电话/移动电话,必须要拆分开

mybatis总结

匿名 (未验证) 提交于 2019-12-03 00:09:02
1.JDBC是怎么访问数据库的? 答:JDBC编程有6步,分别是1.加载sql驱动,2.使用DriverManager获取数据库连接,3.使用Connecttion来创建一个Statement对象 Statement对象用来执行SQL语句,4.执行SQL语句,5.操作结果集,6.回收数据库资源 2.MyBatis是怎么访问数据库的? 答:1导入架包; 2创建实体类对象; 3 创建mybatis的配置文件mybatis-config.xml; 4创建上面的TuserMapper.xml(Sql映射文件); 5 创建test类进行测试; 3.MyBatis和JDBC访问数据库有什么区别? 答:MyBatis具有以下一些特点:简单易用、性能高效、保留SQL、开源框架。 2可以自定义SQL、存储过程和高级映射的持久层框架 3. 优化获取和释放;SQL统一管理,对数据库进行存取操作;生成动态SQL语句;能够对结果集进行映射 总结: 一: 当dataSource的类型是POOLED时,还额外有以下常用属性。 poolMaximumActiveConnections,连接池最大活动连接数,默认值10 poolMaximumIdleConnections,连接池最大闲置连接数 poolMaximumCheckoutTime,连接“离开”连接池的最大时间,默认20秒 二:

ssh_ssi

匿名 (未验证) 提交于 2019-12-02 23:42:01
2019独角兽企业重金招聘Python工程师标准>>> ssh是struts+hibernate+spring三种框架技术组合而成的 这是一种框架技术 ssi是Struts2+spring+ ibatis其中ibatis就是通常所说的数据映射器,是一种数据访问工具。这是另一种框架技术 hibernate和ibatis都是数据映射器,是一种数据访问工具。 他们之间的区别是: 1. iBATIS需要手写sql语句,也可以生成一部分,Hibernate则基本上可以自动生成,偶尔会写一些Hql。同样的需求,iBATIS的工作量比Hibernate要大很多。类似的,如果涉及到数据库字段的修改,Hibernate修改的地方很少,而iBATIS要把那些sql mapping的地方一一修改。 2.开发方面: 开发效率上,我觉得两者应该差不多。可维护性方面,我觉得 iBatis 更好一些。因为 iBatis 的 sql 都保存到单独的文件中。而 Hibernate 在有些情况下可能会在 java 代码中保sql/hql。相对Hibernate“O/R”而言,iBATIS 是一种“Sql Mapping”的ORM实现。 而iBATIS 的着力点,则在于POJO 与SQL之间的映射关系。也就是说,iBATIS并不会为程序员在运行期自动生成SQL 执行。具体的SQL 需要程序员编写,然后通过映射配置文件

面试官都会问的Mybatis面试题

匿名 (未验证) 提交于 2019-12-02 23:35:02
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