VSCode+Idea 一个增删改查demo

2023-10-26

一个简单的增删改查demo

开发工具

Visual Studio Code

一款前端开发工具

  1. 下载地址:https://code.visualstudio.com/
  2. 安装教程:https://blog.csdn.net/weixin_37590454/article/details/89436577
  3. 使用教程(搭建一个Vue项目):
    (1)在安装好Vscode、nodejs的前提下,全局安装。如下图:
    在这里插入图片描述终端–新建终端–输入命令 npm install -g vue-cli

(2)安装webpack。如下图:
在这里插入图片描述终端–输入命令 npm install -g webpack

(3)新建项目。如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
首先使用cd命令切换到所需文件夹目录–其次输入 vue init webpack 项目名–最后一个vue项目就新建好啦

(4)运行项目并在浏览器中访问。如下图:
在这里插入图片描述
在这里插入图片描述
输入命令 ‘npm run dev’启动项目–在浏览器中输入网址 http://localhost:8080/

Idea

Navicat

demo

前端

index.vue


<template>
  <el-row v-loading='loading'>
   
    <History :bussObject='curentRow' ></History>
    
    <companyRecord-form ref='companyRecordForm' :permission='permission' v-on:save-finished='getCompanyRecordList()'></companyRecord-form>
    <el-col :span='24'>
      
      <el-container class='query-form-container'>
        <el-main>
          <el-row v-if='!moreCodition' class='search-row'>
            <el-form :model='queryModel' @submit.native.prevent :inline='true' label-width='100px' ref='queryForm' :inline-message='true'>
                  <el-form-item label='公司名称' prop='company_name'>
                <el-input v-model='queryModel.company_name' :clearable='true' placeholder='请输入公司名'></el-input>
              </el-form-item>
              <el-button type='primary' icon='el-icon-search' @click='onSearch()' :plain='true'>搜索</el-button>
              <el-button type='primary' icon='el-icon-circle-plus' :plain='true' @click='onCreateCompanyRecord()'>添加</el-button>
            </el-form>
          </el-row>
          <QueryForm v-else v-model='moreParm' :tableId='tableId' :schemeId='schemeId'  :routerId='$route.meta.routerId' @search='onSearch()' @moreCodition='onMoreCodition()'></QueryForm>
        </el-main>
      </el-container>
  
      <el-container class="data-container">
        <el-main>
     
      <el-row>
        <el-col :span='24'>
          <div @mouseleave='moveTableOutside'>
            <el-table class='drag_table' :data='companyRecordList' border @sort-change='onSortChange' @header-dragend='onChangeWidth' :cell-class-name='cellClassName' :header-cell-class-name='headerCellClassName' highlight-current-row>
              <el-table-column v-for="(c, index) in columnViews" v-if='c.display' :prop='c.prop' :key="`columnViews_${index}`" :label='c.label' :align='c.align' :min-width='c.miniWidth+"px"' :width='c.width+"px"' header-align='center' :column-key='index.toString()' :render-header="renderHeader">
                <template slot-scope='{row,$index}'>
                  <span v-if='columnViews[index].showType == "Switch" || columnViews[index].showType == "Checkbox" || columnViews[index].showType == "Radio"'>
                    <li v-if='getAttrValue(row, columnViews[index].prop) == "1"' class='el-icon-check' style='color:#F56C6C;'></li>
                  </span>
                  <span v-else>{{ getAttrValue(row, columnViews[index].prop, columnViews[index].javaType)}}</span>
                </template>
              </el-table-column>
            
              <el-table-column label='操作' header-align='center' :width='oprColumnWidth + "px"' fixed='right'>
                <template slot='header' slot-scope="scope">
                  <span>操作</span>
                  <view-columns-select v-model='columnViews' v-on:save-column-view='saveColumn' v-on:show-all-column='showAllColumn' v-on:show-default-column='showDefaultColumn'></view-columns-select>
                  <export-excel-button v-show='permission.export' :data='companyRecordList' :tHeader='getHeads()' :filterVal='getFilterVal()' :plain='true'></export-excel-button>
                </template>
                 <template slot-scope='scope'>
                  <OperationIcon v-show='permission.view' type='info' content='查看' placement='top-start' icon-name='el-icon-view'
                    @click='onViewCompanyRecord(scope.$index, scope.row)'></OperationIcon>
                  <OperationIcon v-show='permission.edit' type='primary' content='编辑' placement='top-start' icon-name='el-icon-edit'
                    @click='onEditCompanyRecord(scope.$index, scope.row)'></OperationIcon>
                  <OperationIcon v-show='permission.remove' type='danger' content='删除' placement='top-start' icon-name='el-icon-delete'
                    @click='onDeleteCompanyRecord(scope.$index, scope.row)'></OperationIcon>
                </template> 
              </el-table-column>
            </el-table>
    	  </div>
        </el-col>
      </el-row>
    
      <el-row>
        <el-col :span='24'>
          <el-pagination
            background
            @size-change='onSizeChange'
            @current-change='onCurrentChange'
            :current-page.sync='currentPage'
            :page-sizes='[10, 20, 50, 100, companyRecordTotal]'
            :page-size='10'
            layout='total, sizes, prev, pager, next, jumper'
            :total='companyRecordTotal'>
          </el-pagination>
        </el-col>
      </el-row>
             	</el-main>
      </el-container>
    </el-col>
  </el-row>
