若依框架介绍ruoyi-vue实现数据库表的一对一关联查询,基于Mybatis一对一关联查询

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

实现一对一表关联,需要主表里设置一个字段为外键,子表的主键和主表的外键字段名称一致,小编根据自己的实战项目做演示,本项目根据网友的功能诉求扩展开发,属于开源项目《工程项目管理OA系统》基础上的升级版,开发工作目前进展顺利,新版系统近期将公示上线发布,大家期待已久的手机版也会发布,希望您能给予关注、点赞、收藏,您的支持将是小编呈现应用开发优秀项目的动力源泉。实例以立项申请表(主表)和项目表(子表)的关联查询为例给大家讲解,


一、mybatis知识点

  • MyBatis 是一个持久层框架,它允许开发者使用 SQL 语句来操作数据库。一对一关联查询是指查询两个表之间的关联关系,其中一个表的每一条记录都只对应另一个表的一条记录。

  • 在 MyBatis 中进行一对一关联查询的思路如下:

  • 定义两个实体类,分别代表两个表的记录。这两个实体类之间需要建立一对一关联关系的字段。

  • 定义两个对应的 Mapper 接口,分别用于查询两个表的记录。这两个接口需要使用相应的 SQL 语句查询出需要的数据。

  • 在 MyBatis 的映射文件中编写 SQL 语句。对于一对一关联查询,可以使用 JOIN 或者嵌套查询来实现。JOIN 可以将两个- 表的记录合并在一起,嵌套查询则是在外层查询中嵌套执行内层查询。

  • 使用 JOIN 查询时,可以通过 ON 条件指定两个表之间的关联关系。例如:SELECT * FROM table1 JOIN table2 ON table1.id = table2.id;

  • 使用嵌套查询时,可以在外层查询中使用 SELECT 子查询来查询关联表的数据。例如:SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);

  • 在映射文件中配置结果映射。需要使用 元素来定义实体类之间的关联关系。可以使用 元素来指定一对一的关联关系。

  • 在 Mapper 接口中定义查询方法,并在映射文件中进行配置。可以使用 元素来定义查询方法,并通过 resultMap 属性指定结果映射。

  • 在 Java 代码中调用 Mapper 接口的方法来执行查询操作。通过查询得到的结果可以获取到两个表的关联数据。

二、关联表 sql 语句

主表外键project_id与字表主键project_id保持一致;

2.1主表:立项申请(oa_establish)

CREATE TABLE `oa_establish` (
  `establish_id` bigint(20) unsigned NOT NULL COMMENT '主键ID',
  `project_id` bigint(20) NOT NULL COMMENT '项目ID',
  `instance_id` bigint(20) DEFAULT NULL COMMENT '流程实例ID',
  `accessory` text COLLATE utf8mb4_bin COMMENT '附件',
  `remark` varchar(256) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`establish_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='立项申请表';

2.2 子表:项目表(oa_project)

CREATE TABLE `oa_project` (
  `project_id` bigint(20) unsigned NOT NULL COMMENT '主键ID',
  `pro_title` varchar(128) COLLATE utf8mb4_bin DEFAULT '' COMMENT '项目名称',
  `pro_number` varchar(64) COLLATE utf8mb4_bin DEFAULT '' COMMENT '项目编号',
  `pro_price` decimal(6,2) DEFAULT NULL COMMENT '项目金额',
  `del_flag` char(1) COLLATE utf8mb4_bin DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
  PRIMARY KEY (`project_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='项目信息表';

三、代码生成

  • 借助 ruoyi-vue代码生成工具,导入、根据需要编辑字段,下载源码并导入到项目;

  • Ruoyi-Vue 是一个基于 Spring Boot 和 Vue.js 的前后端分离开发平台。它提供了一套完整的代码生成器,可以帮助开发者快速生成前后端的代码,包括前端页面、后端接口、数据库表结构等;

  • Ruoyi-Vue 的代码生成器通过读取数据库的表结构,自动生成对应的 Java 实体类、控制器、服务层和前端页面等代码。开发者只需要简单配置一些参数,就可以生成符合项目需求的代码,大大减少了开发工作量和时间。

四、修改mybatis xml文件

4.1 association标签

1、在resultMap标签里添加association标签,根据需要添加需要调用数据的字段,MyBatis中的association是一种对象关联映射,用于映射两个对象之间的关系。

2、在数据库中,通常会存在多个表之间的关联关系。MyBatis提供了association标签来映射这种关系。在映射文件中,可以使用association标签定义一个对象关联。
association标签具有以下属性:

  • property:指定关联对象的属性名。
  • column:指定关联对象需要关联的列名。
  • javaType:指定关联对象的类型。
  • 在association标签内部,可以使用result标签来映射关联对象的属性。

3、通过使用association标签,可以将数据库中多个表之间的关联关系映射为Java对象之间的关系,方便进行操作和查询。

4.2 修改resultMap标签

<resultMap type="OaEstablish" id="OaEstablishResult">
        <result property="establishId"    column="establish_id"    />
        <result property="projectId"    column="project_id"    />
        <result property="instanceId"    column="instance_id"    />
        <result property="accessory"    column="accessory"    />
        <result property="remark"    column="remark"    />
        <association property="oaProject" javaType="OaProject">
            <id column="project_id" property="projectId" />
            <result column="pro_title" property="proTitle" />
        </association>
    </resultMap>

4.3 关联查询语句

 <sql id="selectOaEstablishVo">
        select e.establish_id, e.project_id, e.instance_id, e.accessory, e.remark, p.project_id, p.pro_title
        from oa_establish e
        left join oa_project p on e.project_id = p.project_id
    </sql>

<select id="selectOaEstablishList" parameterType="OaEstablish" resultMap="OaEstablishResult">
        <include refid="selectOaEstablishVo"/>
        <where>  
            <if test="projectId != null "> and e.project_id = #{projectId}</if>
            <if test="instanceId != null "> and e.instance_id = #{instanceId}</if>
        </where>
    </select>

五、实体类

    /**关联项目表**/
    private OaProject oaProject;

    /**get  set**/
    public OaProject getOaProject() {return oaProject;}
    public void setOaProject(OaProject oaProject) { this.oaProject = oaProject;}

   @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("establishId", getEstablishId())
            .append("projectId", getProjectId())
            .append("instanceId", getInstanceId())
            .append("oaProject", getOaProject())
            .toString();
    }

