Home

实体不同类型拥有不同属性的数据库设计

背景 以最常见的电商系统作为例子,电商系统中有商品这样的实体。在数据库设计中,通常我们会使用一个商品表来表示商品实体,但不同类型的商品拥有不同的属性,导致商品表的字段设计成为一个问题。与此同时,前端页面在开发商品表单时,由于商品属性是不确定的,无法预先定义好要显示的表单项,各表单项的显示名称、属性名以及表单控件需要由后端提供该商品类型的模式数据来确定 需求案例 我们通过一个简单的需求案例来说明各种可能的设计方案 同样以电商系统中的商品为例,假设有两类商品,分别为饮料和图书。两类商品都有名称这个属性,饮料另有包装属性,而图书另有页数属性 设计方案 固定大宽表 商品表中预留足够的备用属性,备用属性的含义根据商品类型的不同而改变 商品类型表t_type ...

Read more

Maven常用命令

生成项目模板 简单webapp项目模板, 选择maven-archetype-webapp,搜索maven:webapp 简单项目模板, 选择maven-archetype-quickstart,搜索maven:quickstart mvn archetype:generate 构建项目 mvn clean test site mvn clean package site 生成测试覆盖率报告 mvn cobertura:cobertura

Read more

遍历HashMap最佳实践

代码实例 使用EntrySet的Iterator遍历HashMap能具有最佳性能,且在遍历过程中能安全删除元素 @Test void testMapIterator() { HashMap<Integer, String> map = new HashMap<>(); map.put(1, "a"); map.put(2, "b"); map.put(3, "c"); Iterator<Map.Entry<Integer, String>> iterator = map.entrySet().iterator(); while (iterator.has...

Read more

Java移位运算符

移动大于等于数字的位数,则先将移动位数求模 左移 << 向左移若干位,高位舍弃,低位补0。在未有高位被舍弃的情况下,左移一位相当于将数字乘以2 带符号右移 >> 又称算术右移,向右移若干位,高位补符号位,低位舍弃。在未有低位被舍弃的情况下,带符号右移一位相当于将数字除以2 无符号右移 >>> 又称逻辑右移,向右移若干位,高位补0,低位舍弃

Read more

Java方法签名

方法签名定义 决定方法签名的要素 方法名 参数列表(参数个数,参数类型,参数顺序) 无关要素 方法返回值类型 访问修饰符

Read more

Java字符串常量池

字符串常量池的位置 JDK 6及之前,字符串常量池位于方法区 JDK 7及之后,字符串常量池位于堆空间 字符串常量池常量的来源 class文件的静态常量池,主要包含文本字面量和被final修饰的字符串常量 运行时通过String类的intern方法动态添加 字符串常量池数据结构 字符串常量池底层为一个定长的Hashtable,管理的是字符串的引用。字符串的对象本身一定在堆空间。 intern方法 调用intern方法,会判断常量池引用指向的对象里面有没有与当前字符串值相等的对象。如果有,则返回常量池相应的引用。如果没有,则将当前字符串的引用放入常量池,并返回。 字符串常量池的一些例子 字面量在类加载时进入常量池 String s1 = "He...

Read more

Java中String类的+运算符重载

String的运算符重载 String中的+和+=是Java中仅有的两个重载运算符 String s = "a" + "b" + "c"; 上面代码块相当于 StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("a"); stringBuilder.append("b"); stringBuilder.append("c"); String s = stringBuilder.toString(); 每次使用+或+=运算符,都会创建一个StringBuilder对象,因此要注意不要在for循环内部使用,否则可能会创建过多的StringBuilder对象,降低性能

Read more

Java对象的hashCode与equals方法重写原则

唯一原则 equals方法判断为true,则hashCode方法返回的哈希值也必须相等 逆否命题 hashCode方法返回的哈希值不相等,则equals方法必须判断为false 推论 hashCode方法返回的哈希值相等,无法判断equals方法的返回结果 equals方法判断为false,无法判断hashCode方法返回的哈希值是否相等

Read more

Oracle获取日期

SQL例子 获取当前日期 update t_project_app set proctm = sysdate where py_project_type = 2; 获取指定日期 update t_project_app set proctm = to_date('2016-05-26','yyyy-mm-dd') where py_project_type = 2; 日期转换字符串,可用to_char函数

Read more