数据库字典表设计

2023-11-18

数据库字典表设计
村长大神 发表于2年前
   
在稍大一些的项目中,我们总是需要管理各种各样的类型类型数据(如商品类型、游戏类型。。。)。对于这些类型的管理类似,如果为每 
一种类型都建立一张表去维护(而在项目中,正常出现50种类型),那工作量是可想而之大,并且我们不得不去了解每一个类型表的名字, 
以去关联它。 

   因此,我们需要一种数据模型以完成对多种多样类型管理的需求。 

字典表dictionary                 
                 
字段名           类型               是否可空    中文名         描述 
dict_name    varchar(50)    no          字典名字     
dict_value    int                   no          字典值           固定的,不变的 

字典数据表dictionarydata                 
                 
字段名                 类型              是否可空        中文名               描述 
id                       int                 no                                        自增长 
dict_value          int                 no               dictionary中的值     
dictdata_name   varchar(50)  no               字典名字     
dictdata_value   varchar(5)     no               字典值                 固定的,不变的 
isfixed                int                 no               是否固定             0默认为不固定,1固定;固定就不能再去修改了。 
         
说明:dictionary中的dict_value和dictionarydata中的dictdata_value都是添加完不可变的,其它表的类型字段存取的是dictionarydata 
中的dictdata_value,在查询关联时,需要添加dict_value的约束(注:有人习惯存取dictionarydata中的ID,这样在查询时可以少 
加dict_value的约束。但是在系统的升级,或错误删除dictionarydata表时,后果将是空难性的,并且存取dictdata_value主表的类型字段 
简单明了,立即可以知道它是什么类型,所以建议存取dictdata_value)。 

表扩展:对于现有的设计,如果需要类型数据需要简单的树形结构,可以在dictionarydata可添加parent_id;如果需逻辑删除数据时,可以 
添加iscancle; 

最后,在程序中最好再建立两个类dictionary、dictionarydata里面定义整型变量对应于dict_value和dictdata_value值,这样在程序中就 

可以通过代码来引用类型数据。


在 应用开发中,总会遇到许多数据字典项,比如对象状态、对象类型等等,这些项一般都是固定的若干可选值选项,比如对象状态可能有新建、修改、删除等状态,这 些数据字典项一旦定义完毕改动的频率非常低;在应用开发中,为了处理方便,一般要对这些数据字典项值选项进行数字编码(例如: 0表示新建,1表示修改,2表示删除等),以方便应用程序中使用。而UI显示对象信息时不能显示对象状态等的编码,对于编码值设计人员知道代表什么意思,但用户就不明白了,所以需要进行编码转换,从编码转换为文字描述(名称),也就是需要把状态编码0转换为“新建”,把1转换为“修改”,把2转换为“删除”等显示给用户,用户才明白对象当前的状态是什么。

下面介绍一下常用的实现方法:

实现方案:

一、在java文件中定义数据字典项

我们习惯上把应用中遇到的数据字典项都定义到一个java文件中,这是最常用的方法,实现起来比较简单,但维护起来就非常繁琐,特别是数据字典项比较多的情况下,相应的java文件就会比较大,一旦数据字典项有更新那么维护起来就比较费时费力。

java文件中定义数据字典项通常情况下定义为static,举例来说,类ReportConstants中定义了以下数据字典项

    public static final int CODE_USERINF_TECHELEVEL_GJ = 1;

 

    public static final String CODE_USERINF_TECHELEVEL_GJ_KEY = "高级";

 

    public static final int CODE_USERINF_TECHELEVEL_ZJ = 2;

 

    public static final String CODE_USERINF_TECHELEVEL_ZJ_KEY = "中级";

 

    public static final int CODE_USERINF_TECHELEVEL_CJ = 3;

 

    public static final String CODE_USERINF_TECHELEVEL_CJ_KEY = "初级";

 

    public static final int CODE_USERINF_TECHELEVEL_WJ = 4;

 

