利用bladex+avue实现一对多的关系

简介: 利用bladex+avue实现一对多的关系

今天,记录一篇技术文章吧,也是解决了好久才解决掉的(说来也惭愧)。

涉及技术

前端:vue,element ui

后端框架:bladex

其中后端涉及到的技术有:springboot,srping mvc,mybatis plus,shiro,SpringCloud

其实这个bladex封装的还是挺复杂的,有些地方你若是想在他的基础上扩展自己的些内容,能改到想吐,尤其是前端,而且官方的文档有和没有几乎都一样,说的一点都不详细……

需求说明

系统中有模板表template和模板类型表templatetype,两者关系是多对一的关系,也就是一个模板类型中有多个模板,在查询展示所有模板信息的时候需要显示的是模板类型名而不是类型编号,如图所示:

乍一看是不是很简单,只需要在mybatis的mapper文件中配置双方之间的映射关系就可以,我刚开始也是这么想的,但是配置完之后发现不可以,模板类型名显示不出来。

然后换了一种思路,原理就是在查询模板的同时,按照模板表的外键查询模板名,赋值给TemplateVo类中,然后在前端获取。

思路三言两语就说完了,但是做起来确实麻烦,下面看看如何实现的(也算是做个记录,忘记了回头看看)。

前端

首先是前端的template.vue页面,修改column中的模板类型相关内容:

column: [
            {
              label: "模板编号",
              prop: "id",
              hide:true,
              rules: [{
                required: true,
                message: "模板编号",
                trigger: "blur"
              }]
            },
            {
              label: "模板名称",
              prop: "tname",
              rules: [{
                required: true,
                message: "请输入模板名称",
                trigger: "blur"
              }]
            },
            {
              label: "类型",
              prop: "typename",
              hide:false,
              rules: [{
                required: true,
                message: "请输入类型",
                trigger: "blur"
              }]
            },
            {
              label: "目标",
              prop: "tmubiao",
              rules: [{
                required: true,
                message: "请输入目标",
                trigger: "blur"
              }]
            },
            {
              label: "强度",
              prop: "tqiangdu",
              rules: [{
                required: true,
                message: "请输入强度",
                trigger: "blur"
              }]
            },
            {
              label: "备注",
              prop: "tbeizhu",
              rules: [{
                required: true,
                message: "请输入备注",
                trigger: "blur"
              }]
            },
            {
              label: "创建者",
              prop: "userName",
              rules: [{
                required: true,
                message: "请输入创建模板的人",
                trigger: "blur"
              }]
            },
            {
              type: 'date',
              label: '创建时间',
              display: true,
              format: "yyyy-MM-dd hh:mm:ss",
              valueFormat: "yyyy-MM-dd hh:mm:ss",
              prop: 'tdate'
            },
          ]

前端其余都不用在改动了。

后端

1.在模板类型的mapper文件TemplatetypeMapper中新加根据编号查询名称的接口:

/**
  * 根据编号查询接口
  * @param id
  * @return
  */
 String typeNameList (Integer id);

2.在模板类型的配置文件TemplatetypeMapper.xml中添加sql映射:

<select id="typeNameList"  resultType="string">
        select typename from hbv_templateType where id = #{id}
    </select>

3.在TemplateVo中新加字段:

//模板类型名
 private String typename;

4.在ITemplatetypeService中添加如下接口:

/**
  * 根据编号查询名称
  * @param id
  * @return
  */
 String typeNameList (Integer id);

5.在TemplatetypeServiceImpl中添加对ITemplatetypeService的实现:

@Override
 public String typeNameList(Integer id) {
  return baseMapper.typeNameList(id);
 }

6.在TemplateWrapper文件中添加如下代码:

