一、XML转义字符
XML只有5个转义符:
转义符 | 表达式 | 说明 |
---|---|---|
< |
< | 小于号 |
> |
> | 大于号 |
& |
& | 和 |
' |
’ | 单引号 |
" |
" | 双引号 |
值得注意的是:
转义序列字符之间不能有空格;
转义序列必须以”;”结束;
单独出现的”&”不会被认为是转义的开始;
区分大小写。
但是严格来说,在XML中只有”<”和”&”是非法的,其它三个都是可以合法存在的,但是,把它们都进行转义是一个好的习惯。
用转义字符进行替换:
例如,查询年龄<=30 且 >=18的用户 :
SELECT * FROM user WHERE age <= 30 AND age >= 18
二、<![CDATA[ ]]> 符号
被<![CDATA[]]>这个标记所包含的内容将表示为纯文本,比如<![CDATA[<]]>表示文本内容“<”。
不管怎么样,转义前的字符也好,转义后的字符也好,都会被xml解析器解析,为了方便起见,使用<![CDATA[]]>来包含不被xml解析器解析的内容。
但要注意的是:
此部分不能再包含”]]>”;
不允许嵌套使用;
"]]>"这部分不能包含空格或者换行。
所以上面的SQL可以写成这个:
<![CDATA[ SELECT * FROM user WHERE age <= 30 AND age >= 18 ]]>
最后,说说<![CDATA[]]>和xml转移字符的关系,它们两个看起来是不是感觉功能重复了?
是的,它们的功能就是一样的,只是应用场景和需求有些不同:
<![CDATA[]]>不能适用所有情况,转义字符可以;
对于短字符串<![CDATA[]]>写起来啰嗦,对于长字符串转义字符写起来可读性差;
<![CDATA[]]>表示xml解析器忽略解析,所以更快。
我们在使用mybatis时,会用到Mapper接口映射Mapper.xml,具体怎么映射的我们不知道。只知道要这么用,下面我们开始分析mybatis代码。
在分析具体代码时,我们有必要先看一下jdk动态代理。
简单点说:jdk动态代理,可以让我们在不实现接口的情况下,去动态生成接口的实现。
传统上我们要去实现接口,都会创建具体的实现类.java, 而jdk动态代理,可以让我们不用创建具体的实现类.java,就可以生成接口实现。
代码如下:
MyBatis 真正的力量是在映射语句中。这里是奇迹发生的地方。对于所有的力量,SQL 映射的 XML 文件是相当的简单。当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大约 95%的代码量。MyBatis 的构建就是聚焦于 SQL 的,使其远离于普通的方式。
SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序):
cache – 配置给定命名空间的缓存。
cache-ref – 从其他命名空间引用缓存配置。
resultMap – 最复杂,也是最有力量的元素,用来描述如何从数据库结果集中来加载你的对象。
parameterMap – 已经被废弃了!老式风格的参数映射。内联参数是首选,这个元素可能在将来被移除。这里不会记录。
sql – 可以重用的 SQL 块,也可以被其他语句引用。
insert – 映射插入语句
update – 映射更新语句
delete – 映射删除语句
select – 映射查询语句