public static final String CODE_USERINF_TECHELEVEL_WJ_KEY = "无职称";

那么我们在实现中就可以直接引用相应的数据字典项编码及名称,另外,一般情况下需要定义数据字典项编码和名称的转换方法,比如:

    public static String getCodeName(int lCode)

       {

              //初始化返回值

              String strReturn = "未知";

        switch (lCode)

              {

                     case CODE_USERINF_TECHELEVEL_GJ :

                            strReturn = CODE_USERINF_TECHELEVEL_GJ_KEY;

                            break;

                     case CODE_USERINF_TECHELEVEL_ZJ :

                            strReturn = CODE_USERINF_TECHELEVEL_ZJ_KEY;

                            break;

                     case  CODE_USERINF_TECHELEVEL_CJ :

                            strReturn = CODE_USERINF_TECHELEVEL_CJ_KEY;

                            break;

                     case  CODE_USERINF_TECHELEVEL_WJ :

                            strReturn = CODE_USERINF_TECHELEVEL_WJ_KEY;

                            break;

              }

              return strReturn;

       }

这个方法实现了通过数据字典项编码获得数据字典项名称的功能。那么还需要实现一个对应的方法,getCodeByName(String name),即通过数据字典项名称获取数据字典项编码功能(代码这里省略,请读者自己完成)。这样就可以实现数据字典项编码和名称的相互转换。

但是一旦出现数据字典项名称或编码需要更改(“无职称”项编码需要由“4”改为“0),或增加减少数据字典项,都需要更新java文件代码。是否有简便的方法在满足上述需求的情况下又不更新java文件代码?答案是肯定的。下面我们来介绍两种实现方法:一中使用xml文件,一种在数据库定义。

二、在xml文件中定义

第一种方案是应用xml配置文件来定义数据字典项。使用xml配置文件,以便最大限度的减小维护的工作量,避免java代码的频繁修改。

下面我们分步骤详细介绍一下使用xml配置文件的实现方案

 

第一步:定义xml数据字典项配置文件

首先新建一个xml文件,命名为DataDictionaryConfig.xml(名字可以自己定义),把应用的用到的数据字典项分组定义到xml文件中,举例如下,我们定义了下列数据字典项:

<?xml version="1.0" encoding="GB2312"?>

<data-dictionaries>

    <data-dictionary>

      <group value = "0" name="ObjectStatus">

         <option value="0" name="detached"/>

         <option value="1" name="new"/>

         <option value="2" name="updated"/>

         <option value="3" name="deleted"/>

      </group>

      <group value = "1" name="ObjectTypes">

         <option value="0" name="对象类型选项0"/>

         <option value="1" name="对象类型选项1"/>

         <option value="2" name="对象类型选项2"/>

         <option value="3" name="对象类型选项3"/>

<option value="4" name="对象类型选项4"/>

      </group>

    </data-dictionary>

</data-dictionaries>

这个xml文件可以根据需要进行扩展,满足更复杂应用的需要。

第二步,定义数据字典项对象类和数据字典项分组对象类:

    对于数据字典项这里我们定义了一个数据字典项对象类,一组数据字典选项集我们定义了一个数据字典项分组对象类,如下:

1)、数据字典项类:

public class DataDictionaryItem

{

  public DataDictionaryItem()

  {

  }

 

  private String code;

  private String name;

 

  public void setCode(String code)

  {

    this.code = code;

  }

 

  public String getCode()

  {

    return this.code;

  }

 

  public void setName(String name)

  {

    this.name = name;

  }

 

  public String getName()

  {

    return this.name;

  }

 

}

 

2)、数据字典项分组类

public class DataDictionaryItems

{

  public DataDictionaryItems()

  {

  }

  //数据字典项分组编码

  private String groupCode;

  //数据字典项分组名称

  private String groupName;

  //数据字典项详细

  private java.util.ArrayList items;

 

  public void setGroupCode(String code)

