MyBatis-多条件查询 AND模糊查询

1. 多条条件查询

方式一
    /*
        多条件查询方式一
     */
    public User findByIdAndUserName1(int id, String userName);
<!--多条件查询方式一
        使用 #{arg0}-#{argn} 或者 #{param1}-#{paramn} 获取参数
        -->
    <select id="findByIdAndUserName1" resultMap="userResultMap">
        select * from  user where id = #{arg0} and username = #{arg1}
    </select>

方式二
    /*
        多条件查询方式二
        使用注解,引入@Param() 注解获取参数, 注解括号中的值可以任意写,一般和形参名相同
     */
    public User findByIdAndUserName2(@Param("id") int id, @Param("username") String userName);
    
    <!--多条件查询方式二
        使用注解,引入@Param() 注解获取参数
        -->
    <select id="findByIdAndUserName2" resultMap="userResultMap">
        select * from  user where id = #{id} and username = #{username}
    </select>

方式二
    /*
        多条件查询方式三
     */
    public User findByIdAndUserName3(User user);

    <!--多条件查询方式三
   		使用pojo对象传递参数
   		大括号中的属性名需要与实体类中的属性名相同
        -->
    <select id="findByIdAndUserName3" resultMap="userResultMap" parameterType="com.zhoufengbin.domain.User">
        select * from  user where id = #{idabc} and username = #{usernameabc}
    </select>

模糊查询

方式一
    /*
        模糊查询:方式一
     */
    public List<User> findByUsername1(String username);
    <!--模糊查询:方式一
        由于实体类中的属性名与关系表中的字段名不同,因此需要使用resultMap属性。

        当传入参数为基本数据类型或String类型且只传入一个参数,#{}中的值可以任意填写。

        #{} 在mybatis中是占位符,引用参数值得时候会自动添加单引号。
     -->
    <select id="findByUsername1" resultMap="userResultMap" parameterType="string">
        select * from user where username like #{username}
    </select>
方式二
    /*
        模糊查询:方式二
     */
    public List<User> findByUsername2(String username);
    <!--模糊查询:方式二
        parameterType 当传入参数为基本数据类型或String类型且只传入一个参数,${}中的值只能填写为value。
        ${}: sql原样拼接,需要手动添加单引号。
    -->
    <select id="findByUsername2" resultMap="userResultMap" parameterType="string">
        select * from user where username like '${value}'
    </select>

3. ${} 与 #{} 区别【笔试题】

  • #{} :表示一个占位符号
    • 通过#{} 可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。
    • #{} 可以接收简单类型值或pojo属性值。
    • 如果parameterType传输单个简单类型值, #{} 括号中名称随便写。
  • ${} :表示原样拼接sql串
    • 通过${} 可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换,会出现sql注入问题。
    • ${} 可以接收简单类型值或pojo属性值。
    • 如果parameterType传输单个简单类型值, ${} 括号中只能是value。
    • 补充:TextSqlNode.java 源码可以证明
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值