Тип значения bool тега <if> в mybatis считается ложным.

MyBatis

Тип значения bool тега в mybatis считается ложным.

Я ненавижу некоторые статьи Baidu, просто Ctrl+C и Ctrl+V. И это все еще не решает проблему.

Вчера реализована функция поиска статей по их идентификатору или псевдониму.

Сначала для запроса использовался пример mybatis, и оценивался параметр artName, если это чистое число, то опрашивается по Id, иначе по псевдониму. При запросе статей необходимо связывать и запрашивать теги классификации статей, поэтому я предпочитаю использовать сопоставление оператора select с запросом, но я не хочу писать два метода запроса, поэтому я использую динамический sql в mybatis.

/**
 * 查询文章
 * @param artName id 或 别名
 * @param byId 如果是 true 则按照id查询
 *             否则 按照别名查询
 * @return
 */
public Article selectByArtName(@Param(value = "artName") String artName,
                          @Param(value = "byId") Boolean byId);

В Mapper определен метод, который имеет два параметра: artName и byId.artName представляет идентификатор или псевдоним, а byId указывает, следует ли запрашивать идентификатор.

При оценке логического значения byId значение false недопустимо, оно было найдено в кругу на Baidu и широко используется.

<if test="byId != null">
    a.id = #{artName}
</if>

Таким образом, он выполняется нормально, когда byId=true, но не вступает в силу, когда он равен false. Используйте тег после

<choose>
	<when test="byId">
		a.id = #{artName}
	</when>
	<otherwise>
		a.alias = #{artName}
	</otherwise>
</choose>

byId сам по себе является логическим значением и не нуждается в оценке.

Уведомление:ById не нужно добавлять #{}, иначе false будет недействительным. Если добавить #{}, при сравнении с другими значениями

как:#{byId} == trueБудет сообщено об ошибке нулевого указателя, если она написана как#{byId} == 'true'Он сообщит, что Linkhashmap не может быть преобразован в ошибку типа String.