</template>

<script>

import FileSaver from 'file-saver'
import { validatenull } from '@/utils/validate'
import {  listCompanyRecordPage,getCompanyRecordById,deleteCompanyRecord  } from '@/api/sys/companyRecord'
import { listResourcePermission } from '@/api/admin/common/permission'
import ExportExcelButton from '@/components/ExportExcelButton'
import ViewColumnsSelect from '@/views/components/ViewColumnsSelect'
import QueryForm from '@/views/components/queryForm'
import MainUI from '@/views/components/mainUI'
import OperationIcon from '@/components/OperationIcon'
import History from '@/views/components/history'
import CompanyRecordForm from './companyRecord.vue'
export default {
  extends: MainUI,
  components: {
    CompanyRecordForm,
    ExportExcelButton,
    ViewColumnsSelect,
    QueryForm,
    OperationIcon,
    History
  },
  data() {
    return {
      permission: {
        view: false,
        add: false,
        edit: false,
        remove: false,
        export: false
      },
      queryTypes: {
        'company_name': 'like',
      },
      queryModel: {
        'company_name': '',   // 公司名称
      },
      search: {
        params: [],
        offset: 0,
        limit: 10,
        orderby: ''
      },
      currentPage: 1,
      companyRecordTotal: 0,
      companyRecordList: [],


      oprColumnWidth: 165,  // 操作列宽
      tableId: '693832141103833210',
      schemeId: '6003'
    }
  },
  methods: {
    checkFile() {
      document.querySelector('#fileinput').click()
    },

    ImportJson(row) {
      this.setLoad()
      importCompanyRecord(row).then(responseData => {
        if(responseData.code == 100) {
          this.$message({
            message: '导入成功',
            type: 'info'
          });
          this.getCompanyRecordList()
        } else {
          this.showMessage(responseData)
        }
        this.resetLoad()
      }).catch(error => {
        this.outputError(error)
      })

    },

    getCompanyRecordList() {
      this.setLoad()
      /* 查询参数 和数据权限 */
      this.search.params = []
      if(this.moreCodition) {
        this.search.params = this.search.params.concat(this.compositeCondition())
      }else{
        // 查询参数: 公司名称
        this.search.params.push({
      	  columnName: 'company_name',
      	  queryType: 'like',
          value: this.queryModel.company_name
        })
      }
 
      this.pushDataPermissions(this.search.params, this.$route.meta.routerId, this.tableId)
      listCompanyRecordPage(this.search).then(responseData => {
        if(responseData.code == 100) {
          this.companyRecordTotal = responseData.data.total
          this.companyRecordList = responseData.data.rows
        } else {
          this.showMessage(responseData)
        }
        this.resetLoad()
      }).catch(error => {
        this.outputError(error)
      })
    },
    onSearch() {
      if(this.moreCodition) {
        this.search.offset = 0
        this.currentPage = 1
        this.getCompanyRecordList()
      } else {
        this.$refs['queryForm'].validate(valid => {
          if (valid) {
            this.search.offset = 0
            this.currentPage = 1
            this.getCompanyRecordList()
          } else {
            return false
          }
        })
      }
    },
    onSizeChange(val) {
      this.search.limit = val;
      this.search.offset = (this.currentPage - 1) * val
      this.getCompanyRecordList()
    },
    onCurrentChange(val) {
      this.search.offset = (val - 1) * this.search.limit
      this.currentPage = val
      this.getCompanyRecordList()
    },
    async pageInit() {
      this.setLoad()
      try {
        this.initOptions(this.queryModel)
        this.search.params = []
        this.pushDataPermissions(this.search.params, this.$route.meta.routerId, this.tableId)
        let [listCompanyRecordRespData, listPermissionRespData] = await Promise.all([
          listCompanyRecordPage(this.search),
          listResourcePermission(this.$route.meta.routerId)
        ])
        if(listCompanyRecordRespData.code == 100 && listPermissionRespData.code == 100) {
          this.companyRecordTotal = listCompanyRecordRespData.data.total
          this.companyRecordList = listCompanyRecordRespData.data.rows
          this.permission.view = listPermissionRespData.data.find(item => {
            return item.permission === 'companyRecord:read'
          })
          this.permission.export = listPermissionRespData.data.find(item => {
            return item.permission === 'companyRecord:export'
          })
          this.permission.add = listPermissionRespData.data.find(item => {
            return item.permission === 'companyRecord:create'
          })
          this.permission.edit = listPermissionRespData.data.find(item => {
            return item.permission === 'companyRecord:update'
          })
          this.permission.remove = listPermissionRespData.data.find(item => {
            return item.permission === 'companyRecord:delete'
          })
        } else {
          this.showMessage(listPermissionRespData.code != 100 ? listPermissionRespData : listCompanyRecordRespData)
        }
        this.resetLoad()
      } catch(error) {
        this.outputError(error)
      }
    },
    onViewCompanyRecord(index, row) {
      this.setLoad()
      getCompanyRecordById(row.id).then(responseData => {
        if(responseData.code == 100) {
          this.$refs.companyRecordForm.$emit('openViewCompanyRecordDialog', responseData.data)
        } else {
          this.showMessage(responseData)
        }
        this.resetLoad()
      }).catch(error => {
        this.outputError(error)
      })
    },
    onCreateCompanyRecord() {
      this.$refs.companyRecordForm.$emit('openAddCompanyRecordDialog')
    },
    onEditCompanyRecord(index, row) {
      this.setLoad()
      getCompanyRecordById(row.id).then(responseData => {
        if(responseData.code == 100) {
          this.$refs.companyRecordForm.$emit('openEditCompanyRecordDialog', responseData.data)
        }else{
          this.showMessage(responseData)
        }
        this.resetLoad()
      }).catch(error => {
        this.outputError(error)
      })
    },
    onCopyCompanyRecord(index, row) {
      this.setLoad()
      getCompanyRecordById(row.id).then(responseData => {
        if(responseData.code == 100) {
          this.$refs.companyRecordForm.$emit('openCopCompanyRecordDialog', responseData.data)
        } else {
          this.showMessage(responseData)
        }
        this.resetLoad()
      }).catch(error => {
        this.outputError(error)
      })
    },
    onDeleteCompanyRecord(index, row) {
      this.$confirm('确定删除吗?', '确认', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.setLoad()
        deleteCompanyRecord(row).then(responseData => {
          if(responseData.code == 100) {
            this.getCompanyRecordList()
            this.showMessage({type: 'success', msg: '删除成功'})
          } else {
            this.showMessage(responseData)
          }
          this.resetLoad()
        }).catch(error => {
          this.outputError(error)
        })
      }).catch(() => {})
    },
    onSortChange( orderby ) {
      if(validatenull(orderby.prop)) {
        this.search.orderby = ''
      } else  {
        this.search.orderby = orderby.prop + (orderby.order === 'descending' ? ' desc' : ' asc')
      }

      this.getCompanyRecordList()
    },
    onExportExcel(index, row) {
      this.setLoad()
      getCompanyRecordById(row.id).then(responseData => {
        if(responseData.code == 100) {
          const data = JSON.stringify(responseData.data)
          const blob = new Blob([data], {type: ''})
          FileSaver.saveAs(blob, 'dictType.json')
        } else {
          this.showMessage(responseData)
        }
        this.resetLoad()
      }).catch(error => {
        this.outputError(error)
      })
    },
    initOptions(This) {
    }
  },
  watch: {
  },
  mounted() {
    this.pageInit()
  }
}
</script>




