Mybatis 不同类型sql 语句执行结果:
Select:
- 查询结果为空时,如果是基本类型返回值为默认的初始化值 ;类对象返回值为null;Map、List 等集合类对象返回值为new 空对象。
Update/Delete:
- 影响结果为空时,返回值为0;影响结果不为空时,返回值为影响条数。
Mybatis xml文件中ResultMap 与 ResultType区别
- ResultType:当使用resultType做SQL语句返回结果类型处理时,对于SQL语句查询出的字段在相应的pojo中必须有和它相同的字段对应,而resultType中的内容就是pojo在本项目中的位置
- resultMap:当使用resultMap做SQL语句返回结果类型处理时,通常需要在mapper.xml中定义resultMap进行pojo和相应表字段的对应。
Mybatis xml文件中parameterType
- 基本数据类型:int,string,long,Date;
- 复杂数据类型:类和Map
基本数据类型:#{参数} 获取参数中的值
复杂数据类型:#{属性名} ,map中则是#{key}
Mybatis xml #{参数} ${参数}区别
1.#{}是预编译处理,$ {}是字符串替换。
Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;
Mybatis在处理$ {}时,就是把$ {}替换成变量的值。
2.使用#{}可以有效的防止SQL注入,提高系统安全性。
MyBatis排序时使用order by 动态参数时需要注意,用$而不是#
- #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。
- $将传入的数据直接显示生成在sql中。
- #方式能够很大程度防止sql注入。
- $方式无法防止Sql注入。
- $方式一般用于传入数据库对象,例如传入表名。
- #{}方式一般用于传入字段值。
- 一般能用#的就别用$。
Mybatis 动态sql中OGNL语言
mybatis 动态sql中使用的是OGNL语句,对于不同的类型取值方式不一样:
- 8大基本数据类型:_parameter
- 自定义类型:属性名
- 集合:数组(array) List(list) Map(_parameter)
foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有一下3种情况:
如果传入的是单参数且参数类型是一个List的时候,collection属性值为list .
如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array .
如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在MyBatis里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key.
从集合中取出一种类型:
数组:array[索引]
队列:List[索引]/list[].属性名
Map: _parameter.key/key.属性名(_parameter 可省略)