20201118+袁鑫
学习日志
知识总结
解析xml文件的四种方式:
-
DOM(Document Object Model)实现
优点:
1)允许应用程序对数据和结构做出更改。
2)访问是双向的,可以在任何时候在树中、上、下导航获取、操作任意部分的数据。
缺点:
解析XML文档的需要加载整个文档来构造层次结构,消耗内存资源大。
应用范围:
遍历能力强,常应用于XML文档需要频繁改变的服务中。Java使用步骤:
创建一个DocumentBuilderFactory对象。
创建一个DocumentBuilder对象。
通过DocumentBuilder的parse方法加载XML到当前工程目录下。
通过getElementsByTagName方法获取所有XML所有节点的集合。
遍历所有节点。
通过item方法获取某个节点的属性。
通过getNodeName和getNodeValue方法获取属性名和属性值。
通过getChildNodes方法获取子节点,并遍历所有子节点。
通过getNodeName和getTextContent方法获取子节点名称和子节点值。 -
DOM4J(Document Object Model for Java)实现(需要引入dom4j-1.6.1.jar)
优点:
性能很好
大量使用Java集合类,开发简便,同时也提供了一些提高性能的代替方法。
支持XPath。
缺点:
API比较复杂。
步骤:
1.创建SAXReader的对象reader
2.通过reader对象的read()方法加载books.xml文件,获取document对象
3.通过document对象获取根节点bookstore
4.通过element对象的elementIterator获取迭代器
5.遍历迭代器,获取根节点中的信息
6.获取book的属性名和属性值
7.通过book对象的elementIterator获取节点元素迭代器
8.遍历迭代器,获取子节点中的信息
9.获取节点名和节点值 -
JDOM(需要引入jdom.jar包)实现
特征:
1、仅使用具体类,而不使用接口。
2、API大量使用了Collections类。
步骤:
1.创建一个SAXBuilder的对象
2.创建一个输入流,将xml文件加载到输入流中
3.通过saxBuilder的build方法,将输入流加载到saxBuilder中
4.通过document对象获取xml文件的根节点
5.获取根节点下的子节点的List集合。 -
SAX(Simple API for XML)实现
优点:
1)不需要等待所有的数据被处理,解析就可以开始。
2)只在读取数据时检查数据,不需要保存在内存中。
3) 可以在某一个条件满足时停止解析,不必要解析整个文档。
4) 效率和性能较高,能解析大于系统内存的文档。
缺点:
1)解析逻辑复杂,需要应用层自己负责逻辑处理,文档越复杂程序越复杂。
2)单向导航,无法定位文档层次,很难同时访问同一文档的不同部分数据,不支持XPath.解析步骤:
获取一个SAXParserFactory的实例。
通过factory获取SAXParser实例。
创建一个handler对象。
通过parser的parse()方法来解析XML。
Mybatis
总结:我们不难看出无论是创建代理对象还是直接使用提供的CRUD方法,其本质都是得到Connection对象
执行对应的sql语句,最终返回封装结果集。只是注解方式和xml方式在传递sql语句和返回值类 型的方式上有区别而已。
mybatis 环境搭建步骤
- 创建 maven 工程
- 导入相关依赖
- 编写代码(实体类和持久层接口)
- 编写映射配置文件
- 编写 SqlMapConfig.xml
- 编写测试类
基于代理 Dao 实现 CRUD 操作
在持久层接口中添加 findById 方法
/**
* 根据id查询
* @param id id
* @return
*/
UserInfoModel findById(String id);
在用户的映射配置文件中配置
<!-- 根据 id 查询 -->
<select id="findById" resultType="com.itlaobing.model.UserInfoModel"parameterType="String">
select * from userinfo where id = #{id}
</select>
resultType 属性:用于指定结果集的类型。
parameterType 属性:用于指定传入参数的类型
{}:它代表占位符,相当于原来 jdbc 部分所学的 ? ,都是用于执行语句时替换实际的数据。具体 的数据是由#{}里面的内容决定的。#{}中是变量
如果此方法只有一个参数,占位符可以写成#{value},也可以写成变量名#{id}
#{}与${}的区别
#{}表示一个占位符号 通过#{}可以实现 preparedStatement 向占位符 ? 中设置值,自动进行 java 类型和 jdbc 类型转 换,#{}可以有效防止 sql 注入。 #{}可以接收基本类型值或 pojo 属性值。 如果 parameterType 传输单个基本类型值,#{}括号中可以是 value 或其它名称。
\({}表示拼接 sql 串 通过\){}可以将 parameterType 传入的内容拼接在 sql 中且不进行 jdbc 类型转换, \({}可以接收基 本类型值或 pojo 属性值,如果 parameterType 传输单个基本类型值,\){}括号中只能是 value。
心得:
今天mybatis学习的比昨天要简单一些 基本上都是怎么使用,理解还是很好理解的。
评论留言