zoukankan      html  css  js  c++  java
  • jeecg项目数据库数据与页面数据双向交互

    jeecg 项目的三大技术框架 mybaties,springboot,vue;

    数据库数据如何显示到界面上,页面数据又如何保存到数据库中,还是高先生摸索出来的,佩服。

    jeecg 分三层架构 mapper层与数据库打交道,controller层与页面打交道,server层处理一些业务逻辑(我们很多业务逻辑也在controller层处理了,比如给让某两个量或多个量之间做四则运算,这里应该是四则运算计算完后直接给实体类属性赋值,在server层当下用过的有使用@DB("")注解选择数据源,生成任务单编号;

    三层架构连同一个实体类布局图

                                        

     mapper层定义接口,接口映射到xml文件中。service层会写成接口,再有接口的实现类,使用抽象的方法,只关注一个黑盒子的输入输出,而不在意其中实现细节。调用时直接调用接口就好,不用管接口的实现过程,工程中大多是面向接口编程,其它地方用到这个接口的功能,调用接口就好,无需知道其中的细节。

    具体的数据库数据和前端页面数据的交互过程:

    以查出老化装置的信息为例:

    1.mapper层写好与数据库的交互,

    StatisticsAndQueryMapper.java 中写好

    //根据装置编号查询老化装置详细信息
    public List<GxAgingDevice> queryAgingDeviceByDeviceCode(@Param("deviceCode") String deviceCode);
    @Param("deviceCode")注解对应到sql语句中的参数名  #{deviceCode}

    StatisticsAndQueryMapper.xml 中写好

    <select id="queryAgingDeviceByDeviceCode" parameterType="java.lang.String"
    resultType="org.jeecg.modules.gxagingdevice.entity.GxAgingDevice">
    select
    a.device_code,a.device_name,a.device_ip,a.aging_kind,a.isQualified,a.task_code,b.own_order
    FROM
    gx_aging_device a JOIN gx_device_main b ON a.device_code =
    b.device_code
    where a.device_code = #{deviceCode}
    </select>

    注意 StatisticsAndQueryMapper.xml 中id必须和StatisticsAndQueryMapper.java 中接口名一致,

    parameterType="java.lang.String"传入的参数类型,
    resultType="org.jeecg.modules.gxagingdevice.entity.GxAgingDevice" 返回值类型,返回的是一个实体类的还,鼠标浮到上面,按住ctrol+鼠标左键可跳转到实体类。

    实体类GxAgingDevice.java中写好

    @Data
    @TableName("gx_aging_device")
    public class GxAgingDevice implements Serializable {
        private static final long serialVersionUID = 1L;
        
        /**主键*/
        @TableId(type = IdType.UUID)
        private java.lang.String id;
        /**装置编号*/
        @Excel(name = "装置编号", width = 15)
        private java.lang.String deviceCode;
        /**装置名称*/
        @Excel(name = "装置名称", width = 15)
        private java.lang.String deviceName;
        /**IP地址*/
        @Excel(name = "IP地址", width = 15)
        private java.lang.String deviceIp;
        /**是否合格*/
        @Excel(name = "是否合格", width = 15)
        private java.lang.String isqualified;
        /**所属任务*/
        @Excel(name = "所属任务", width = 15)
        private java.lang.String taskCode;
        /**老化类别*/
        @Excel(name = "老化类别", width = 15)
        private java.lang.String agingKind;
        /**老化温度*/
        @Excel(name = "老化温度", width = 15)
        private java.lang.String agingTemparature;
        /**老化时长*/
        @Excel(name = "老化时长", width = 15)
        private java.lang.String agingDuration;
        /**起始时间*/
        @Excel(name = "起始时间", width = 15)
        private java.lang.String startTime;
        /**define1*/
        @Excel(name = "人员", width = 15)
        private java.lang.String donePerson;
        /**define2*/
        @Excel(name = "所属订单", width = 15)
        private java.lang.String ownOrder;
        /**define3*/
        @Excel(name = "define3", width = 15)
        private java.lang.String define3;
        /**define4*/
        @Excel(name = "define4", width = 15)
        private java.lang.String define4;
        
        
        
        
    }
    View Code

    这个实体类是代码生成器生成的,很多注解不需要加也可以正常使用。

    2.service层写好逻辑

    这里不需要特别的逻辑,生命一下就行

    IStatisticsAndQueryService.java中写好

    //根据装置编号查询老化装置详细信息
            public List<GxAgingDevice> queryAgingDeviceByDeviceCode( String deviceCode);

    StatisticsAndQueryServiceImpl.java中写好

    @Override
        public List<GxAgingDevice> queryAgingDeviceByDeviceCode(String deviceCode) {
            // TODO Auto-generated method stub
            return this.statisticsAndQueryMapper.queryAgingDeviceByDeviceCode(deviceCode);
        }

    3.controller层

    @RestController
    @RequestMapping("/stasticsandquery/stasticsAndQuery")
    @Slf4j
    public class StatisticsAndQueryController {
    @Autowired
    private IStatisticsAndQueryService IStatisticsAndQueryService;

    @PostMapping(value = "queryAgingDeviceByDeviceCode")
        public Result<List<GxAgingDevice>> queryAgingDeviceByDeviceCode(){
            System.out.println("queryAgingDeviceByDeviceCode开始");
            Result<List<GxAgingDevice>> result = new Result<List<GxAgingDevice>>();
            List<GxAgingDevice> lists = this.IStatisticsAndQueryService.queryAgingDeviceByDeviceCode(this.deviceCode);
            System.out.println("queryAgingDeviceByDeviceCode");
            System.out.println(lists);
            result.setResult(lists);
            result.setSuccess(true);    
            return result;
        }

    }

    @PostMapping 对应前端postAction      @GetMapping对应前端getAction    

    在controller类头需加注解

    @RestController
    @RequestMapping("/stasticsandquery/stasticsAndQuery")
    @Slf4j

    @PostMapping(value = "queryAgingDeviceByDeviceCode")前后端交互路径

    4.vue前端

    在data()中写好url 对应后端 声明一个数组来接收后端传来的list类集合

    data() {

    return {
      AgingDevice:[],
      url:{ queryAgingDeviceByDeviceCode:"/stasticsandquery/stasticsAndQuery/queryAgingDeviceByDeviceCode", },
     }
    }
    created()方法为点开页面的时候就执行里面的方法
    调用postAction 把后端的结果赋值给数组
    AgingDevice
     created() {
          this.loadData();
        },
        methods: {
          loadData() {
            postAction(this.url.queryAgingDeviceByDeviceCode).then((res) => {
              if (res.success) {
                this.AgingDevice = res.result;      
              }
            })
          },
        }

    在table中注册数据源为 AgingDevice

     <a-table
            :columns="columns"
            :dataSource="AgingDevice"
          >

    在columns中给相应列dataIndex复值为类GxAgingDevice中的属性

     columns: [{
              title: '装置编号',
              dataIndex: 'deviceCode',
              key: 'id'
            }, {
              title: '装置名称',
              dataIndex: 'deviceName',
              key: 'name'
            }, {
              title: 'IP地址',
              dataIndex: 'deviceIp',
              key: 'ip'
            }, {
              title: '老化类别',
              dataIndex: "agingKind"
            }, {
              title: '测试结果',
              dataIndex: 'isqualified',
              key: 'result'
            },
            /*  {
                title:'人员',
                dataIndex:"donePerson"
              },*/
    
              {
              title:'所属任务',
              dataIndex:"taskCode"
            },
              {
                title:'所属订单',
                dataIndex:"ownOrder"
              }
            /*,{
              title:'时间',
              dataIndex:"time"
            }*/],

    这样就实现了数据库数据传到页面显示。

    前端页面数据传到后端过程类似,也是通过getAction和postAction方法

    要注意下注解 把参数传到后端用@RequestParam(name="") name对应前端参数的名字

    passDeviceCode(record){
            var param = {};
              param.deviceCode = record.deviceCode;
            console.log( record.deviceCode);
            getAction(this.url.passDeviceCode,param);
          }
    //前端传过来的装置编号,用于查询装置的在各工序的详细信息
        @GetMapping(value = "/passDeviceCode")
        public void passDeviceCode(@RequestParam(name="deviceCode") String deviceCode){
            System.out.println(deviceCode);
            this.deviceCode = deviceCode;
        }
    把实体类传到后端用@RequestBody
      postAction(this.url.saveTask,this.Task)
    
    
    public Result<Boolean> save(@RequestBody Task task){

    前后端实体类的属性名和属性格式(比如时间)都要对应好。

    目前发现传参的时候用getAction,传实体类的时候用postAction。




     



  • 相关阅读:
    洛谷P1455 搭配购买(并查集)
    洛谷 P2078 朋友(并查集)
    TheZealous的集训日常之 离线算法与在线算法区别
    综合练习: Python自动化测试--从Excel读取数据并录入mysql
    读取excel/CSV/json数据
    Python 日志
    python 操作数据库
    python requests 接口: 调用百度开发者平台图片文字识别接口
    接口测试理论 2
    接口测试理论 1
  • 原文地址:https://www.cnblogs.com/jianghuxiao/p/11541100.html
Copyright © 2011-2022 走看看