开发工具与关键技术: VS , ;MVC多表
作者:刘佳明
撰写时间:2019年 6 月 2 日

因为小编之前对于MVC的新增,修改,删除的功能都不是太明白,之前一直没有具体的讲解关于MVC的主频功能,在这里给补上,

(主要的流程代码并不会做太多的讲述,重要的是在多表中,新增,删除等等要注意的一些外键ID呀,和表格提交的方法)

spring mysql联表查询_新增

本次文章的讲解是小编自己编辑的一个多表的MVC练习,表格中所显示的数据一共来源三个表,员工信息表,部门表,职位表,这三个表,其中三个表的关系是属于一对多,我们通过员工本人的信息,即可对员工的姓名,年龄,所属部门,处于什么职位等信息,来进行查询,修改,删除,而所属部门,什么职位等信息, 不能够通过员工的基础信息得到,像具体的部门表,职业表,车间表一些诸如此类的可单独的大表,项目中都是单独构建一个表格来“装” 这些数据,部门表的主键在我们的员工表中作为外键,在员工表中,我们可以通过外键来查询出对应外间信息,查询职位表的原理也是大同小异

spring mysql联表查询_新增_02

如图上例:员工ID为1的员工,所属部门为财务部,职位是财务部的员工;
查询数据

public ActionResult tabCount(LayuiTablePage layuiTablePage, string EmployeeNumberID, int DeoartmentNameID, int PositionNameID)

以上代码中,在控制器中,编辑查询表格中的数据时,需要传递参数,依次所表达的参数,为页面码数的类,一个输入框中传递的Value值,部门名称的下拉框,职位名称的下拉框;
另外其他的部分,linq语句链表查询出所需要的数据,自定义封装好一个员工+部门+职位的类,链表之后,通过所连表的数据,把表格中的数据复制给类中的字段,

int intTotalRow = listEmpoty.Count(); intTotalRow: linq语句插叙的数据
            List<EmployeeCount> empty = listEmpoty.Skip(layuiTablePage.GetStartIndex()).Take(layuiTablePage.limit).ToList();
            //调用分页分装
            LayuiTableData<EmployeeCount> listCont = new LayuiTableData<EmployeeCount>();

            listCont.count = intTotalRow;//总行数;
            listCont.data = empty;//具体显示的数据;                                      
得到  return Json(listCont, JsonRequestBehavior.AllowGet);返回

(注意在使用时,虽然查询数据的代码步骤都是差不多,注意区分 方法 自定义的名称)

新增数据

多表的新增,本次练习小编偷了个懒,只是做了两个表的新增,点击表格外部的新增按钮,弹出一个layui模态框,只新增了员工表中的部分信息,和职位表中的职位,具体截图如下:

spring mysql联表查询_spring mysql联表查询_03


关于多表新增需要注意一下几点,

控制器中编辑方法时,传递参数的注意

(应该是说页面如何传递的参数来决定控制器参数的形式才对,做法因人而异,但思路差不多)

public ActionResult AddEmployee(PW_Employee pwEmployee , SYS_Position SYSPosition)

如上,传递参数为两个表格PW_Employee pwEmployee , SYS_Position SYSPosition,控制器方法中参数的传递也需要根据实现功能的需求来决定,本次案例,为是对两个表的信息进行修改,多表的编辑特别要注意传递附件表(职位表)的ID。

第一种:ajaxSubmit 方法

首先,主要着重的讲明使用插件来提交表单,使用该插件传递参数

在学习的MVC的过程中与一个封装了方法的插件,如下路径,一般在百度上是可以下载到该插件的

$("#formInsertExaminee").ajaxSubmit(function (returnJson) {
                //关闭加载层
                layer.close(layerIndex);
                if (returnJson.State == true) {
                    //关闭模态框
                    $("#modInsertExaminee").modal("hide");
                    //刷新table
                    tabStudentSearch();
                }
                //提示
                layer.alert(returnJson.Text, { icon: 0, title: '提示' });
            });

使用该插件时,比较直接使用post,get等异步提交表单的差异在于提交方法的链接放在from标签中,提交方法也是

<form class="form-horizontal  row" role="form" id="formInsertExaminee" action="/ExaminationManagement/SetExaminee/InsertStudent" method="post">
第二种,利用jquery.min.js 中serializeArray 方法获取指定from表单的内容传递
                var formdata = $("#formNoticeType").serializeArray();
                $.post(url, formdata, function (returnJson) {
                    if (returnJson.State == true) {
                        //$("#layerNoticeType").css('display','none')
                        layer.close(layerIndex);
                        //刷新表格
                        dbtabCount();
                    }
                    else {
                       layer.alert(returnJson.Text);
                    }
                });

另外在编辑控制器中新增方法时需要主要新增表格信息的次序,新增部分的员工表信息,及其员工所处职位,第一步要确认数据库中是否有员工的信息和新增员工重复,判断 若不重复,首先把职位表的信息保存完毕,把保存那条的职位表的ID 赋值给员工信息表中的职位ID,之后在对所传递员工表的信息进行保存