11.16Java学习进度

数据库优化,XML:

数据库优化:

  1. 在进行表格查询时,where子句中的条件执行顺序是从左至右,清除数据量较大的条件应该放在左边.(特别注意:笛卡尔积消除条件必须放在左边)
    10000 -->9999 --->9998 --->999
    10000 --->999 --->998
    
  2. 在进行表格查询时,列名列表应避免号! 数据库在执行查询操作时,会先将号展开,转换为所有的列名,再进行查询.

  3. 再进行表格查询时,能使用where条件筛选的数据,应尽量避免使用having子句来筛选,因为where条件执行在having之前,再早起筛选掉大量数据,可以让程序执行的更顺畅.

  4. 在进行多表查询时,查询的表顺序是从左至右的,应把表中数据量最少的表放在查询的最右边.

  5. 进行多表查询时,应尽可能的给所有表添加别名,能明确的区分有冲突的列.

  6. 在使用事务时,应尽量多地commit,尽量早地commit.
    原因:事务在未提交是,数据库会耗费大量内存,来缓存未提交的SQL结果.

  7. 尽可能多的使用函数 来提高SQL执行的效率.

  8. SQL语句编写时,除字符串以外,应使用大写字母.
    因为SQL语句执行时,会先将小写字母转化为大写字母再执行.

  9. 应尽可能少的访问数据库(多次数据访问的结果可能相同,如果缓存起来,可以提高程序的执行效率)

  10. 在索引列上,尽可能避免使用not来判断,not关键字入股判断了索引列,会导致此次查询索引失效,转而使用全表扫描的方式查询.

  11. 在索引列上,不能使用算数运算符,算数运算也会导致索引列使用,使用全表扫描的方式进行查询.

  12. 在查询数据时,如果需要使用>或<的条件,应替换为>=或<=
    原因是>和<符号,查询时是按照>=和<=进行查询,然后再撤去=的结果.

XML:

X(extensible:可扩展的)M(markup标记/标签)L(language语言)
可扩展标记语言

XML语言的作用:

  1. 普通文件太慢,所以采用xml文件保存软件中的数据.
  2. 网络上传递数据.
  3. 配置文件 .properties, .xml

XML的特点:

  1. 平台无关性, 独立的语言
  2. 90%的语言都支持xml,不支持的10%语言发布的时候,xml还没出世.
  3. xml具有自我描述性(内容自定义)
    (1)html文件中,所有标签(元素)都是官方定义好的,我们直接引用
    (2)xml文件中,所有元素自定义

xml语法规则:

  1. xml文件中必须有根元素
  2. xml标签(元素)必须有开闭
  3. xml标签(元素)对大小写敏感
  4. xml标签(元素)必须正确的嵌套
  5. xml标签(元素)的属性必须加引号(单双引都可以)

xml注释方式:

<!--xml注释-->

CDATA区:
在xml中书写特殊符号时,报错,忽略其本意,编程普通字符串

<![CDATA[xxxx]]>
<xx><![CDATA[ 10<5 ]]></xx>

DTD文件:
Document Type Definition(文档类型定义)
DTD的目的: 帮助你编写合法的代码 (可以规范编写的代码)
DTD和XML之间的关系:
类(人类)和对象(我)的关系
数据库表和行(一条记录)的关系

XSD文件:
xsd是xml结构定义
xsd是dtd的替代品,比dtd高端
xsd的优点:
xsd的代码基于xml,没有专门的语法,和xml一样的解析和处理
xsd支持一系列的数据类型

解析XML:

解析xml共有四种方式:

  1. DOM解析
  2. SAX解析
  3. JDOM解析
  4. DOM4J解析

前两种属于基础方法,是官方提供的与平台无关的解析方式;
后两种属于扩展方法,他们是在基础的方法之上扩展出来的,只适用于java平台.

DOM解析:

  1. dom解析的原理解析xml时候,把文档中的所有元素按照期出现的层次关系,在内存中构造出树形结构.
  2. dom的有点就是可以遍历和修改节点的内容
  3. 缺点是内存压力较大,解析较慢

SAX解析:

  1. 是一种xml解析的替代方法
  2. 相对比dom方式,sax是一种速度更快,更有效的方法
  3. 不能修改节点内容

JDOM解析:

  1. 仅适用具体的类,而不用接口,不灵活

DOM4J:

  1. JDOM的一种智能分支,合并了许多超出基本xml文档功能
  2. 著名的底层框架hibernate就是用dom4j来解析

dom4j性能最高,其次是SAX,dom和jdom表现不好(解析10M大小的xml文件,就内存溢出了。)

DOM4J解析:需要引包:

// 1. 加载xml文件到jvm中,形成数据流
InputStream is TestXML_1.class.getClassLoader().getResourceAsStream("test4.xml");

// 2. 创建解析对象  
SAXReader sax = new SAXReader();  

// 3. 获得文档对象(整个xml文件)[将数据流转换成一个文档对象]  
Document doc = sax.read(is);  

// 4. 获得根元素  
Element root = doc.getRootElement();  

// 5. 获得根元素下的所有子元素
List<Element> list = root.elements();

//System.out.println(list.size());  
//list.forEach( s -> System.out.println(s));  

for(Element e1: list){
    List<Element> list2 = e1.elements();
    for(Element e2 : list2){
        System.out.println(e2.getName()+":"+e2.getData());
    }
}

常见错误:

  1. 文件位置错误: xml文件要放在src下
  2. 类型引用错误