companyRecord.vue

<template>
  <el-dialog :title='dialogProps.title' :visible.sync='dialogProps.visible' :close-on-click-modal='false' width='30%' 
    @open='onDialogOpen()' v-loading='loading'>
    <div slot='title' class='dialog-header'>
      {{ dialogProps.title }}
      <OperationIcon v-show='dialogProps.action == "view" && permission.edit' type='primary' text='编辑' placement='top-start' icon-name='el-icon-edit' @click='switchEdit'></OperationIcon>
    </div>

    <el-form :model='bizFormModel' :rules='formRules' 
      ref='companyRecordForm' label-width='120px' label-position='right' class='edit-form'>
      <div class="tab-item" v-show='tabIndex=="1"'>
        <!-- 添加按钮弹窗-->
              <el-row>
        <el-col :span='24/1'>
          <el-form-item label='公司编码' prop='companyCode'>
            <el-input :disabled='dialogProps.action == "view"' v-model='bizFormModel.companyCode' :maxlength='64' :placeholder='dialogProps.action == "view"? "" : "请输入公司编码"' autofocus></el-input>
          </el-form-item>
        </el-col>
      </el-row>
              <el-row>
        <el-col :span='24/1'>
          <el-form-item label='公司名称' prop='companyName'>
            <el-input :disabled='dialogProps.action == "view"' v-model='bizFormModel.companyName' :maxlength='128' :placeholder='dialogProps.action == "view"? "" : "请输入公司名"' ></el-input>
          </el-form-item>
        </el-col>
        <el-col :span='24/1'>
          <el-form-item label="备注" prop="remarks">
            <el-input :disabled='dialogProps.action=="view"' v-model="bizFormModel.remarks" :maxlength="255"></el-input>
          </el-form-item>        
        </el-col>
      </el-row>
        <!-- 主表单  结束-->

      </div>
    </el-form>

    <!-- 按钮  开始-->
    <span slot='footer' class='dialog-footer'>
      <el-button v-if='dialogProps.action != "view"' type='primary' :plain='true' @click='onSubmit("companyRecordForm")'>保 存</el-button>
      <el-button v-if='dialogProps.action != "view"' :plain='true' @click='onDialogClose()'>取 消</el-button>
      <el-button v-if='dialogProps.action == "view"' :plain='true' @click='onDialogClose()'>关 闭</el-button>
    </span>
    <!-- 按钮 结束-->
  </el-dialog>