  {

    this.groupCode = code;

  }

  public String getGroupCoude()

  {

    return this.groupCode;

  }

 

  public void setGroupName(String name)

  {

    this.groupName = name;

  }

  public String getGroupName()

  {

    return this.groupName;

  }

 

  //设置数据字典项

  public void setDataDictionaryItem(DataDictionaryItem item)

  {

    if(this.items == null)

      this.items = new java.util.ArrayList();

    this.items.add(item);

  }

 

  //设置数据字典项

  public void setDataDictionaryItem(String itemName, String itemCode)

  {

    if(this.items == null)

      this.items = new java.util.ArrayList();

    DataDictionaryItem item = new DataDictionaryItem();

    item.setCode(itemCode);

    item.setName(itemName);

    this.items.add(item);

  }

 

  //获得数据字典项组对象

  public java.util.ArrayList getDataDictioanryItems()

  {

    return this.items;

  }

 

第三步,定义Xml数据字典项配置文件解析类,这里我们使用Dom4J,相应的jar可以在http://www.dom4j.org/上找到

import org.dom4j.*;

import org.dom4j.io.*;

import java.util.*;

 

public class XMLDDItemParser {

 

  //数据字典项结构

  public static DataDictionaryItems dataItems ;

  private static String GROUP_NAME = "name";

  private static String GROUP_CODE = "value";

  private static String ITEM_NAME = "name";

  private static String ITEM_CODE = "value";

 

  public XMLDDItemParser() {

  }

 

    /**

   获得分组数据字典项集

   @param groupName String

   @return DataDictionaryItems

   */

  public static DataDictionaryItems getDataDictionaryItems(String groupName)

  {

    if(dataItems == null)

      dataItems = parseXML(groupName);

    return dataItems;

  }

 

  /**

   根据分组名称解析xml文件,获得该分组下数据字典项集

   @param gName String

   @return DataDictionaryItems 数据字典项分组对象

   */

  public static DataDictionaryItems parseXML(String gName)

  {

    try

    {

      org.dom4j.io.SAXReader saxReader = new org.dom4j.io.SAXReader();

      Document document = saxReader.read("DataDictionaryConfig.xml");

 

      dataItems = new DataDictionaryItems();

 

      List list = document.selectNodes("//group");

      Iterator iter = list.iterator();

      while (iter.hasNext())

      {

        Node node = (Node) iter.next();

        if (node instanceof Element)

        {

          //document

          Element element = (Element) node;

          String GroupName = element.attributeValue(GROUP_NAME);

          String GroupValue = element.attributeValue(GROUP_CODE);

          //设置分组名称编码

          dataItems.setGroupName(GroupName);

          dataItems.setGroupCode(GroupValue);

          //取组内数据字典项

          if (gName.equals(GroupName))

          {

            //取数据字典项名称编码

            Iterator elemIter = element.elementIterator();

            while (elemIter.hasNext())

            {

              Element elem = (Element) elemIter.next();

              dataItems.setDataDictionaryItem(elem.attributeValue(ITEM_NAME), elem.attributeValue(ITEM_CODE));

            }

          }

        }

      }

    }

    catch (Exception ex) {

      ex.printStackTrace();

    }

    return dataItems;

  }

第四步,提供数据字典项编码转换方法类:

public class DataDictionaryUtils {

  public DataDictionaryUtils() {

  }

 

  /**

   根据数据项名称转换为数据项编码

   @param groupName String

   * @param itemName String

   * @return String  数据项编码

   */

  public static String getItemCode(String groupName, String itemName)

  {

    String code = "-1";

    DataDictionaryItems dataItems = XMLDDItemParser.getDataDictionaryItems(groupName);

   

    java.util.ArrayList items = dataItems.getDataDictioanryItems();

    if(items != null)

    {

      DataDictionaryItem item;

      for(int i = 0; i < items.size(); i++)

      {

        item = (DataDictionaryItem) items.get(i);

        if(item != null)

        {

          String name = item.getName();

          if(name.equals(itemName))

          {

            code = item.getCode();

            break;

          }

        }

      }

    }

    return code;

  }

