zoukankan      html  css  js  c++  java
  • 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. 接收引用数据类型,命名:#{属性名}

  • 相关阅读:
    练习与突破
    HTML input type=file文件选择表单的汇总(一)
    webpack学习之—— Configuration(配置)
    webpack学习之—— Plugins
    webpack学习之—— Loaders
    webpack学习之——Output
    webpack学习之——Entry Points(入口起点)
    CSS3 3D transform变换
    get和post请求的区别
    日期格式之——剩余时间(天,小时,分,秒)的计算方法
  • 原文地址:https://www.cnblogs.com/xiaozhang666/p/13498978.html
Copyright © 2011-2022 走看看