</template>

<script>
import { mapGetters } from 'vuex'
import { validatenull } from '@/utils/validate'
import { saveCompanyRecord } from '@/api/sys/companyRecord'
import BaseUI from '@/views/components/baseUI'
import OperationIcon from '@/components/OperationIcon'

export default {
  extends: BaseUI,
  name: 'companyRecord-form',
  components: {
    OperationIcon
  },
  data() {
    return {
      bizFormModel: this.initFormModel(),
      tabIndex: '1',
       dialogProps: {
        visible: false,
        action: '',
        title: ''
      },
      formRules: {
        // 主表验证
        'companyCode': [
            { required: true, message: '请输入公司编码', trigger: 'blur' }
        ],
        'companyName': [
            { required: true, message: '请输入公司名', trigger: 'blur' }
        ]
      }
    }
  },
  props: {
    // 权限
    permission: {
      type: Object
    }
  },
  computed: {
    ...mapGetters(["settings"]),
    tabOptionBtnTop() {
      let top
      switch (this.settings.size) {
        case 'medium':
          top = -46 + 'px'
              break;
        case 'small':
          top = -42 + 'px'
              break;
        case 'mini':
          top = -38 + 'px'
              break;
        default:
          top = -50 + 'px'
      }
      return top
    }
  },
  methods: {
    onSubmit(formName) {
      this.$refs[formName].validate((valid, object) => {
        if (valid) {
          this.doSave()
        } else {
          // 处理校验定位
          let arr = []
          let numArr = []
          for (let i in object) {
            let dom = this.$refs[i]
            if (!dom) {
              this.tabIndex = 1
              return
            } else {
              arr.push(dom)
              if (Object.prototype.toString.call(arr) !== '[object Object]') {
                arr.forEach(item => {
                  numArr.push(item.$el.dataset.num)
                })
                this.tabIndex = Math.min(...numArr)
              }
            }
          }

          return false
        }
      });
    },
    doSave() {
      this.setLoad()
      saveCompanyRecord(this.bizFormModel).then(responseData => {
        if(responseData.code == 100) {
          this.dialogProps.visible = false
          this.$emit('save-finished')
        } else {
          this.showMessage(responseData)
        }
        this.resetLoad()
      }).catch(error => {
        this.outputError(error)
      })
    },
    onAddDictItemRow(tableData) {
        tableData.push({
            'companyRecord': {
              'companyCode': validatenull(parent) || validatenull(parent.companyRecord) ? null : parent.companyRecord.companyCode,
              'companyName': validatenull(parent) || validatenull(parent.companyRecord) ? null : parent.companyRecord.companyName,
              'remarks': validatenull(parent) || validatenull(parent.companyRecord)? null : parent.companyRecord.remarks
            }
        })
    },
    onDeleteRow(index, tableData) {
        tableData.splice(index, 1)
    },
    switchEdit() {
      this.dialogProps.action = 'edit'
      this.dialogProps.title = '修改公司信息'
      this.initOptions(this.bizFormModel)
    },
    onDialogClose() {
      this.dialogProps.visible = false  
    },
    onDialogOpen() {
      this.$nextTick(() => {
        this.$refs['companyRecordForm'].clearValidate()
      })
    },
    initFormModel(This) {
      return {
        'companyCode': '',   // 公司编码
        'companyName': '', // 公司名称
        'remarks': '' //备注
      }
    },
    initOptions() {
      // 主表
      let This = this.bizFormModel

      // 子表  字典项
      This = this.dictItemCurrentRow
    }
  },
  watch: {
  },
  mounted: function() {
    this.$nextTick(() => {
      this.$on('openViewCompanyRecordDialog', function(companyRecord) {
        this.dialogProps.action = 'view'
        this.dialogProps.title = '查看公司信息'
        this.bizFormModel = companyRecord
        this.initOptions(this.bizFormModel)
        this.tabIndex = '1'
        this.dialogProps.visible = true
      })
      this.$on('openEditCompanyRecordDialog', function(companyRecord) {
        this.dialogProps.action = 'edit'
        this.dialogProps.title = '修改公司信息'
        this.bizFormModel = companyRecord
        this.initOptions(this.bizFormModel)
        this.tabIndex = '1'
        this.dialogProps.visible = true
      })
      this.$on('openAddCompanyRecordDialog', function() {
        this.dialogProps.action = 'add'
        this.dialogProps.title = '添加公司信息'
        this.bizFormModel = this.initFormModel()
        this.initOptions(this.bizFormModel)
        this.tabIndex = '1'
        this.dialogProps.visible = true
      })
    })
  }  
}
</script>
<style lang="scss" scoped>
  .tab-item {
    position: relative;
    .tab-option {
      position: absolute;
      top: -46px;
      right: 0;
    }
  }