六、查看视图数据

打印接口返回的数据

  created() {
    this.getList();
  },
  methods: {
    /** 查询立项申请列表 */
    getList() {
      this.loading = true;
      listEstablish(this.queryParams).then(response => {
        console.log(22223, response);
        this.establishList = response.rows;
        this.total = response.total;
        this.loading = false;
      });
    },

出现下面对象属性值的时候,表示大功告成
在这里插入图片描述


七、总结

总之,MyBatis 中进行一对一关联查询的思路是定义实体类、Mapper 接口和映射文件,编写相应的 SQL 语句,并配置结果映射,最后通过调用 Mapper 接口的方法执行查询操作。

<think>好的,用户想在若依框架Ruoyi-vue)中实现完整的视频上传功能,我需要帮他们找到相关的教程或示例。首先,我得回忆一下若依框架的结构,特别是RuoYi-Vue版本。根据用户提供的引用,引用[3]提到需要复制com文件夹到java目录,以及mapper到resources,还有添加前端代码,这可能涉及到后端和前端两部分的修改。 首先,后端部分可能需要处理文件上传的接口。若依框架通常使用Spring Boot,所以可能需要创建一个Controller来处理上传请求。用户可能需要在Controller中接收MultipartFile类型的参数,并调用服务层进行保存。同时,可能需要配置文件的存储路径,这里要注意在application.yml中设置正确的路径,比如ruoyi.profile,类似引用[3]中提到的配置。 然后,文件存储方面,需要将上传的视频保存到指定目录,可能还需要记录文件信息到数据库。比如,创建一个实体类来存储文件名、路径、大小等信息,并通过MyBatis的Mapper进行数据库操作,这部分可以参考引用[3]中的结构,将实体类、Mapper接口和XML文件放在正确的位置。 前端部分,用户可能需要使用Vue组件,比如el-upload组件来实现上传界面。需要设置上传的URL指向后端的接口地址,并处理上传成功或失败的回调函数。同时,可能需要显示上传进度或已上传的文件列,这部分需要前端代码的调整,如引用[3]提到的添加前端代码。 另外,用户可能还需要考虑视频的预览功能,但根据引用[2],PDF预览可能需要后端配置或前端处理,但视频预览通常可以通过HTML5的video标签实现,所以前端可能需要在上传后显示视频的预览,这需要在前端组件中添加video标签并绑定src属性到上传后的视频URL。 还需要注意文件大小限制,Spring Boot默认的文件上传大小可能较小,需要在application.yml中配置spring.servlet.multipart.max-file-size和max-request-size,避免上传大视频时出错。同时,安全性方面,可能需要检查文件类型,防止上传非视频文件,可以在后端校验文件的Content-Type或扩展名。 可能遇到的问题包括跨域问题,需要确保后端接口允许前端域名的请求,或者通过若依框架的配置处理。另外,视频上传后的存储路径权限问题,确保应用有权限写入目标目录。 总结一下,实现步骤大致分为后端接口开发、数据库记录、前端上传组件集成、配置调整和安全性处理。需要结合若依框架已有的模块结构,参考用户提供的引用中的目录结构进行调整,确保各部分代码放置在正确的位置,并测试整个上传流程是否顺畅。</think>在若依框架(Ruoyi-vue)中实现视频上传功能需要前后端协同开发。以下是具体实现步骤: ### 一、后端实现(Java/Spring Boot) 1. **配置文件上传路径** ```yaml # application.yml ruoyi: profile: /path/to/upload/video # 视频存储路径[^3] ``` 2. **创建实体类** ```java // VideoFile.java public class VideoFile { private Long id; private String originalName; private String filePath; private Long fileSize; private Date createTime; // getter/setter } ``` 3. **编写Controller** ```java @PostMapping("/uploadVideo") public AjaxResult uploadVideo(@RequestParam("file") MultipartFile file) { try { String fileName = FileUploadUtils.upload(file); VideoFile video = new VideoFile(); video.setOriginalName(file.getOriginalFilename()); video.setFilePath(fileName); video.setFileSize(file.getSize()); videoService.insertVideo(video); return AjaxResult.success(fileName); } catch (Exception e) { return AjaxResult.error("上传失败"); } } ``` ### 二、前端实现Vue) 1. **文件上传组件** ```vue <el-upload action="/api/uploadVideo" :on-success="handleSuccess" :before-upload="beforeUpload"> <el-button size="small" type="primary">点击上传视频</el-button> </el-upload> <video v-if="videoUrl" :src="videoUrl" controls style="width: 500px"/> ``` 2. **上传处理逻辑** ```javascript methods: { beforeUpload(file) { const isVideo = file.type.startsWith('video/'); if (!isVideo) { this.$message.error('只能上传视频文件'); } return isVideo; }, handleSuccess(res) { this.videoUrl = res.data; } } ``` ### 三、注意事项 1. **文件大小限制**:需在`application.yml`配置`spring.servlet.multipart.max-file-size` 2. **格式验证**:支持常见视频格式如MP4/AVI/MOV等 3. **安全防护**:建议添加文件病毒扫描功能 4. **分片上传**:大文件建议使用分片上传方案
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值