  /**

   根据数据项编码转换为数据项名称

   * @param groupName String

   * @param itemCode String

   * @return String

   */ 

  public static String getItemName(String groupName, String itemCode)

  {

    String name = "未知";

    DataDictionaryItems dataItems = XMLDDItemParser.getDataDictionaryItems(groupName);

   

    java.util.ArrayList items = dataItems.getDataDictioanryItems();

    if (items != null)

    {

      DataDictionaryItem item;

      for (int i = 0; i < items.size(); i++)

      {

        item = (DataDictionaryItem) items.get(i);

        if (item != null)

        {

          String code = item.getCode();

          if (code.equals(itemCode))

          {

            name = item.getName();

            break;

          }

        }

      }

    }

    return name;

  }

 

至此,我们已经完成了该方案的设计。使用xml文件,增加删除数据字典项等只需要更新xml文件即可,不涉及java文件的更新。

Xml可以根据应用的具体需要进行扩展设计。这里仅仅抛砖引玉,提供一种思路。

三、使用数据库表

上一种方法我们使用xml文件定义数据字典项,现在我们把数据字典项定义在数据库表中,下面我们来详细介绍实现方式:

第一步:定义数据字典项数据表结构

根据前面xml文件定义,这里我们定义两张表,一张是数据字典分组信息表,一张是数据字典项详细信息表。如下:

drop table datadic_groups;
create table datadic_groups(
    group_code varchar2(
20
) primary key,
    group_name varchar2(
50

);

drop table datadic_items;
create table datadic_items(
    dataitem_code varchar2(
20
) primary key,
    dataitem_name varchar2(
50
),
    group_code varchar2(
20
)
);

alter table datadic_items 
add constraint dataitem_foreignkey foreign key (group_code) 
references datadic_groups(group_code);

 

 

这两张表可以根据应用的具体需求进行扩充,这里不再赘述。

第二步:根据定义的数据字典表结构定义数据字典实体类。

(请参照二、在xml文件中定义的第二步)

第三步:实现数据库表中数据字典项的查询功能

  /**

   实现从数据库查询数据字典项

   * @param gName String

   * @return DataDictionaryItems

   */

  public static DataDictionaryItems getFromDB(String gName)

  {

     dataItems = new DataDictionaryItems();

    

     try

     { 

        //获取数据连接

        java.sql.Connection conn = getConnection();

        if(conn != null)

        {

           //查询数据库,根据组名称查询组编号,根据组编号获取该组内数据字典项信息

           String strSql = "select items.dataitem_code, items.dataitem_name, items.group_code, dgroups.group_name from datadic_items items, datadic_groups dgroups where items.group_code = dgroups.group_code and dgroups.group_name='"+gName+"'";

           java.sql.Statement stmt = conn.createStatement();

           java.sql.ResultSet rs = stmt.executeQuery(strSql);

           while(rs.next())

           {

               String dataitem_code = rs.getString(1);

               String dataitem_name = rs.getString(2);

               dataItems.setDataDictionaryItem(dataitem_name, dataitem_code);

 

               String group_code = rs.getString(3);

               String group_name = rs.getString(4);

               dataItems.setGroupCode(group_code);

               dataItems.setGroupName(group_name);

           }

        }

     }

     catch(Exception ex)

     {

       ex.printStackTrace();

     }

     return dataItems;

  }

 

第四步:提供数据字典项编码转换方法类:

    (请参照二、在xml文件中定义的第四步)

 

四、进一步完善

1、两种方式都可以提供数据字典项维护界面,直接在维护界面上操作数据字典项,避免由于误操作导致xml文件或数据库数据错误。具体的实现也是比较简单,不再详细说明。

2、 使用数据库表方式时,如果想减少频繁查询数据库,可以将数据字典项信息在系统启动后第一次访问时加载内存中,如果数据字典项数据量比较大,可实现一自维护 线程,采用最近最少使用算法,将频繁使用的数据字典项驻留内存,将长期不用的数据字典项从内存中删除,每次自动检查内存中的数据字典项,如果存在则从内存 中读取,如果不存在则查询数据库,替换内存中最少使用的数据字典项。

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

数据库字典表设计 的相关文章

  • 在 Kotlin 中实现返回 Collection 的 Java 方法

    我将 Kotlin 与 Spring Security 结合使用 实现该方法时 public interface UserDetails extends Serializable Collection
  • V8 如何管理它的堆?

    我知道V8的垃圾收集在工作时 会从GC的root开始追踪 这样无法到达的对象就会被标记然后被清除 我的问题是GC是如何遍历那些对象的 必须有一个数据结构来存储所有可达或不可达的对象 位图 链接表 顺便说一句 JVM 也做同样的事情吗 艾伦秀
  • JUnit Eclipse 显示 System.out.print() 的

    我正在使用 JUnit 3 和 Eclipse 3 4 当我运行 JUnit 测试用例时 一切正常并且测试完美完成 唯一的事情是我想查看我正在运行的类的输出 所有类都具有一些输出值的基本 System out print 因此 当我运行测试
  • 我想使用 Sequelize 将 MySQL 中的对象数组存储在单个列中

    之前我正在寻找如何使用 Sequelize 在 MySQL 中插入对象数组 然后我找到了一种直接插入数组的解决方案 例如 1 2 在单列中 insert into TABLE NAME id marks VALUES 21 1 2 但我正在
  • 在气球内显示带有照片的多个地标的最佳做法是什么?

    我有一个项目如下 从手机上拍摄几张照片 将照片保存在网络系统中 然后将照片显示在其中的谷歌地球上 我读过很多文章 但它们都使用 fetchKml 我读过的一篇好文章是使用 php 但使用 fetchKml 我不知道是否可以使用 parseK
  • 如何正确配置Tomcat SSLHostConfig?

    我正在按照本教程在 tomcat 中启用 ssl https medium com raupach how to install lets encrypt with tomcat 3db8a469e3d2 https medium com
  • firestore快照监听器生命周期和定价之间有什么关系?

    在我的活动中 我有一个字符串列表 这些字符串表示我想要附加快照侦听器的 Firestore 文档 我使用 Acivity ModelView 存储库结构 在活动的 onCreate 中 我向 ViewModelProvider 询问适当的
  • Java 的 QP 求解器 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 会话 bean 中的 EntityManager 异常处理

    我有一个托管无状态会话 bean 其中注入了 EntityManager em 我想做的是拥有一个具有唯一列的数据库表 然后我运行一些尝试插入实体的算法 但是 如果实体存在 它将更新它或跳过它 我想要这样的东西 try em persist
  • JSP 标签+ scriptlet。如何启用脚本?

    我有一个使用标签模板的页面 我的 web xml 非常基本 我只是想在页面中运行一些代码 不 我对标签或其他替代品不感兴趣 我想使用不好的做法 scriptlet 哈哈 到目前为止 我收到了 HTTP ERROR 500 错误 Script
  • Vertx HttpClient getNow 不工作

    我的 vertx HttpClient 有问题 下面的代码显示使用 vertx 和纯 java 测试 GET Vertx vertx Vertx vertx HttpClientOptions options new HttpClientO
  • 源服务器未找到目标资源的当前表示或不愿意透露该表示存在

    web xml
  • 如何在将数据发送到 Firebase 数据库之前对其进行加密?

    我正在使用 Firebase 实时数据库制作聊天应用程序 我知道 Firebase 非常安全 只要您的规则正确 但我自己可以阅读使用我的应用程序的人的所有聊天记录 我想阻止这种情况 为此我需要一种解密和加密方法 我尝试使用凯撒解密 但失败了
  • .class 与 .java

    class 文件和 java 文件有什么区别 我正在尝试让我的小程序工作 但目前我只能在 Eclipse 中运行它 还不能嵌入 HTML 谢谢 编辑 那么如何使用 JVM 进行编译呢 class 文件是编译后的 java 文件 java 都
  • 存储过程将多个表返回到 spring jdbc 模板

    我正在使用 JdbcTemplate 从 Spring DAO 类调用存储过程 我的问题是 存储过程返回多个表 有没有办法使用 Spring JdbcTemplate 访问多个表 如果我使用jdbcTemplate queryForList
  • 用 Java 创建迷宫求解算法

    我被分配了用 Java 创建迷宫求解器的任务 这是任务 Write an application that finds a path through a maze The maze should be read from a file A
  • 是什么原因导致“对象不是声明类的实例”? [复制]

    这个问题在这里已经有答案了 可能的重复 使用反射调用方法时 为什么会出现 对象不是声明类的实例 https stackoverflow com questions 7202988 why do i get object is not an
  • 将字符串中的字符向左移动

    我是 Stack Overflow 的新手 有一道编程课的实验室问题一直困扰着我 该问题要求我们将字符串 s 的元素向左移动 k 次 例如 如果输入是 Hello World 和3 它将输出 lo WorldHel 对于非常大的 k 值 它
  • Scala repl 抛出错误

    当我打字时scala在终端上启动 repl 它会抛出此错误 scala gt init error error while loading AnnotatedElement class file usr lib jvm java 8 ora
  • html 下钻下拉所选值未插入 MYSQL

    我有两个下拉列表 首先从数据库下拉填充 根据第一个下拉列表的选定值从数据库填充第二个下拉列表 document ready function c change function var c1 c selected text if c1 aj

随机推荐

  • 单元测试 实体

    单元测试 实体 代码 Before public void setUp userVoTest new UserVo Test public void testEquals final boolean result userVoTest eq
  • C语言编译遇到的错误提示总结

    C语言编译遇到的错误提示总结 error1 expected asm or attribute before token error1 expected asm or attribute before token 解决方案 很有可能是你定义
  • Java常见面试题

    1 进程和线程的区别 1 进程是内存中运行的程序 是操作系统资源分配的基本单元 在windows操作系统中运行的每一个exe文件就是一个进程 每个进程都有独立的代码和数据空间 程序上下文 所以程序之间切换开销比较大 2 线程是处理器任务调度
  • stm32f407 bootloader程序制作 bootloader(基于rtthread3.3.0 sfud easyflash等库) 升级APP(基于rtthread的app)

    本位将介绍stm32f407vgt6 芯片制作bootloader程序 用作app的远程升级 一 硬件介绍 stm32f407vgt6 主频 166MHZ flash 1M SRAM 192K stm32f407vgt6 使用的phy芯片为
  • 微信小程序顶部栏图片随页面滚动渐变展示隐藏

    微信小程序顶部栏图片随页面滚动渐变展示隐藏 小程序顶部通栏 展示图片 随着页面滚动 开始渐变展标题记及纯色吸顶样式 主要使用了小程序中的scroll view组件 通过滚动时触发 bindscroll和滚动到顶部 bindscrolltou
  • LeetCode 67. 二进制求和

    题目链接 https leetcode cn problems add binary 思路如下 高精度加法 从低位到高位逐个对应相加 C 代码如下 class Solution public string addBinary string
  • 登录安全

    1 前端将用户名和密码rsa加密 后端解密 2 为防止登录数据被拦截而被复制登录 登录数据添加当前时间戳或加密后唯一字段 后端每一次登录成功后将时间戳或唯一字段加工后作为一个redis键名保存 值随便 缓存时间和登录有效时间一致 以保证登录
  • 【NLP】大模型综述来了!一文带你理清全球AI巨头的大模型进化史

    夕小瑶科技说 原创 作者 小戏 Python 如果自己是一个大模型的小白 第一眼看到 GPT PaLm LLaMA 这些单词的怪异组合会作何感想 假如再往深里入门 又看到 BERT BART RoBERTa ELMo 这些奇奇怪怪的词一个接
  • 三局两胜制下获得首胜后最后获胜的概率

    之前看NBA的时候 说拿下天王山之战的战队有83 3 差不多这个值 的概率拿下最后的胜利 当时感觉很奇怪 为什么这么接近5 6而不是3 4呢 然后自己算了一下 还真是 先说下为什么不是3 4的原因 3 4很容易算出来 1 2 1 2 可是后
  • 如何利用阿里云服务器快照策略为数据备份

    阿里云服务器快照 是一个很好的备份容灾工具 不了解的可以先了解一下 快照可以做什么 这是一种便捷高效的数据保护服务手段 可以对重要业务数据进行备份 来应对误操作 攻击 病毒等导致的数据丢失风险 比如前段时间的勒索病毒事件 假设你中招后所有数
  • Django下载图片接口

    import logging from django http import HttpResponse FileResponse from io import BytesIO from urllib parse import quote c
  • 还是得从代码角度看yolov5(1)

    train 参考文章 又是经典写到一半发现别人写的更好 基础函数 1 setattr setattr opt k v 将给定对象上的命名属性设置为指定值 等价于opt k v 2 getattr callback getattr logge
  • Pandas的学习(3.DataFrame的创建方法和三种索引方法(iloc、loc、values)以及切片)

    DataFrame DataFrame是一个 表格型 的数据结构 可以看做是 由Series组成的字典 共用同一个索引 DataFrame由按一定顺序排列的多列数据组成 设计初衷是将Series的使用场景从一维拓展到多维 DataFrame
  • 校验金额正则2--onchange触发校验

    用法 鼠标输入失去焦点的时候出发onchange属性调用js校验正则方法 正则校验reg1 test 不正确返回false 正确返回true 定义mm做判断 缺点 return直接退出了 如果需要重复操作不可取 或者不用return htm
  • PHP XAMPP配置PHP环境和Apache80端口被占用解决方案

    LAMP Linux Apache MySQL PHP 或WAMP Windows Apache MySQL PHP 是一门关于PHP架构网站的课程 它可以使用XAMPP软件 Apache MySQL PHP集成开发包 搭建PHP环境进行网
  • 从Docker到Kubernetes——K8s网络核心原理

    文章目录 Dokcer的网络模型 kubernetes网络核心原理 IP per Pod模型 Kubernetes网络插件flannel Dokcer的网络模型 Dokcer默认使用单主机的网络方案 它默认创建一个名为docker0的网桥
  • DateFormat类

    DateFormat类 DateFormat类用于将日期格式化为字符串或者将用特定格式显示的日期字符串转换成一个Date对象 DateFormat是一个抽象类 不能直接被实例化 提供了一系列静态方法来获取DateFormat类的实例对象 D
  • 一文读懂「Attention is All You Need」

    前言 2017 年中 有两篇类似同时也是笔者非常欣赏的论文 分别是 FaceBook 的Convolutional Sequence to Sequence Learning和 Google 的Attention is All You Ne
  • Android实战——Zxing实现二维码扫描

    Zxing实现二维码扫描 前言 本篇文章从初学者的角度出发 从一个不知道对二维码扫描怎么下手的工作者 需要一个简单的扫描功能的话 可以阅读该篇文章 作为Google开源框架Zxing 里面的文件很大 这里主要讲的是精简ZXing项目后只保留
  • 数据库字典表设计

    数据库字典表设计 村长大神 发表于2年前 在稍大一些的项目中 我们总是需要管理各种各样的类型类型数据 如商品类型 游戏类型 对于这些类型的管理类似 如果为每 一种类型都建立一张表去维护 而在项目中 正常