Mybatis一些原理

mybatis是以一个sqlsessionFactory的实例为中心,sqlsessionfactory可以通过sqlsessionfactoryBuilder获得,主要是Mybatis可以使用自己的Resource工具类来从xml文件获得,然后使用那个builder生成factory

从sqlsessionfactory获取sqlsession的实例,这个sqlsession完全包含了面向数据库执行sql命令所需的所有方法,开始会话,结束会话,中间是操作,sqlsession可以通过映射器类找到对应映射sql语句,最后调用这个sql,一般映射的sql语句都是配置到xml文件中,或者简单的sql语句也可以使用注解,这样比xml文件要简单的多,但是大量复杂的sql语句还是放到xml文件中比较靠谱。

还有一个类型转换,Java类型到数据库类型之间的转换,有自己内部的类型转换处理器,也可以自定义类型处理器,在配置文件中指定处理器就行。一般都是使用的内部的处理器,根据数据库类型转换成Java类型,比较特殊的可以使用自定义处理器。

数据库连接池

这个是为了避免创建新的实例时所必需的初始化和认证时间,这样再有请求过来就会被阻塞,所以就存在了数据库连接池,这是一种使得并发Web请求能够快速响应的流行处理方式。

配置文件主要是这些,mybatis+spring的话基本上不会使用这个配置文件,配置都在spring里面了,比如数据库连接池,映射文件配置,事务处理,这些完全都是在spring里面

数据库范式

抽象定义:符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度。

粗略理解为一张数据表结构所符合的某种设计标准的级别。

设计的规范级别,就像装修买建材,最环保的是E0,然后依次类推,数据库设计也分为几个级别:
1NF 2NF 3NF BCNF 4NF 5NF
一般我们设计关系型数据库的时候,最多考虑到BCNF就够了,符合高级别的范式设计必定符合低级别的关系范式。

第一范式(1NF)
每个属性都不可再分,就是数据表中的属性不能有子属性。下图所示的就不满足这个范式。第一范式是关系型数据库必须满足的最基本要求,关系型数据库必须满足这个设计标准,属性不可分,数据表中的属性不能有子属性,表头不能有子属性。

第二范式(2NF)
仅仅符合1NF的设计,仍然会存在数据冗余过大,插入异常,删除异常,修改异常等问题,

这里有四个概念,函数依赖、码、非主属性、与部分函数依赖。

  • 函数依赖
    若在一张表中,在属性X确定的情况下,必定能确定属性Y的值,那么久可以说Y函数依赖于X,写作X->Y。也就是说在数据表中,不存在任意两条记录,它们在X属性上的值相同,而在Y属性上的值不相同,一一对应的函数关系,比如上表中,学号和姓名就是函数依赖关系,姓名依赖于学号,但是学号不依赖于姓名,因为存在同名的情况。
  • 完全函数依赖
    X -> Y,但是X的任意一个真子集,它的补集和Y不是函数依赖关系。

还有两个部分函数依赖和传递函数依赖没啥,部分函数依赖就是是函数依赖不是完全函数依赖,传递函数依赖就是传递依赖。


  • 设K为某表中的一个属性或属性组,若除K之外的所有属性都完全依赖于K,那么我们称K为候选码,简称为码,K确定的情况下,该表除K之外的所有属性的值也随之确定,那么K就是码。

  • 非主属性
    包含在任何一个码中的属性为主属性,其它就是非主属性

最后第二范式怎么判断呢,就是看数据表中是否存在非主属性对于码的部分函数依赖,若存在,则数据表最高只符合1NF。

第二范式消除非主属性对于码的部分依赖。要有主键,其它字段依赖于主键,主键保证数据表中每个记录的唯一性,能够准确定位到该条数据,通过主键定位到该条记录,然后其它字段依赖于主键,也就是主键确定,其它字段也是唯一确定的。

  • 第三范式(3NF)
    为了消除非主属性对于码的依赖函数传递,就是为了消除冗余,信息放在一张表中,不在其他表中重复出现,表之间可以通过外键进行联系。

  • BCNF范式
    在满足第二第三范式的情况下,主属性内部也不能部分或传递依赖。判断方法:箭头左边的必须是候选码,不是候选码的就不是BC范式。

  • 第四范式(4NF)
    没有多值依赖

文章目录
,