1. 含义
是一个轻量级的ORM(对象关系映射)框架,建立java与数据库连接操作的持久层框架。
2. 封装了JDBC,JDBC操作过程
3. #{}和${}的区别
注意:使用#{}可以很好的避免sql注入(安全)
1)#{}
a. 将传入的数据解析成字符串,会自动补充引号。
b. 表示占位符,即sql中的?,实现的是向prepareStatement中的预处理语句中设置参数值。
2)${}
a. 表示sql语句,sql中不支持占位符表示的地方,都可使用。
b. 将传入的数据解析成sql语句,不自动补充引号,直接显示。
c. sql注入例子
3)模糊查询时使用#{}和${}
a. CONCAT('%', '#{value}', '%')
b. '%${value}%'
4)只能使用${}的场景
a. order by
b. group by
c. 查询时的字段名
d. 表名
4. 常用标签
1)if标签搭配test属性进行验证,做为单条件分支判断。
2)choose、when、otherwise标签搭配使用,使用test属性进行验证。
a. choose标签:顶层多条件分支标签,单独使用无意义。
b. when标签:内嵌于choose标签,当满足某个when条件时,执行对应代码块,并终止跳出choose标签,choose标签中至少存在一个when标签,否则无意义。
c. otherwise标签:内嵌于choose标签,当不满足所有when条件时,执行otherwise标签,choose标签中至多存在一个otherwise标签,可以不存在。
d. test属性:作为when和otherwise标签的属性,进行条件验证。
3)foreach标签,搭配collection、item、index、open、close、separator属性使用。
a. foreach标签:顶层遍历标签,单独使用无意义。
b. collection属性:必填,列表名称。
c. item属性:必填,遍历的每个变量值名称(对象或基础类型)。
d. index属性:索引。
e. open属性:循环内容开头拼接的字符串,非必填。
f. close属性:循环内容结尾拼接的字符串,非必填。
g. separator属性:每次循环的分隔符。
4)where标签,搭配if标签使用。
a. 子元素有内容才会返回where关键字。
b. 智能替换子句开头的and或or。
5)set标签,搭配if标签使用。
a. 子元素有内容才会返回set关键字。
b. 智能去除子句开头或结尾的逗号。
6)trim标签,搭配prefix、suffix、prefixesToOverride 、suffixesToOverride 属性使用。
a. prefix属性:前缀,当trim元素中存在内容时,插入指定前缀。
b. suffix属性:后缀,当trim元素中存在内容时,插入指定后缀。
c. prefixesToOverride属性:前缀去除,支持多个,当trim元素中存在内容时,把内容的前缀字符串去除。
d. suffixesToOverride属性:后缀去除,支持多个,当trim元素中存在内容时,把内容的后缀字符串去除。
7)sql+include标签
a. sql标签:定义可重用的sql语句片段,通过id属性来定位。
b. include标签的refid属性:通过引用sql标签的id名称匹配到可重用的sql语句片段。
8)resultMap标签
a. extends属性:可以实现存在继承关系的两个实体的映射,填父类resultMap的id或者父类命名空间.父类resultMap的id。
b. result子标签:普通结果映射。
c. association子标签:嵌套结果映射,多表现为一个对象。
d. collection子标签:嵌套结果映射,集合。