</style>

companyRecord.js

import request from '@/utils/request'

export const listCompanyRecordAll = (search) =>
    request({
        url: '/sys/companyRecord/queryAll',
        method: 'post',
        data: search
    })


export const saveCompanyRecord = (companyRecord) => 
    request({
        url: '/sys/companyRecord/save',
        method: 'post',
        data: companyRecord
    })

export const listCompanyRecordPage = (search) =>
    request({
        url:'/sys/companyRecord/list',
        method:'post',
        data:search
    })

export const deleteCompanyRecord = (companyRecord) =>
    request({
        url: '/sys/companyRecord/remove',
        method: 'post',
        data: companyRecord
    })

export const getCompanyRecordById = (id) =>
    request({
        url:'/sys/companyRecord/'+id,
        method: 'get'
    })

效果图。如下图:
在这里插入图片描述

后台

controller层

package com.geeke.sys.controller;

import com.alibaba.fastjson.JSONObject;
import com.geeke.common.controller.SearchParams;
import com.geeke.common.data.Page;
import com.geeke.sys.entity.CompanyRecord;
import com.geeke.sys.service.CompanyRecordService;
import com.geeke.utils.ResultUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping(value = "/sys/companyRecord")
public class CompanyRecordController extends BaseController{

    @Autowired
    private CompanyRecordService companyRecordService;

    /**
     * 新增公司信息
     */
    @PostMapping(value = "/save")
    public ResponseEntity<JSONObject> save(@RequestBody CompanyRecord company){
        String id = companyRecordService.save(company).getId();
        return ResponseEntity.ok(ResultUtil.successJson(id));
    }

    /**
     * 删除公司信息
     */
    @PostMapping(value = "/remove")
    public ResponseEntity<JSONObject> remove(@RequestBody CompanyRecord company){
        int rows = companyRecordService.delete(company);
        return ResponseEntity.ok(ResultUtil.successJson(rows));
    }

    /**
     * 修改公司信息
     */
    @PostMapping(value = "/modify")
    public ResponseEntity<Boolean> modify(@RequestBody CompanyRecord company){
        return ResponseEntity.ok(companyRecordService.modify(company));
    }

    /**
     * 查询公司信息
     */
    @PostMapping(value = "queryAll")
    public ResponseEntity<JSONObject> queryAll(@RequestBody SearchParams searchParams){
        return ResponseEntity.ok(ResultUtil.successJson(companyRecordService.queryAll(searchParams.getParams(), searchParams.getOrderby())));
    }

    @PostMapping(value = {"list", ""})
    public ResponseEntity<JSONObject> listPage(@RequestBody SearchParams searchParams) {
        Page<CompanyRecord> result = companyRecordService.listPage(searchParams.getParams(), searchParams.getOffset(), searchParams.getLimit(), searchParams.getOrderby());
        return ResponseEntity.ok(ResultUtil.successJson(result));
    }

    /**
     * 根据公司编码查询公司信息
     *
     * @param companyCode 公司编码
     * @return ResponseEntity<JSONObject> 公司信息
     */
    @GetMapping("/{id}")
    public ResponseEntity<JSONObject> getById(@PathVariable("id") String companyCode) {
        CompanyRecord entity = companyRecordService.get(companyCode);
        return ResponseEntity.ok(ResultUtil.successJson(entity));
    }
}

service层

package com.geeke.sys.service;

import com.geeke.common.data.Page;
import com.geeke.common.data.PageRequest;
import com.geeke.common.data.Parameter;
import com.geeke.common.service.CrudService;
import com.geeke.sys.dao.CompanyRecordDao;
import com.geeke.sys.entity.CompanyRecord;
import com.google.common.collect.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional(readOnly = true)
public class CompanyRecordService  extends CrudService<CompanyRecordDao, CompanyRecord> {

    @Autowired
    private CompanyRecordDao companyRecordDao;

