MyBatis两种多条件查询 和 四种模糊查询

多条件查询

// 多条件查询,方式一 
public List<User> findByIdAndUsername1(@Param("id") Integer id, @Param("username") String username); 
// 多条件查询,方式二 
public List<User> findByIdAndUsername2(User user);
<!-- 多条件查询方式一 如果传递多个参数 parameterType属性省略不写... --> 
<select id="findByIdAndUsername1" resultType="cn.itcast.domain.User">
  select * from user where id = #{id} and username = #{username}
</select>

<!-- 多条件查询方式二 其实mybatis这哥们传递一个参数 parameterType也可以省略【不太建议...】 -->
<select id="findByIdAndUsername2" parameterType="cn.itcast.domain.User" resultType="cn.itcast.domain.User">
  select * from user where id = #{id} and username = #{username}
</select>

模糊查询

// 模糊查询,方式一 
public List<User> findByUsername1(String username); 
// 模糊查询,方式二 
public List<User> findByUsername2(String username);
 // 模糊查询,方式三 
public List<User> findByUsername3(String username);
 // 模糊查询,方式四 
public List<User> findByUsername4(String username);
<!--模糊查询,方式一 java代码与sql语句有耦合 --> 
<select id="findByUsername1" parameterType="string" resultType="User">
  select * from user where username like #{username}
</select>

<!--模糊查询,方式二【了解】 mysql5.5版本之前,此拼接不支持多个单引号 oracle数据库,除了别名的位置,其余位置都不能使用双引号 -->
<select id="findByUsername2" parameterType="string" resultType="User">
  select * from user where username like "%" #{username} "%"
</select>

<!--模糊查询,方式三【此方式,会出现sql注入...】 ${} 字符串拼接,如果接收的简单数据类型,表达式名称必须是value -->
<select id="findByUsername3" parameterType="string" resultType="User">
  select * from user where username like '%${value}%'
</select>

<!--模糊查询,方式四【掌握】 使用concat()函数拼接 注意:oracle数据库 concat()函数只能传递二个参数... 可以使用函数嵌套来解决 -->
<select id="findByUsername4" parameterType="string" resultType="User">
  select * from user where username like concat(concat('%',#{username}),'%')
</select>

 注意:

从四种like查询中引出问题,${}和#{}的不同

${} :底层 Statement
  1. sql与参数拼接在一起,会出现sql注入问题
  2. 每次执行sql语句都会编译一次
  3. 接收简单数据类型,命名:${value}
  4. 接收引用数据类型,命名: ${属性名}
  5. 字符串类型需要加 '${value}'

#{} :底层 PreparedStatement
  1. sql与参数分离,不会出现sql注入问题
  2. sql只需要编译一次
  3. 接收简单数据类型,命名:#{随便写}
  4. 接收引用数据类型,命名:#{属性名}

posted @ 2020-08-13 21:34  一半人生  阅读(1037)  评论(0编辑  收藏  举报