Dynamische SQL- und Fuzzy-Abfrage von Mybatis

dynamisches SQL

Wo

<select id="queryUserByName" resultMap="userMap">
	select user_id, user_name, user_pwd, user_realname, user_sex, user_age
	from users
	where 1=1
	<if test="userSex != null">
		and user_age = #{userSex}
	</if>
	<if test="userMinAge != null">
		and user_age &gt;= #{userMinAge}
	</if>
	<if test="userMaxAge != null">
		and user_age &lt;= #{userMaxAge}
	</if>
	order by user_age
</select>
<select id="queryUserByName" resultMap="userMap">
	select user_id, user_name, user_pwd, user_realname, user_sex, user_age
	from users
	<where>
		<if test="userSex != null">
			and user_age = #{userSex}
		</if>
		<if test="userMinAge != null">
			and user_age &gt;= #{userMinAge}
		</if>
		<if test="userMaxAge != null">
			and user_age &lt;= #{userMaxAge}
		</if>
	</where>
	order by user_age
</select>

trimmen

<select id="queryUserByName" resultMap="userMap">
	select user_id, user_name, user_pwd, user_realname, user_sex, user_age
	from users
	<trim prefix="where" prefixOverrides="and | or" suffix="order by user_age">
		<if test="userSex != null">
			and user_age = #{userSex}
		</if>
		<if test="userMinAge != null">
			and user_age &gt;= #{userMinAge}
		</if>
		<if test="userMaxAge != null">
			and user_age &lt;= #{userMaxAge}
		</if>
	</trim>
</select>

für jede

<select id="queryUserByName" resultMap="userMap">
	select user_id, user_name, user_pwd, user_realname, user_sex, user_age
	from users
	where user_name in
	<foreach collection="list" item="userName" separator="," open="(" close=")">
		#{userName}
	</foreach>
</select>

Fuzzy-Abfrage

  • ${key}Zeigt das Abrufen von Parametern an. Ermitteln Sie zunächst den Wert des Parameters und fügen Sie ihn in die SQL-Anweisung ein. Kompilieren Sie dann die SQL-Anweisung und führen Sie sie aus.
  • #{key}Zeigt das Abrufen von Parametern an. Schließen Sie zuerst die SQL-Kompilierung (Vorkompilierung) ab und setzen Sie dann die erhaltenen Parameter nach der Vorkompilierung in SQL ein, um eine SQL-Injection zu vermeiden.

dao

// 模糊查询需要使用${}取值。与sql进行拼接
// 在使用${}时,即使只有一个参数也需要使用@Param注解声明参数的key (非String的对象参数可以不用声明)
// 使用HashMap
List<User> queryUserNameByKeyWord(HashMap params);
// 使用String
List<User> queryUserNameByKeyWord(@Param("kw") String keyWord);

Mapper

<select id="queryUserNameByKeyWord" resultMap="userMap">
    select user_id, user_name, user_pwd, user_realname, user_sex, user_age
    from users
    where user_name like '%${keyWord}%'
</select>
<!-- 如果参数是String类型,需要指定parameterType -->
<select id="queryUserNameByKeyWord" parameterType="java.lang.String" resultMap="userMap">
    select user_id, user_name, user_pwd, user_realname, user_sex, user_age
    from users
    where user_name like '%${kw}%'
</select>

prüfen

@Test
public void testQueryUserNameByKeyWord() {
    
    
	UserDAO userDAO = MyBatisUtil.getMapper(UserDAO.class);
	HashMap<String, Object> params = new HashMap<>();
	params.put("keyWord", "s");
	List<User> users = userDAO.queryUserNameByKeyWord(params);
	List<User> users = userDAO.queryUserNameByKeyWord("s");
	for (User user : users) {
    
    
		System.out.println(user);
	}
}

Supongo que te gusta

Origin blog.csdn.net/weixin_55556204/article/details/125371314
Recomendado
Clasificación