    public Boolean insert(CompanyRecord company) {
        int count=companyRecordDao.insert(company);
        if (count>0){
            return true;
        }
        return false;
    }

    public Boolean remove(CompanyRecord company) {
        int count=companyRecordDao.delete(company);
        if (count>0){
            return true;
        }
        return false;
    }

    public Boolean modify(CompanyRecord company) {
        int count=companyRecordDao.update(company);
        if (count>0){
            return true;
        }
        return false;
    }

    public List<CompanyRecord> queryAll(List<Parameter> parameters, String orderby) {
        return companyRecordDao.listAll(new PageRequest(parameters, orderby));
    }

    public Page<CompanyRecord> listPage(List<Parameter> params, int offset, int limit, String orderby) {
        PageRequest pageRequest = new PageRequest(offset, limit, params, orderby);
        int total = companyRecordDao.count(pageRequest);
        List list = null;
        if(total > 0) {
            list = companyRecordDao.listPage(pageRequest);
        }
        return new Page(total, list);
    }

    @Override
    public CompanyRecord get(String id) {
        CompanyRecord action = super.get(id);

        List<Parameter> params = null;
        PageRequest pageRequest;
        params = Lists.newArrayList();
        params.add(new Parameter("id", "=", action.getId()));
        pageRequest = new PageRequest(params);
        action.setCompanyRecordList(actionRecycleDao.listAll(pageRequest));
        return action;
    }
}

dao层

package com.geeke.sys.dao;

import com.geeke.common.persistence.CrudDao;
import com.geeke.sys.entity.CompanyRecord;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface CompanyRecordDao  extends CrudDao<CompanyRecord>{

}

CrudDao.java


package com.geeke.common.persistence;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.geeke.common.data.PageRequest;

/**
 * DAO支持类实现
 * @author lys
 * @version 2014-05-16
 * @param <T>
 */
public interface CrudDao<T> extends BaseDao {

	/**
	 * 获取单条数据
	 * @param id
	 * @return
	 */
	public T get(String id);
	
	
	/**
	 * 查询数据条数(用在分页查询)
	 * @param pageRequest
	 * @return
	 */
	public int count(PageRequest pageRequest);
	
	/**
	 * 分页查询数据列表
	 * @param pageRequest
	 * @return
	 */
	public List<T> listPage(PageRequest pageRequest);
	
	/**
	 * 查询所有数据列表
	 * @param parameters
	 * @return
	 */
	public List<T> listAll(PageRequest pageRequest);
	
	
	/**
	 * 插入数据
	 * @param entity
	 * @return
	 */
	public int insert(T entity);
	
	/**
	 * 更新数据
	 * @param entity
	 * @return
	 */
	public int update(T entity);
	
	/**
	 * 有删除字段时,一般为逻辑删除,更新del_flag字段为1;否则物理删除
	 * @param entity
	 * @see public int delete(T entity)
	 * @return
	 */
	
	public int delete(T entity);
	
	/**
	 * 批量增加
	 * @param entitys
	 * @return
	 */
	public int bulkInsert(@Param("entitys")List<T> entitys);
	
	/**
	 * 批量修改
	 * @param entitys
	 * @return
	 */
	public int bulkUpdate(@Param("entitys")List<T> entitys);
	
	/**
	 * 批量删除
	 * @param entitys
	 * @return
	 */
	public int bulkDelete(@Param("entitys")List<T> entitys);
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VSCode+Idea 一个增删改查demo 的相关文章

  • 如何同时模拟Pinia和vue-i18n?

    我正在使用 Vue 3 的 Composition API 如下所示 store ts import ref Ref from vue import defineStore from pinia export const useStore
  • 如何强制maven更新本地repo

    我在一个项目中编译了一个 jar 文件 以便可以在第二个项目中使用它 我可以在 m2 文件夹中看到 jar 文件 但在第二个项目中 它抱怨找不到工件 我想我必须强制 Maven 更新索引 缓存一些东西 但不知道到底是什么 任何提示 谢谢 更
  • IntelliJ 11.1.3 中的“应用程序服务器”选项卡在哪里

    与以前的版本一样 在 IDE 设置中找不到应用程序服务器选项卡 我正在使用 11 1 3 Ultimate 它就在那里 也许你缺少一些插件 If you still can t find it hit Ctrl Shift A Enter
  • Nuxt.js 多个资源的根路由和根级 slugs

    我正在使用 Nuxt 构建一个电子商务前端 我希望为尽可能多的资源提供根级 slugs 最重要的是目录路径和产品 URL 一个明显的方法是使用 Nuxt 文件结构进行路由创建 com category men Tshirt com cate
  • vue如何检测页面是否刷新?

    我尝试这样 created window addEventListener beforeunload function event event returnValue Write something this router push 像这样
  • 如何将 Jitsi Meet 添加到 Vuejs

