MyBatis 的强大特性之一便是它的动态 SQL。
动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似。主要由以下几种元素。
- if
- where
- trim
- choose (when, otherwise)
- set
- foreach
- bind
特殊字符转换:
将所有的元素放在where标签内,where元素会自动去除首位的and或or。注意是首位的and或者or。
foreach
用来对集合进行遍历
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.pjf.mybatis.dao.HotelMapper"> <resultMap type="com.pjf.mybatis.po.Hotel" id="myHotel"> <id column="id" property="id" jdbcType="INTEGER" /> <result column="hotel_name" property="hotelName" jdbcType="VARCHAR" /> <result column="hotel_address" property="hotelAddress" jdbcType="VARCHAR" /> <result column="price" property="price" jdbcType="INTEGER" /> </resultMap> <!-- resultMap使用 --> <select id="getHotel" resultMap="myHotel"> select* from hotel where id in <!-- collection 指要遍历的集合 1. 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list 2. 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array 3. 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key item 将遍历出的元素赋值给指定的变量 separator 每个元素之间的分隔符 open 遍历出的结果拼接出一个开始符 close 遍历出的结果拼接一个结束符 index 索引 --> <foreach collection="list" item="ids" separator="," open="(" close=")"> #{ids} </foreach> </select> </mapper>