在使用mybatis的时候,经常会使用到一些特殊的标签,这些标签,可以动态改变sql语句的查询条件,查询的字段等,通过使用这些特殊的标签,在mybatis的数据库sql语句时,就像在写普通的java程序一样,可以对输入进行一些判断,选择操作等。
下面就一次说一下这些标签的使用!
首先看一下if标签:
<select id="selectWithIf" parameterType="map" resultMap="BaseResultMap">
SELECT * FROM city <if test="id!=0">WHERE city.id=#{id}</if> <if test="id==0" >limit 2</if>
</select>
根据这个语句可以看出,当id为0的时候会查出两条记录,当指定id的时候最多只能查询一条记录。首先需要明白if语句中的id代表的是什么?
在参数类型上指定了类型为map,其实也可以是其他的,但是传入的参数对象中必须有一个属性名称叫做id或者有一个以id为key的值,否则在解析if标签的时候会报错。
在此次测试中使用的是map,传入的map如下:
在service中,对传入的id进行封装,封装成一个map对象,保证if语句可以正常解析
public List<City> selectWithIf(int id){
Map<String,Integer> param = new HashMap<String, Integer>();
param.put("id",id);
return cityMapper.selectWithIf(param);
}
当传入id位0时返回结果如下:
{
"status": "200",
"timestamp": "1525609407834",
"data": [
{
"id": 1,
"name": "Kabul",
"countrycode": "AFG",
"district": "Kabol",
"population": 1780000
},
{
"id": 2,
"name": "Qandahar",
"countrycode": "AFG",
"district": "Qandahar",
"population": 237500
}
]
}
当传入id为1时,返回如下:
{
"status": "200",
"timestamp": "1525610317259",
"data": [
{
"