//模板类型的业务接口
  private static final ITemplatetypeService templatetypeService;
 //用户的业务接口
 private static final IUserService userService;
 static{
  templatetypeService = SpringUtil.getBean(ITemplatetypeService.class);
  userService = SpringUtil.getBean(IUserService.class);
 }
 @Override
 public TemplateVO entityVO(Template template) {
  TemplateVO templateVO = Objects.requireNonNull(BeanUtil.copy(template, TemplateVO.class));
  String typename = templatetypeService.typeNameList(template.getTypeid());
  String userName = userService.getUserNameById(template.getTcid());
  //String userName =
  templateVO.setTypename(typename);
  templateVO.setUserName(userName);
  return templateVO;
 }

7.最后修改控制器中的list方法:

/**
  * 分页 模板表
  */
 @GetMapping("/list")
 @ApiOperationSupport(order = 2)
 @ApiOperation(value = "分页", notes = "传入template")
 public R<IPage<TemplateVO>> list(Template template, Query query) {
  QueryWrapper<Template> queryWrapper= Condition.getQueryWrapper(template);
  IPage<Template> pages = templateService.page(Condition.getPage(query), queryWrapper);
  return R.data(TemplateWrapper.build().pageVO(pages));
 }

好了,至此终于完事了,运行,就可以了!!!

相关文章
|
5月前
|
开发框架 前端开发 JavaScript
ABP框架中一对多,多对多关系的处理以及功能界面的处理(2)
ABP框架中一对多,多对多关系的处理以及功能界面的处理(2)
|
5月前
|
开发框架 前端开发 JavaScript
在ABP VNext框架中处理和用户相关的多对多的关系
在ABP VNext框架中处理和用户相关的多对多的关系
|
5月前
|
开发框架 前端开发 JavaScript
ABP框架中一对多,多对多关系的处理以及功能界面的处理(1)
ABP框架中一对多,多对多关系的处理以及功能界面的处理(1)
|
SQL 架构师 Java
SpringBoot从入门到精通(二十八) JPA 的实体映射关系,轻松一对一,一对多,多对多关系映射!
前面讲了Spring Boot 使用 JPA,实现JPA 的增、删、改、查的功能,同时也介绍了JPA的一些查询,自定义SQL查询等使用。JPA使用非常简单,功能非常强大的ORM框架,无需任何数据访问层和sql语句即可实现完整的数据操作方法。但是,之前都是介绍的单表的增删改查等操作,多表多实体的数据操作怎么实现呢?接下来聊一聊 JPA 的一对一,一对多,多对一,多对多等实体映射关系。
SpringBoot从入门到精通(二十八) JPA 的实体映射关系,轻松一对一,一对多,多对多关系映射!
|
7月前
|
Python
使用Django时,如何设计模型关系(一对一、一对多、多对多)?
Django支持三种模型关联:ForeignKey(一对多),OneToOneField(一对一)和ManyToManyField(多对多)。ForeignKey示例:`Article`有一个指向`Author`的外键。OneToOneField示例:`UserProfile`与`User`一对一关联。ManyToManyField示例:`Student`和`Course`之间多对多关系。这些关联字段便于反向查询,如`article.author`获取作者,`author.article_set.all()`获取作者所有文章。
95 1
|
SQL Java 数据库连接
MyBatis 的关联关系配置 一对多,一对一,多对多 关系的映射处理
MyBatis 的关联关系配置 一对多,一对一,多对多 关系的映射处理
144 0
|
存储 SQL Java
【Mybatis】常见面试题:处理表与表之间的关系:多对一,一对多
【Mybatis】常见面试题:处理表与表之间的关系:多对一,一对多
|
SQL 前端开发 JavaScript
利用bladex+avue实现一对多的关系
利用bladex+avue实现一对多的关系
305 0
利用bladex+avue实现一对多的关系
|
测试技术 数据库
Grails里DOMAIN类的一对一,一对多,多对多关系总结及集成测试
终于干完这一章节,收获很多啊。 和DJANGO有类似,也有不同。 User.groovy: package com.grailsinaction class User { String loginId String password Date dat...
1267 0
|
存储 关系型数据库 数据库
[译] 如何用 Room 处理一对一,一对多,多对多关系?
[译] 如何用 Room 处理一对一,一对多,多对多关系?
[译] 如何用 Room 处理一对一,一对多,多对多关系?