10.3 传递hashmap
parameterType指定hashmap传递输入参数,#{}和${}中引用map的key。
Sql映射文件定义如下:
10.4 小结:
如果使用动态代理方式,mapper接口的输入参数只有一个,是否有局限性?
Mapper就是dao,dao不是service,dao中没有业务逻辑,编写的dao具有公用的特性,被service公用。 即使mapper接口方法输入参数只有一个,建议使用包装对象(注意不要使用map),使用组合方式将pojo包装进来。
对于parameterMap已经过期不建议使用。
11 resultType
11.1 返回pojo
resultType:将sql查询结果集映射为java对象。要求sql查询的字段名和resultType指定pojo的属性名一致,才能映射成功。
如果全部字段和pojo的属性名不一致,映射生成的java对象为空,只要有一个字段和pojo属性名一致,映射生成的java对象不为空。
结论:sql查询字段名和pojo的属性名一致才能映射成功。
不管select返回的是单个对象还是集合对象,resultType要指定单条记录映射的java对象。
11.2 返回简单类型
如果sql查询的结果集只有一行且一列,resultType可以返回简单类型。
11.3 返回hashmap
输出pojo对象可以改用hashmap输出类型,将输出的字段名称作为map的key,value为字段值。 ? Mapper.xml
? Mapper.java
Public Map findUserListReturnMap(QueryVoqueryVo);
建议不使用map作为返回值,因为需要对key在代码中硬编码。
11.4 小结
1、 如果返回pojo,要求sql查询字段名和pojo的属性名一致。
2、 不管select返回的是单个对象还是集合对象,resultType指定相同的映射类型(单条记录映射的java对象
类型。)
企业中常用resultType,针对sql查询结果定义pojo即可。
12 动态sql
Mybatis提供了很多标签,用于拼接sql语句。
12.1 if
判断,如果条件满足,进行sql拼接。
12.2 sql片段
sql片段:可以将一些sql定义成一个片段,可以被其它statement引用。
Sql片段定义:
开发经验:
建议以单表抽取sql,sql片段的可重用性才高。
Sql片段使用:
12.3 foreach
需求:传入多个id查询用户
Sql语句: 两个方法:
SELECT * FROM USER WHERE username LIKE '%张%' AND (id =10 OR id =89 OR id=16)
SELECT * FROM USER WHERE username LIKE '%张%' id IN (10,89,16)
相关推荐: