首页 > 其他分享 >03.关系映射

03.关系映射

时间:2023-04-25 15:12:43浏览次数:31  
标签:关系 03 映射 关联 添加 ToString mysql import lombok

一、实体关系

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

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

实体关系分为以下四种:

一对一关联

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

数据表关系:

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

学生和校园卡

  • 唯一外键关联

学生和校园卡

  

一对多关联多对一关联

实例:

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

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

数据表关系:

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

学生和班级

 

多对多关联

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

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

学生和课程及成绩

 任课教师和班级

二、创建项目部署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、建表

 

 

 

五、多对一关联

 

 

 

 

六、多对多关联

 

 

 

标签:关系,03,映射,关联,添加,ToString,mysql,import,lombok
From: https://www.cnblogs.com/lihuawei/p/17273136.html

相关文章

  • Consider defining a bean of type 'org.springframework.security.authentication.Au
    Considerdefiningabeanoftype'org.springframework.security.authentication.AuthenticationManager'inyourconfiguration.[2023-04-2514:44:36.426][main][ERROR]o.s.b.diagnostics.LoggingFailureAnalysisReporter-***************************......
  • ContextPath must start with '' and not end with ''
    1、问题运行SpringBoot项目,发生java.lang.IllegalArgumentException异常,原因如下:ContextPathmuststartwith'/'andnotendwith'/'完整的Run输出如下:._________/\\/___'_____(_)______\\\\(()\___......
  • pandas.DataFrame.groupby—使用映射器或通过一系列列对数据框进行分组
    语法格式DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=_NoDefault.no_default, squeeze=_NoDefault.no_default, observed=False, dropna=True)常用的几个参数解释:by:可接受映射、函数、标签或标签列表。用于确定分组。ax......
  • 关于如何清空存在依赖关系的表
    设表student,course,scstudent中的sno为主键course中cno为主键sc中sno和cno为外键 如果按照student,course,sc的顺序情况,那么会出现因为student,course存在依赖关系而无法情况数据的情况因此这种情况下应该将顺序调整为sc,student,course这样就可以啦......
  • 虚拟机热迁移一直处于迁移中的状态-v4-20210308_124243
    虚拟机热迁移一直处于迁移中的状态企业云平台产品中心共享知识库Exportedon03/08/2021TableofContents问题现象:对虚拟机进行热迁移操作,Dashboard和云服务自助平台上一直处于迁移中的状态问题原因:虚拟机存在频繁的数据读写操作,导致虚拟机迁移的速度追不上数据读写的速度,每次迁......
  • Virsh常用命令-v4-20210308_123613
    Virsh常用命令企业云平台产品中心共享知识库Exportedon03/08/2021TableofContentsVirsh是基于libvirt写的一个命令行工具,用来通过Virsh来对虚拟机的生命周期进行管理,以下是常用的一些Virsh命令:1、查看在运行的虚拟机virshlist2、查看创建的所有虚拟机virshlist--all3、启......
  • OSD自然OUT之后无法再加入集群-v1-20210308_124828
    OSD自然OUT之后无法再加入集群企业云平台产品中心共享知识库Exportedon03/08/2021TableofContents问题描述4问题原因5解决方法6验证步骤6相关下载链接:OSD自然OUT之后无法再加入集群.pdf1--------这是一条华丽的分割线--------1https://iwiki.woa.com/dow......
  • 机器学习、神经网络与卷积神经网络 三者的关系
    机器学习和神经网络都是人工智能(AI)领域中的重要概念。机器学习是指让计算机通过自我学习改善性能的一种方法。通常使用大量的数据训练模型,并持续对模型进行调整和改进,从而使其能够有效地处理新的数据并提供准确的预测。神经网络则是一种模拟人类神经系统的计算模型,可以通过多层......
  • @JvmDefault is only supported since JVM target 1.8. Recompile with '-jvm-target
    问题Logcat提示’@JvmDefault’isonlysupportedsinceJVMtarget1.8.Recompilewith'-jvm-target1.8’解决在gradle中插入以下代码android{//..其他代码...kotlinOptions{jvmTarget="1.8"}}问题Logcat提示:Usageof‘@JvmDefault......
  • 关系运算
    关系代数运算基本关系运算是指对单个或多个关系进行操作的运算,有以下五种:并(Union):用符号∪表示,表示两个具有相同结构的关系的并集,即把两个关系中的元组合并起来,去除重复的元组。差(Difference):用符号-表示,表示两个具有相同结构的关系的差集,即把第一个关系中存在而第二个关系中不......