03.关系映射

发布时间 2023-04-25 15:04:52作者: 熊猫Panda先生

一、实体关系

实体——数据实体,实体关系指的就是数据与数据之间的关系

例如:用户和角色、房屋和楼栋、订单和商品

实体关系分为以下四种:

一对一关联

实例:学生和校园卡、人和身份证、用户基本信息和详情

数据表关系:

  • 主键关联(用户表主键和详情主键相同时,表示是匹配的数据)

学生和校园卡

  • 唯一外键关联

学生和校园卡

  

一对多关联多对一关联

实例:

  • 一对多: 班级和学生、 类别和商品、楼栋和房屋

  • 多对一:学生和班级 、 商品和类别

数据表关系:

  • 在“多”的一方添加外键和“一”的一方进行关联。 

学生和班级

 

多对多关联

实例:任课老师和班级、任课老师和学生、学生和社团、用户和角色、角色和权限、订单和商品。

数据表关系:建立第三张关系表添加两个外键分别与两张表主键进行关联。

学生和课程及成绩

 任课教师和班级

二、创建项目部署MyBatis框架

(一)创建Web项目

项目名称:MyBatisTest2

添加Web4.0支持。

   

在pom.xml文件中添加Maven依赖(Servlet支持):

<!-- 添加web依赖 -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

另外还需要在pom.xml添加打包方式为war,这样在配置Tomcat发布时,部署里就会有“工件”选项。

<packaging>war</packaging>

  

 

如果测试jsp页面出现404错误,无法访问jsp,可以在【项目结构】->【工件】->【输出布局】中,添加项目的web目录。

 

(二)部署MyBatis框架

 在pom.xml文件中添加Maven依赖(MyBatis支持和MySQL数据库驱动): 

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.49</version>
</dependency>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.13</version>
</dependency>

我们使用Maven方式添加jar包,在发布项目之前一定要在【项目结构】--【工件】中将Maven方式导入的包(右侧)添加到【输出根】(左侧)中。

(三)创建数据库连接配置文件

src/main/resources目录下创建db.properties文件,在该文件中配置数据库连接的参数。

mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/db_test?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
mysql.username=root
mysql.password=1234

(四)创建MyBatis核心配置文件

src/main/resources目录下创建mybatis-config.xml文件,该文件主要用于项目的环境配置。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 环境配置 -->
    <!-- 加载类路径下的属性文件 -->
    <properties resource="db.properties"/>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <!-- 数据库连接配置,db.properties文件中的内容 -->
            <dataSource type="POOLED">
                <property name="driver" value="${mysql.driver}"/>
                <property name="url" value="${mysql.url}"/>
                <property name="username" value="${mysql.username}"/>
                <property name="password" value="${mysql.password}"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

 

三、一对一关联

1、建表

CREATE TABLE tb_student (
    sid INT PRIMARY KEY auto_increment,
    sname VARCHAR(20) NOT NULL,
    age INT 
);
CREATE TABLE tb_card (
    cid INT PRIMARY KEY auto_increment,
    balance DOUBLE NOT NULL,
    sid INT NOT NULL UNIQUE-- CONSTRAINT FK_STUDENT FOREIGN KEY(sid) REFERENCES tb_student(sid) -- 物理外键关联,不推荐使用
);

现在很多大公司都“不推荐使用物理外键关联”,其中原因,大家可以自行上网搜索学习。https://blog.csdn.net/corleone_4ever/article/details/106540079

添加数据,可以使用Navicat【数据生成】功能,添加一些测试数据。

 

 

 

 

2、创建实体类

我们在这里给大家介绍一下Lombok。Lombok项目是一个Java库,它可以自动插入到编辑器和构建工具中,增强java的性能。不需要再写构造方法、getter和setter等方法,通过使用对应的注解,可以在编译源码的时候动态添加源码。

Lombok是一个可以大幅减少Java代码的工具。

导入Lombok依赖

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.26</version>
    <scope>provided</scope>
</dependency>
  • @Getter/@Setter

  为字段生成Getter和Setter方法,可以注解到字段或者类上(注解在类上会为类中的所有字段生成Getter和Setter方法),默认是public类型的,如果需要的话可以修改方法的访问级别。

  • @NonNull

  为字段赋值时(即调用字段的setter方法时),如果传的参数为null,则会抛出空异常NullPointerException,生成setter方法时会对参数是否为空检查。

  • @NoArgsConstructor

  生成一个无参构造方法。当类中有final字段没有被初始化时,编译器会报错,此时可用@NoArgsConstructor(force = true),然后就会为没有初始化的final字段设置默认值 0 / false / null, 这样编译器就不会报错。对于具有约束的字段(例如@NonNull字段),不会生成检查或分配,因此请注意,正确初始化这些字段之前,这些约束无效。

  • @RequiredArgsConstructor

  生成构造方法(可能带参数也可能不带参数),如果带参数,这参数只能是以final修饰的未经初始化的字段,或者是以@NonNull注解的未经初始化的字段。

  @RequiredArgsConstructor(staticName = “of”)会生成一个of()的静态方法,并把构造方法设置为私有的。

  • @AllArgsConstructor

  生成一个全参数的构造方法。

  • @ToString

  生成toString()方法,默认情况下它会按顺序(以逗号分隔)打印你的类名称以及每个字段。可以这样设置不包含哪些字段,可以指定一个也可以指定多个@ToString(exclude = “id”) / @ToString(exclude = {“id”,“name”})

  如果继承的有父类的话,可以设置callSuper 让其调用父类的toString()方法,例如:@ToString(callSuper = true)

  • @Data

  @Data 包含了 @ToString、@EqualsAndHashCode、@Getter / @Setter和@RequiredArgsConstructor的功能。

Student

package com.sdbi.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Student {
    private int sid;
    private String sname;
    private int age;
}

 

Card

package com.sdbi.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Card {
    private int cid;
    private double balance;
    private int uid;
}

 

 

3、添加操作(事务)

 

 

4、一对一关联查询

 

 

四、一对多关联

1、建表

 

 

 

五、多对一关联

 

 

 

 

六、多对多关联