    我已在 public html 的正文中加载了 jitsi meet 脚本 并且我有一个组件 如下所示
  • 从组件传递数据

    我对 Vue 相当陌生 我正在尝试将数据从组件传递到视图 我不确定我是否在使用props正确的 我有一个对话框 当我保存时 我想将数据插入数据库 我也想重复使用addCustomer function 这就是为什么我没有将该函数放置在组件中
  • 在 Vue.js 中隐藏 div onclick

    以下 jQuery 的 Vue js 等价物是什么 btn click function hideMe hide jQuery 开箱即用 而 Vue js 则不然 要初始化 Vue js 组件或应用程序 您必须将该组件及其数据绑定到模板内的
  • Intellij - 调试器断点不再工作

    我正在正常工作 调试Java Maven项目与IntelliJ 2018 2 1 然后我单击 Intellij 停止应用程序以对代码进行一些修改 当我在调试模式下再次启动应用程序时 它 调试器 只是停止工作 现在 应用程序需要大约 10 2
  • 错误:[vuex] 期望 string 作为类型,但发现未定义

    学习Vuex 我写了一个简单的登录页面示例项目 https github com vuejs vuex tree dev examples shopping cart和document https vuex vuejs org zh gui
  • 左侧导航菜单上部隐藏

    当滚动到页面最底部时 左侧导航菜单的顶部将被隐藏 The image before scrolling is shown below 滚动后的效果如下图 我不确定此问题的确切原因 因此我将不胜感激任何有关识别和解决该问题的建议或帮助 为了确
  • 将 CKEditor 5 与 nuxtjs 结合使用

    我正在尝试在我的 Nuxtjs 项目中导入 CKEditor 5 的自定义版本 并且我已经尝试了所有可能的方法来正确导入它 但没有一个对我有用 这是其中之一 let ClassicEditor let CKEditor if process
  • 分页在服务器端好还是前端好? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在构建 Laravel Vue 应用程序 我想知道在后端使用分页还是在前端使用分页更好 我认为最好在每页发送尽可能少的数据的请求 但我想听听
  • (thread_id_key != 0x7777),函数 find_thread_id_key,文件 ../src/coroutine.cc,第 134 行

    我正在开发一个vue程序 我尝试过npm run serve 然后我得到了这个 66 building 670 715 modules 45 active Users bytedance go src code byted org ad o
  • 可排序不拖动 safari 中表格的所有列

    我有一个vue引导表 https bootstrap vue org docs components table使用 v 槽为每个单元使用自定义模板 所有这些单元格都是自定义组件 我希望该表的行可以排序 也就是说 我希望用户能够拖放该表中的
  • 如何解决【Vue warn】:使用数组语法时 props 必须是字符串?

    我的看法是这样的 div class col md 8 div
  • 如何将本机库链接到 IntelliJ 中的 jar?

    我正在尝试在 IntelliJ 中设置 OpenCV 但是我一直在弄清楚如何告诉 IntelliJ 在哪里可以找到本机库位置 在 Eclipse 中 添加 jar 后 您可以在 Build Config 屏幕中设置 Native 库的位置
  • Spring应用中Eureka健康检查的问题

    我正在开发一个基于 Spring 的应用程序 其中包含多个微服务 我的一个微服务充当尤里卡服务器 到目前为止一切正常 在我所有其他微服务中 用 EnableEurekaClient 我想启用这样的健康检查 应用程序 yml eureka c
  • 简单的 Vue.js 计算属性说明

    我对 Vue js 并不陌生 但我会再次浏览文档 试图找出我第一次错过的任何内容 我在以下地方看到了这个声明使用计算属性的基本示例部分 https v2 vuejs org v2 guide computed html Basic Exam
  • 如何将vue组件插入到contenteditable div中

    我想用 vue 创建简单的所见即所得编辑器 我发现只有一个在 vue js 上创建的真正的所见即所得编辑器 这里是 https quasar dev vue components editor 但我没有发现有插入图像的能力 其他 vue w

随机推荐

  • 重学java笔记「一」

    1 关于程序入口 所有的Java 程序由public static void main String args 方法开始执行 2 java支持的变量类型 2 1类变量 静态变量 独立于方法之外的变量 用 static 修饰 无论一个类创建了
  • jmeter简介

    性能测试 性能测试是什么 就是说基于协议模拟用户的发出请求 对服务器进行一定的负载 来测试服务器的性能指标是否满足要求性能指标关注点 时间性能 空间性能 性能测试与页面无关 性能测试工具 HP LoadRunner Apache AB Ap
  • MMDrawerController 与 StoryBoard 构建和谐抽屉效果

    纠结了一天都不知道怎么在storyboard中用MMDrawerController 看了下MMDrawerController Storyboard版本的库也不知道怎么用 网上搜了下 发现了个好方法 参考 http www wenzizo
  • 2017年、2019年全国大学生电子设计竞赛综合测评——常用电路Multisim仿真——方波、三角波振荡电路

    相关原创博客 2017年综合测评仿真电路讲解 题目和结果链接 常用电路Multisim仿真 方波 三角波振荡电路 常用电路Multisim仿真 有源低通滤波器设计 常用电路Multisim仿真 数字芯片74LS74构建分频器设计 常用电路M
  • Couch的MapReduce查询

    1 MapReduce介绍 传统的关系型数据库中 只要你的数据是结构化的 你可以进行任何类型的查询 Apache Couch与此相反 它使用MapReduce 预定义的map和的reduce方法 进行查询 这种查询方式具有更好的灵活性 因为
  • laravel-admin安装

    前言 Laravel Admin 是一个国产项目 作者是 song Laravel Admin 整合了 AdminLTE 内置了权限管理 还可以快速的创建数据表格和表单 更棒的是它是开源的 所以现在有很多人选择使用它来搭建管理后台 官网是h
  • jeecgboot 基础说明

    参考地址 1 主页面 路径 public index html 解释 配置登录页的title 和登录加载过程出现的文字 2 前端页面整体布局 路径 src components page GlobalLayout vue 解释 页面的菜单
  • Apache+SVN+Review Board代码审核服务器搭建流程

    Apache SVN Review Board代码审核服务器搭建流程 本博文基于原创 四京 https blog 51cto com 12676522 1929856 utm source oschina app 更新修改 一 简介 代码审
  • 【每日一题】ABC194E-Mex Min

    题目内容 原题链接 给定一个长度为 n n n 的整数数组 a a a 求所有长度为 m m
  • 腾讯云服务器带宽计费模式按流量内网、外网出入流量计算说明

    腾讯云服务器公网带宽计费模式按使用流量计费 云服务器对内或对外产生的流量如何计算 云服务器出方向 下行流量 和入方向 上行流量 怎么计算 腾讯云百科来详细说下腾讯云服务器按使用流量计算说明 腾讯云服务器带宽计费模式按使用流量 同一私有网络内
  • for in 和 for of 有什么区别

    for in和for of是两种用于遍历数据结构的循环语句 它们在用法和功能上有一些区别 for in循环 for in循环用于遍历对象的可枚举属性 在循环中 变量代表当前遍历到的属性名 字符串类型 循环会遍历对象的自身属性以及继承的属性
  • LeetCode解析------218.天际线问题-树状数组

    题目 城市的天际线是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓 现在 假设您获得了城市风光照片 图A 上显示的所有建筑物的位置和高度 请编写一个程序以输出由这些建筑物形成的天际线 图B 每个建筑物的几何信息用三元组 Li Ri Hi
  • 由相位噪声曲线计算积分相噪和Jitter的方法

    先放一张忘了从哪扒下来的图 基本思路 分段求积分相噪 相加得整体的积分相噪 进而得到以弧度为单位的相位抖动 最终转换为以时间为单位的Jitter MATLAB代码 function ph2jt fc f ph ph2jt fc f ph f
  • Android 实现计时器功能

    最近有个项目要实现记录时间推进的功能 之前百度了下 发现了android自带控件 Chronometer 可以实现这个功能 详见之前写的博客 http blog csdn net qq 21793463 article details 49
  • Android 系统设置中显示设置之休眠和屏保设置篇

    1 休眠设置 首先我们来看一下休眠设置在界面中的定义 1
  • 32_杂项

    文章目录 TLS TLS 安全密码套件 证书 TLS通讯过程 open file cache TLS TLS 安全密码套件 密钥交换 ecdhe ECDH椭圆曲线交换 身份验证 RSA 对称加密 aes 128 gcm 摘要算法 sha25
  • SpringMVC-复杂参数处理

    1 实体类 package com hwy entity public class Role private Integer id private String name public Integer getId return id pub
  • 程序员必须知道的10个搜索技巧

    转载地址 http www cnblogs com shown p 6524342 html 1 准确搜索 在关键词上加上双引号 2 排除关键词 用减号 eg 在搜索 Joe Bloggs jeans 时 你所得到的结果反馈是不包含 jea
  • vue3项目装包报错 npm ERR! 404 Not Found - GET https://registry.npmjs.org/@vue%2fvue-loader-v15 - Not found

    npm ERR code E404 npm ERR 404 Not Found GET https registry npmjs org vue 2fvue loader v15 Not found npm ERR 404 npm ERR
  • VSCode+Idea 一个增删改查demo

    一个简单的增删改查demo 开发工具 Visual Studio Code Idea Navicat demo 前端 后台 开发工具 Visual Studio Code 一款前端开发工具 下载地址 https code visualstu