zoukankan      html  css  js  c++  java
  • CAT XQX ---- 增删改查架构说明 1

    View 层  --  以国家为例

    1. 显示 数据库的 table

    页面效果

    对应代码:

     1      <table id="dg" title="国家信息" class="easyui-datagrid" style="100%;height:0px"
     2             toolbar="#toolbar" fitColumns="true" sortName="CODE" sortOrder="asc"
     3             data-options="rownumbers:true,singleSelect:true,pagination:true,pageSize:10"
     4             >
     5           <thead>
     6               <tr>
     7                   <th field="CODE" width="50" sortable="true">国家编码</th>
     8                   <th field="NAME_ZH" width="50">中文简称</th>
     9                   <th field="NAME_ZH_FULL" width="50">中文全称</th>
    10                   <th field="NAME_EN" width="50">英文简称</th>
    11                   <th field="NAME_EN_FULL" width="50">英文全称</th>
    12                   <th field="REMARK" width="50">备注</th>
    13               </tr>
    14           </thead>
    15       </table>

    2. 增删改查条件的添加 

    <div id="toolbar">
              <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-add" plain="true" onclick="newObj()">添加国家</a>
              <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-edit" plain="true" onclick="editObj()">编辑</a>
              <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-remove" plain="true" onclick="deleteObj()">删除</a>
              
               <table class='f-tb' style="auto;">
                  <tr>
                    <td class="no-bd-t">
                      国家编码:
                      <input type="text" class='easyui-validatebox' id="key_code" name="key_code" data-options="prompt:'请输入国家编码'">
                    </td>
                    <td class="no-bd-t">
                      <div class="datagrid-btn-separator"></div>
                    </td>
                    <td class="no-bd-t">
                      中文简称:
                      <input type="text" class='easyui-validatebox'  id="key_name_zh" name="key_name_zh" data-options="prompt:'支持部分查询'">
                    </td>
                    <td class="no-bd-t">
                      <div class="datagrid-btn-separator"></div>
                    </td>
                    <td class="no-bd-t">
                      英文简称:
                      <input type="text" class='easyui-validatebox'  id="key_name_en" name="key_name_en" data-options="prompt:'支持部分查询'">
                    </td>
                    <td class="no-bd-t">
                      <div class="datagrid-btn-separator"></div>
                    </td>
                    <td class="no-bd-t">
                      <a href="javascript:;"  id="search-btn" class="easyui-linkbutton" onclick="searchObj()" iconCls="icon-search" data-options="plain:true">查询</a>
                    </td>
                    <td class="no-bd-t">
                      <div class="datagrid-btn-separator"></div>
                    </td>
                    <td class="no-bd-t">
                      <a href="javascript:;"  id="clear-btn" class="easyui-linkbutton" onclick="clearObj()" iconCls="icon-delete" data-options="plain:true">清空查询条件</a>
                    </td>
                    <td class="no-bd-t">
                      <div class="datagrid-btn-separator"></div>
                    </td>
                  </tr>
                </table>
          </div>
    View Code

    3. 

    添加和修改弹出框的实现

    <div id="dlg" class="easyui-dialog" style="400px;height:350px;padding:10px 20px"
                  closed="true" buttons="#dlg-buttons">
              <div class="ftitle">国家信息</div>
              <form id="fm" method="post" novalidate>
                  <div class="fitem" style="display:none;">
                      <label>国家编码:</label>
                      <input name="ID" class="easyui-textbox" >
                  </div>
                  <div class="fitem">
                      <label>国家编码:</label>
                      <input name="CODE" class="easyui-textbox" required="true">
                  </div>
                  <div class="fitem">
                      <label>中文简称:</label>
                      <input name="NAME_ZH" class="easyui-textbox" required="true">
                  </div>
                  <div class="fitem">
                      <label>中文全称:</label>
                      <input name="NAME_ZH_FULL" class="easyui-textbox" >
                  </div>
                  <div class="fitem">
                      <label>英文简称:</label>
                      <input name="NAME_EN" class="easyui-textbox" required="true">
                  </div>
                  <div class="fitem">
                      <label>英文全称:</label>
                      <input name="NAME_EN_FULL" class="easyui-textbox">
                  </div>
                  <div class="fitem">
                      <label>备注:</label>
                      <input name="REMARK" class="easyui-textbox">
                  </div>
              </form>
          </div>
          <div id="dlg-buttons">
              <a href="javascript:void(0)" class="easyui-linkbutton c6" iconCls="icon-ok" onclick="saveObj()" style="90px">保存</a>
              <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlg').dialog('close')" style="90px">取消</a>
          </div>
    View Code

    4. 

    页面 js 控制代码:

    增删改查的方法已经封装到下面的js 中,页面只需简单调用即可

    <script type="text/javascript" src="/js/common.js"></script>

    <script type="text/javascript">
              var url ;
              function newObj(){
                  url = '/base/country/save';
                  newModel('添加国家',url);
              }
             
              function editObj(){
                  url = '/base/country/update';
                  editModel(url,"ID");
              }
              function saveObj(){
                  saveModel(url);
              }
              function deleteObj(){
                  url = '/base/country/delete';
                  deleteModel(url,"ID");
              }
              function searchObj(){
                  $("#dg").datagrid(
                    {
                        url : "/base/country/search?CODE="+encodeURI($("#key_code").val())+"&NAME_ZH="+encodeURI($("#key_name_zh").val())+"&NAME_EN="+encodeURI($("#key_name_en").val())
                    });  
                  $('#dg').datagrid({loadFilter:pagerFilter}).datagrid('load');  
              }
              function clearObj(){
                  $("#key_code").val('') ;
                  $("#key_name_zh").val('');
                  $("#key_name_en").val('');
              }
    
              $(function(){
                  $('#dg').datagrid({loadFilter:pagerFilter,url:"/base/country/getList"}).datagrid('load');
              });
          </script>
    View Code

    注意上面代码中的 url 一定要先赋值 ,再引用,下面的也一样。因为赋值影响的是下次向后台传递的 url。主要区别在新增 和修改处,感兴趣的同学可以试一下,直接写到方法里面。看看有啥影响。

    5. 查询条件的设置与效果

    function searchObj(){
                  $("#dg").datagrid(
                    {
                        url : "/base/country/search?CODE="+encodeURI($("#key_code").val())+"&NAME_ZH="+encodeURI($("#key_name_zh").val())+"&NAME_EN="+encodeURI($("#key_name_en").val())
                    });  
                  $('#dg').datagrid({loadFilter:pagerFilter}).datagrid('load');  
              }

    说明: 

    • 1.  关键字定义  key_XXXXXX
    • 2.  目前后台传向前台的变量名称均为大写,所以在填充这些地方的 input ,或者表格中需要将 filedName 与后台一致

    二、 router 的定义

     1 var base=require('../../controllers/base/index.js');
     2 // var filters=require('../filters');
     3 
     4 module.exports= function(app){
     5   /*运输任务管理首页*/ 
     6   app.all("/base/country",  base.country.index);
     7   app.all("/base/country/save",  base.country.save);
     8   app.all("/base/country/delete",  base.country.delete);
     9   app.all("/base/country/search",  base.country.getList);
    10   app.all("/base/country/update",  base.country.update);
    11   app.all("/base/country/getList",  base.country.getList);
    12 
    13 }

     我一个模块的 router 都定义在一个文件中方便管理:稍后给出整个项目的文件夹划分

    3. controller 的实现

    controller 中的方法,是在router 中跳转时,使用的

    废话不说上代码

      1 var models = require("../../models");
      2 var utils = require("../../lib/utils");
      3 
      4 // Copyright 2014 www.satanrabbit.com. All Rights Reserved.
      5 /**
      6 * @fileoverview  controller 基础数据 国家信息管理
      7 * @author satanrabbit@qq.com
      8 */
      9 /*==============================================================*/
     10 /* Table: "t_country"                                           */
     11 /*==============================================================*/
     12 /*
     13 drop table "t_country" cascade constraints;
     14 create global temporary table "t_country" 
     15 (
     16    "code"               VARCHAR2(20)         not null,
     17    "name_zh"            varchar2(50)         not null,
     18    "name_zh_full"       VARCHAR2(200),
     19    "name_en"            VARCHAR2(50)         not null,
     20    "name_en_full"       vARCHAR2(200),
     21    "remark"             varchar2(200),
     22    constraint PK_T_COUNTRY primary key ("code")
     23 );
     24 
     25 comment on table "t_country" is
     26 '基础信息维护,国家';
     27 
     28 comment on column "t_country"."code" is
     29 '国家代码,主键';
     30 
     31 comment on column "t_country"."name_zh" is
     32 '国家中文简称';
     33 
     34 comment on column "t_country"."name_zh_full" is
     35 '国家中文全称';
     36 
     37 comment on column "t_country"."name_en" is
     38 '国家英文简称';
     39 
     40 comment on column "t_country"."name_en_full" is
     41 '国家英文全称';
     42 
     43 comment on column "t_country"."remark" is
     44 '备注';
     45 */
     46 
     47 
     48 /**
     49  * 基础数据管理--国家首页
     50  * @param {Object} req request
     51  * @param {Object} res response
     52  */
     53 exports.index=function(req,res){
     54   res.render('base/country/index.ejs');
     55 }
     56 
     57 /**
     58  *  基础数据管理--国家新建
     59  * @param {Object} req request
     60  * @param {Object} res response
     61  */
     62 exports.save=function(req,res){
     63   var country = new Country(req);
     64   // console.log(country);
     65   models.baseCountry.saveCountry(country,function(err){
     66     if(err){
     67       // res.send(err);
     68       utils.sendHJ(res,{result:"fail",msg:"保存失败!"});
     69     }else{
     70       // res.send(err);
     71       utils.sendHJ(res,{result:"success",msg:"保存成功!"});
     72     }
     73   });
     74 }
     75 
     76 /**
     77  *  基础数据管理--国家删除
     78  * @param {Object} req request
     79  * @param {Object} res response
     80  */
     81 exports.delete=function(req,res){
     82   var id = req.param("id");
     83   console.log("-----" + id);
     84   models.baseCountry.deleteCountry(id,function(err,results){
     85     if(err){
     86       // res.send(err);
     87       utils.sendHJ(res,{result:"fail",msg:"删除失败!"});
     88     }else{
     89       // res.send("aha:" + err);
     90       utils.sendHJ(res,{result:"success",msg:"删除成功!"});
     91     }
     92   });
     93 }
     94 
     95 
     96 /**
     97  *  基础数据管理--国家修改
     98  * @param {Object} req request
     99  * @param {Object} res response
    100  */
    101 exports.update=function(req,res){
    102   var country = new Country(req);
    103   console.log(country);
    104   models.baseCountry.updateCountry(country,function(err){
    105     if(err){
    106       // res.send(err);
    107       utils.sendHJ(res,{result:"fail",msg:"保存失败!"});
    108     }else{
    109       // res.send(err);
    110       utils.sendHJ(res,{result:"success",msg:"保存成功!"});
    111     }
    112   });
    113 }
    114 
    115 
    116 
    117 /**
    118  *  基础数据管理--查询所有,以及根据条件进行查询
    119  * @param {Object} req request
    120  * @param {Object} res response
    121  */
    122 exports.getList=function(req,res){
    123   var country = new Country(req);
    124   // console.log(country);
    125 
    126 //page  和 pageSize 暂时没有用处,分页通过前台的js控制
    127   var page=0,pageSize=10,sorter="code",order="desc",type=0;
    128   if(req.param("sorter")&&utils.trim(req.param("sorter"))!=""){
    129     sorter=utils.trim(req.param("sorter"));
    130   }
    131   if(req.param("order")&&utils.trim(req.param("order"))!=""){
    132     order=utils.trim(req.param("order"));
    133   }
    134   //真正的处理查询功能在model 中实现,controller 中只是调用
    135   models.baseCountry.getList(country,page,pageSize,sorter,order,function(err,rows){
    136     if(err){
    137       res.send(500,{error:err});
    138     }else{
    139       var str = JSON.stringify(rows);
    140       //由于尝试 直接查询 条数后 传值出现问题,故在util中新增方法,直接根据json返回条数信息,
    141       var total = utils.getTotalFromOneJson(str);
    142       console.log(total);
    143       utils.sendHJ(res,{total:total,rows:rows});
    144     }
    145   });
    146 }
    147 
    148 //构建pojo,将前台传入的大写,转化为小写。并获得所有参数值
    149 var Country = function(req){
    150   if(req.param('ID')&&utils.trim(req.param('ID'))!=""){
    151     this.id=utils.trim(req.param('ID'));
    152   }else{
    153     this.id = "";
    154   }
    155   if(req.param('CODE')&&utils.trim(req.param('CODE'))!=""){
    156     this.code=utils.trim(req.param('CODE'));
    157   }else{
    158     this.code = "";
    159   }
    160   if(req.param('NAME_ZH')&&utils.trim(req.param('NAME_ZH'))!=""){
    161     this.name_zh=(utils.trim(req.param('NAME_ZH')));
    162   }else{
    163     this.name_zh = "";
    164   }
    165   if(req.param('NAME_ZH_FULL')&&utils.trim(req.param('NAME_ZH_FULL'))!=""){
    166     this.name_zh_full=utils.trim(req.param('NAME_ZH_FULL'));
    167   }else{
    168     this.name_zh_full = "";
    169   }
    170   if(req.param('NAME_EN')&&utils.trim(req.param('NAME_EN'))!=""){
    171     this.name_en=utils.trim(req.param('NAME_EN'));
    172   }else{
    173     this.name_en = "";
    174   }
    175   if(req.param('NAME_EN_FULL')&&utils.trim(req.param('NAME_EN_FULL'))!=""){
    176     this.name_en_full=utils.trim(req.param('NAME_EN_FULL'));
    177   }else{
    178     this.name_en_full = "";
    179   }
    180   if(req.param('REMARK')&&utils.trim(req.param('REMARK'))!=""){
    181     this.remark=utils.trim(req.param('REMARK'));
    182   }else{
    183     this.remark = "";
    184   }
    185   console.log(this.name_en);
    186 }
    View Code

    代码中有 注释,应该看的差不多了。

    4. model 层的定义和实现

    我在model 层中,每一个模块 都建一个文件夹,然后有一个index.js 在这个里面 在最外层的index 文件中。声明所有的 该模块下 的 model,然后可以通过  (模块名+model名).方法名 的方式进行调用

     

    你看 , 外层的index.js 的代码:   baseCountry  =  base+ country     模块名+model 名。。。。。。。。

    exports.baseCountry=require("./base/country.js");

    model层代码样板:

      1 var config=require("../oracleConfig.json");
      2 var oracle = require("../oracleConn");
      3 
      4 exports.saveCountry = function(country,cb){
      5   
      6   oracle.connect(config, function(err, connection) {
      7     if (err) {
      8         console.log(err);
      9     } else {
     10       console.log(country + "---" + country.code);
     11       connection.execute("INSERT INTO t_base_country(code,name_zh,name_zh_full,name_en,name_en_full,remark)  values(:1,:2,:3,:4,:5,:6) ", [country.code,country.name_zh,country.name_zh_full,country.name_en,country.name_en_full,country.remark],
     12       // connection.execute("INSERT INTO t_base_country(code,name_zh,name_zh_full,name_en,name_en_full,remark)  values(:1,:2,:3,:4,:5,:6) ", ["12","121","1212","1212","1212","1212"],
     13          function(err,results) {
     14           console.log(err);
     15           if (err) {
     16             console.log(err);
     17             cb(err);
     18           } else {
     19             // country.bookID = results.insertId;
     20             console.log(results);
     21             cb(err, results);
     22           }
     23           //链接最好在 执行 sql 之后立马结束,不要再execute之外结束
     24           connection.close();
     25       });
     26      }
     27   });
     28 }
     29 
     30 // 根据传入的id 来进行删除,此处的id 不一定字段名 是id ,只是表示主键的意思
     31 exports.deleteCountry = function(id,cb){
     32   
     33   oracle.connect(config, function(err, connection) {
     34     if (err) {
     35         console.log(err);
     36     } else {
     37       connection.execute("delete from t_base_country where id=:1 ", [id],
     38          function(err,results) {
     39           console.log(err);
     40           if (err) {
     41             console.log(err);
     42             cb(err);
     43           } else {
     44             // country.bookID = results.insertId;
     45             console.log(results);
     46             cb(err, results);
     47           }
     48           //链接最好在 执行 sql 之后立马结束,不要再execute之外结束
     49           connection.close();
     50       });
     51      }
     52   });
     53 }
     54 
     55 
     56 exports.updateCountry = function(country,cb){
     57   
     58   oracle.connect(config, function(err, connection) {
     59     if (err) {
     60         console.log(err);
     61     } else {
     62       console.log(country + "---" + country.code);
     63       // 执行sql语句
     64       connection.execute("update t_base_country set code=:1,name_zh=:2,name_zh_full=:3,name_en=:4,name_en_full=:5,remark=:6 where id=:7  ", [country.code,country.name_zh,country.name_zh_full,country.name_en,country.name_en_full,country.remark,country.id],
     65          function(err,results) {
     66           console.log(err);
     67           if (err) {
     68             // console.log(err);
     69             cb(err);
     70           } else {
     71             // country.bookID = results.insertId;
     72             // console.log(results);
     73             console.log(country.id);
     74             cb(err, results);
     75           }
     76           //链接最好在 执行 sql 之后立马结束,不要再execute之外结束
     77           connection.close();
     78       });
     79      }
     80   });
     81 }
     82 
     83 
     84 exports.getList = function(country,page,pageSize,sorter,order,cb){
     85   var whereStr=" where 1=1 ";
     86   //构造where 条件sql
     87   if(country.code!=null && country.code!=""){
     88      whereStr += " and code like '%"+country.code + "%'";
     89   }
     90   if(country.name_zh!=null && country.name_zh!=""){
     91      whereStr += " and (name_zh like '%"+country.name_zh + "%' or name_zh_full like '%"+country.name_zh + "%' ) ";
     92   }
     93   if(country.name_en!=null && country.name_en!=""){
     94      whereStr += " and (name_en like '%"+country.name_en + "%' or name_en_full like '%"+country.name_en + "%') ";
     95   }
     96 
     97   if(order!="desc"){
     98     order="asc";
     99   }
    100 
    101   if(sorter!=""){
    102     whereStr+= " order by " + sorter + " " + order;
    103   }
    104   
    105   var selectSql = " SELECT * FROM t_base_country " + whereStr;
    106   // SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40)WHERE RN >= 21
    107   // var selectSql=" select * from ( select A.*,rownum rn  from ("+comSql + ") A where rownum<="+ (page+1)*pageSize +")where rn>="+(page*pageSize+1);
    108   
    109   console.log(selectSql);
    110   // 进行连接
    111   oracle.connect(config, function(err, connection) {
    112     if (err) {
    113       console.log("connection faild");
    114       console.log(err);
    115     } else {
    116       console.log("connection success");
    117       connection.execute(selectSql,[],function(err,results){
    118           if(err){
    119             cb(err);
    120           }else{
    121             cb(err,results);
    122           }
    123           //链接最好在 执行 sql 之后立马结束,不要再execute之外结束
    124         connection.close();
    125       });
    126     }
    127   });
    128 }
    View Code

    好了,至此,已经连成一条线了。

    最终  入口处,这么调用:

    <li class="fs">
       <a href="/base/country" target="center_frame">国家</a>
    </li> 

    额。。。。写个说明太费劲了, 有啥不明白的再问吧。如果觉得后,可以参考,有好的建议,请及时提出,共同进步。

  • 相关阅读:
    对于Dubbo一些面试题自己的答案
    序列化和反序列化的简单理解
    学习Spring-Session+Redis实现session共享
    Java中的String,StringBuilder,StringBuffer三者的区别
    个人对数据结构的理解和总结
    LeetCode 101. Symmetric Tree
    LeetCode 100. Same Tree
    LeetCode 88. Merge Sorted Array
    LeetCode 83. Remove Duplicates from Sorted List
    LeetCode 70. Climbing Stairs
  • 原文地址:https://www.cnblogs.com/zyy258963/p/4132717.html
Copyright © 2011-2022 走看看