数据库及Mybatis学习

1.数据库范式(规则):

函数依赖:x唯一确定y 则 y 函数依赖于 x

完全函数依赖:x中不能再有子集 能够唯一确定 y  ;如果 x 中有子集能够唯一确定 y,则 y 部分函数依赖于 x

一.第一范式:确保每列都不可拆分,即保持原子性

二.第二范式:确保表中的每列都和主键相关,而不能只与主键的某一部分相关(联合主键)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

例子:订单与商品信息,两个实体表,一个关系表;详细参考链接文档

三.第三范式:确保每列都和主键列直接相关,而不是间接相关

四.BCNF:在关系模式中每一个决定因素都包含候选键,也就是说,只要属性A或属性组A能够决定任何一个属性B,那么A的子集中必须有候选键。

3NF和BCNF是在函数依赖的条件下对模式分解所能达到的最大程度。一个模式中的关系模式如果都属于BCNF,那么在函数依赖范围内,它已经实现了彻底的分离,已消除了插入和删除的异常。3NF的“不彻底”性表现在可能存在主属性对键的部分依赖和传递依赖。所以关系模式的设计要符合BCNF的设计。

参考:

三个范式:http://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html

BCNF:http://www.cnblogs.com/ybwang/archive/2010/06/04/1751279.html

2.从SQL查询结果到领域模型实体

  • 通过JDBC查询得到ResultSet对象
  • 遍历ResultSet对象并将每行数据暂存到HashMap实例中,以结果集的字段名或字段别名为键,以字段值为值
  • 根据ResultMap标签的type属性通过反射实例化领域模型
  • 根据ResultMap标签的type属性和id、result等标签信息将HashMap中的键值对,填充到领域模型实例中并返回

3.ResultMap标签属性说明

id:resultMap标签的标识

type:返回值的全限定类名,或类型别名。

autoMapping:值范围(默认为true)。设置是否启动自动映射功能,自动映射功能就是自动查找与字段名小写同名的属性名,并调用setter方法。设置为false后,则需要在`resultMap`内明确注明映射关系才会调用对应的setter方法。

4.实体类一定要有无参数的构造方法

5.子元素说明:

id元素:用于设置主键字段与领域模型属性的映射关系

result元素:用于设置普通字段与领域模型属性的映射关系

6.constructor元素:指定使用指定参数列表的构造函数来实例化领域模型。注意:其子元素顺序必须与参数列表顺序对应

idArg子元素:标记该入参为主键

arg子元素:标记该入参为普通字段(主键使用该子元素设置也是可以的)

7.一对一关系,一对多关系 以及动态SQL

在采用嵌套结果的方式查询一对一、一对多关系时,必须要通过resultMap下的id或result标签来显式设置属性/字段映射关系,否则在查询多条记录时会仅仅返回最后一条记录的情况。

参考:

http://www.cnblogs.com/fsjohnhuang/p/4014819.html

http://www.soso.io/article/65324.html

8.动态映射关系信息 discriminator

参考:

http://www.cnblogs.com/fsjohnhuang/p/4076592.html

http://www.cnblogs.com/rollenholt/p/3365866.html

时间: 2024-12-18 00:08:48

数据库及Mybatis学习的相关文章

Mybatis学习笔记(二) 之实现数据库的增删改查

开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载.首先建立一个名字为 MyBaits 的 dynamic web project 1. 可以创建maven项目,依赖的包mybatis-3.2.0-SNAPSHOT.jar,mysql-connector-java-5.1.22-bin.jar <!-- mybatis包 --> <depe

MyBatis学习总结(六)——调用存储过程(转载)

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(六)--调用存储过程 一.提出需求 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 二.准备数据库表和存储过程 1 create table p_user( 2 id int primary key auto_increment, 3 name varchar(10), 4 sex char(2) 5 ); 6 7 insert into p_user(name,sex) values('A',"男");

MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合(转载)

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(八)--Mybatis3.x与Spring4.x整合 一.搭建开发环境 1.1.使用Maven创建Web项目 执行如下命令: mvn archetype:create -DgroupId=me.gacl -DartifactId=spring4-mybatis3 -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false 如下图所示: 创建好的项目如下

【Todo】Mybatis学习-偏理论

之前写过好几篇Mybatis相关的文章: http://www.cnblogs.com/charlesblc/p/5906431.html  <SSM(SpringMVC+Spring+Mybatis)框架程序on IDEA> 还有这个: http://www.cnblogs.com/charlesblc/p/5939505.html   <在上已个Java Spring MVC项目基础上加MyBatis> 还有这篇单独处理Mybatis内容的: http://www.cnblog

MyBatis学习总结(一)——MyBatis快速入门(转载)

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(一)--MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 二.mybatis快速入门 2.1.准备

MyBatis学习总结(三)——优化MyBatis配置文件中的配置(转载)

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(三)--优化MyBatis配置文件中的配置 一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的连接配置信息写在了MyBatis的conf.xml文件中,如下: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org

MyBatis学习总结——MyBatis快速入门

MyBatis学习总结(一)--MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 二.Mybatis入门 1. 用到的相关包      {Mybatis} mybat

MyBatis学习--简单的增删改查

jdbc程序 在学习MyBatis的时候先简单了解下JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: 1 Public static void main(String[] args) { 2 Connection connection = null; 3 PreparedStatement preparedStatement = null; 4 ResultSet resultSet = null; 5 6 try { 7 //加载数据库驱动 8 Class.forName

mybatis学习笔记一

昨天看了一下mybatis,学习了一下有很多东西还不懂,但是想把一些知道的记录一下,如有错误请大家多多指点. mybatis它是apche的一个开源项目,它以前的没名字并不是叫mybatis而是叫ibatis,2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis[1]. 1. 与其他的框架区别 mybatis和hibernate差不多都是,都属于优秀持久层的框架,主要负责访问数据库.但是和hibernate还是有区别的