服务端开发实战我爱编程

MyBatis-Mapper.xml(输入输出映射动态sql)讲

2017-07-11  本文已影响2530人  暗物质

Mapper.xml映射文件

Mapper.xml映射文件定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心。

输入映射

通过parameterType 指定输入参数类型,类型可以是简单类型、hashMap、pojo包装类型。

<!-- 传递hashmap综合查询用户信息 -->
<select id="findUserByHashmap" parameterType="hashmap" resultType="user">
    select * from user where id=#{id} and username like '%${username}%'
</select>

上面大括号中的 id 和 username 就是hashmap的key

输出映射

2、使用resultMap作为statement的输出映射类型

3、mapper.java

4、测试


5、总结:
1、resultType可以指定POJO将查询结果映射为POJO,但需要POJO的属性名和sql查询的列名一致方可映射成功。
2、如果sql查询字段名和POJO的属性名不一致,可通过resultmap将字段名和属性名作一个对应关系,resultmap实质上还需要将查询结果映射到POJO对象中。
3、resultmap 可以将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询,完成高级输出结果映射。

动态sql

什么是动态sql

mybatis的核心就是对sql语句进行灵活操作:可以通过表达式进行判断,对sql进行灵活拼接、组装。

需求

用户信息综合查询列表和用户信息查询列表总数这两个statement的定义使用动态sql。

对查询条件进行判断,如果输入参数不为空才进行查询条件拼接。

mapper.xml

测试代码

sql片段

将上面实现的动态sql判断代码块抽取出来,组成一个sql片段。其他的statement中就可以直接引用sql片段。方便开发。

在mapper.xml中定义的 statement 中引用 sql 片段

foreach

向sql传递数组或List,mybatis 使用 foreach 解析,如下:

在用户查询列表和查询总数的 statement 中增加多个id输入查询。

sql语句如下:

SELECT * FROM user WHERE id=2 OR id=3 OR id=7

SELECT * FROM user WHERE id IN(2,3,7)

WHERE (id=2 OR id=3 OR id=7)在查询条件中,查询条件定义成一个sql片段,需要修改sql片段

上一篇 下一篇

猜你喜欢

热点阅读