zoukankan      html  css  js  c++  java
  • 前端框架(二)DIV多选复选框框的封装和MySql数据库存取

             图能够包括的寓意和含义是文字不能比拟的,先有一个效果图你也就知道这篇文章的主要内容是关于什么问题的。省去了一大堆文字的累述。看以下这张图:

             

             这个需求就是要实现某个人具有第二种特性。具有多对多关系。比方某个人既喜欢运动、有喜欢上网等等。这样类似的需求在差点儿在每一个系统里面都有设计。并且非常多框架都实现了这种功能,假设让自己去实现就须要自己从建立表、逻辑、以及界面JS都须要自己手动去写,以下是说下我的设计思路。

             设计思路

              将多个checkbox放到一个div元素中。利用jquery的函数进div和checkbox进行控制选取。取值和赋值能够写一个循环既能够完毕。至于表单提交既能够利用form标签调教。也能够利用jquery的ajax方式提交。在对用户体验度要求高的系统中最好使用ajax方式提交,这是界面的设计部门,另外还有数据库表的建立,我在做数据库表时认为非常easy但也遇到了一些问题。

            

              数据库须要建立一张关系表来存储多对多关系,大家都知道到,须要注意的是在这张关系表里面怎么存储。即多个复选框的ID是存储在一个字段里面还是一个ID一条记录呢。这两种方式都能够实现;假设存储在一个字段里面就须要把处理这个字段的逻辑写在java类里面,我在做表单时从表单界面直接到数据库SQL语句,中间逻辑已经封装不能够改动,因此仅仅能把IDS存在一个字段里面,感觉这样的方式实现也挺快,降低了逻辑。


             例如以下有两张表fcs_checkitem、fcs_useritem。fcs_useritem为关系表它的itemids字段保存了fcs_checkitem表的itemid数组,想利用以下嵌套语句查询:

    SELECT * FROM fcs_checkitem
    WHERE itemid IN
    (
    	SELECT itemids FROM fcs_useritem
    	WHERE userid='00000075'
    
    )

              经測试这样写并不能查询出结果,由于里面嵌套的查询返回的结果是一个逗号隔开的字符串数据(001,002。,003),假设手动写一个这种数据是能够查询出来的,可是这样动态的方式是查不出来的,上网查发现mysql是不支持这样动态查询的,发现有还有一种思路实现这种keyword “IN” 的功能。

    SELECT group_concat(b.itemname) as itemnames 
    FROM fcs_useritem a, fcs_checkitem b 
    WHERE CONCAT(CONCAT(',',a.checkid),',') 
    LIKE CONCAT(CONCAT('%,',b.itemid),',%') 
    AND a.userid=':{$urlParam("formid")}:'

              上面利用了concat()以及group_concat()这两个函数,它原理是能够用几个字理解:用LIKE 实现IN的功能。

              这种比如有两张表A和表B,A表的一个字段ids是B表字段id的数组。那么给B.id两天加上%,让A.ids字符数组两端加上逗号。拿一个详细的数字举个样例即是,1,去匹配,1,2,3,这个字符串,仅仅要找到一个匹配的就会返回一条记录。用这种方式实现类似于in的查询。


    Concat()函数
    这个函数经常使用语连接多个字符串,比如

    String Str1="世界";
    String str2="你好"
    Str3=concat(str1,str2);
    Str3="世界你好",这个函数把这两个字符串连接了起来,有时会认为非常实用;


    Group_concat()函数。看一下效果

               这是一个简单的查询结果,再看一下使用这个函数的效果


                该函数实现了将表中查出的某一列数据,转换成一个字符串数组。如上图所看到的,假设你就是想把查出的某一列转为字符串数组会非常实用。


                这个多选能够封装为一个颗粒、把公共的东西抽象出来弄成一个个的颗粒,把它封装为一个控件,这个控件有自己的函数获得checkbox值和赋值等方法,还能够封装一些样式等,还在考虑怎么才干把checkbox封装到div标签中。以后再用到时仅仅须要引入这个div标签就可以,通过div标签传參控制多选。这涉及到自己定义标签怎么弄,在.NET中能够开发用户自己定义控件,那么在标签中认为也是能够开发自己定义标签库,还有类似于下拉列表框等等,都能够封装起来。

                不知道还有没有别的思路能够实现用户控件、或标签的封装?开发自己定义标签查了一下好实现。把开发jar包引入进来实现几个接口就能够定义自己的标签库了,开发自己定义标签库能够实现用户自己定义功能。方便页面上的布局,同一时候发现如今的非常多产品有关界面框架,不管界面多美观、高端大气。都是封装原始的html标签元素,封装也就意味着能够带了自己心的特性,假设有特殊需求的时候能够自己适当封装一下。

                方便别人编程、也提高了开发效率和编码的灵活性。

  • 相关阅读:
    LightProxy修改请求头、cookie
    webpack2项目中引入@vue/composition-api报错Cannot find module
    webpack2项目引入ts后报错@ ./~/vue-style-loader!./~/css-loader!./~/vue-loader/lib/style-compiler?
    mac brew 安装指定版本后 node命令找不到
    python数据类型详解
    更换Linux(CentOS) yum源
    Python读写文件
    Python异常处理try...except、raise
    Python删除空格字符串两端的空格
    python的urllib模块中的方法
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6763636.html
Copyright © 2011-2022 走看看