like mybatis 用法_关于mybatis中llike模糊查询中#和$的使用

在mybatis中经常要写到like 查询,以前从来没有遇到什么问题,突然遇到一个问题,找了好长时间没找到,最后找到了,是关于#和$的使用的,总结如下:

name like  表达式    and    falg=#{falg}

本次示例中共两个条件,一个是name  like  表达式, 还有flag相等,这个是使用#{}占位符,没有任何问题,关键问题就是 表达式的书写.下面来研究下表达式的书写:

如果写成'%#{name}%' ,就会报错Parameter index out of range (2> number of parameters, which is 1). 这个错误,就是参数的问题,所以就查阅了一下资料,然后结合自己的实践,得到总结如下:

本次使用 mysql 5.5.27和mybatis3.2.7进行测试

1.表达式: name like"%"#{name}"%"

==>  Preparing: select * from bbs_brand WHERE namelike"%"?"%"and falg=? limit 0 , 10

==>Parameters: 莲(String), 1(Integer)

能够查询出来,没有问题,这是使用了占位符来占位,写成SQL就是: name like "%"'莲'"%"没有问题

2.表达式: name like '%${name}%'

Preparing:select count(0) from (select * from bbs_brand WHERE name like'%莲%' and falg=?) as total

Parameters: 1(Integer)

使用$进行字符串的拼接,直接把传入的值,拼接上去了,没有任何问题

3. 表达式: name likeconcat(concat('%',#{username}),'%')

==>  Preparing: select count(0) from (select *from bbs_brand WHERE name like

concat(concat('%',?),'%') and falg=?) as total

==>Parameters: 莲(String), 1(Integer)

这是使用了cancat进行字符串的连接,同时使用了#进行占位

转换成SQL就是: name like CONCAT(CONCAT('%','莲'),'%')

3. 表达式:name like CONCAT('%','${name}','%')

==>  Preparing: select count(0) from (select *from bbs_brand WHERE name likeCONCAT('%','莲','%') and falg=?) astotal

==>Parameters: 1(Integer)

对上面的表达式进行了简化,更方便了

4. 表达式:name like '%'||#{name}||'%'

这个不能满足要求,直接把数据库中的所有数据查询出来了,不符合我的要求,在mysql中||代表是or的意思

==>  Preparing: select count(0) from (select *from bbs_brand WHERE name like'%'||?||'%' and falg=?) as total

==>Parameters: 莲(String), 1(Integer)

关于$和#使用的第二个问题:

接口中方法:void deleteBrandByIds(@Param("ids")String  ids);

xml中:

update bbs_brand set is_display=0 where id IN(${ids})

这里只能够使用$ 进行字符串的拼接,而不是#.

当我们传入的字符串是1,3,5,7的时候,用#只能删除id为1的品牌,其他的就不能删除了,这是因为,使用了#,就是一个占位符了,经过编译后是

where id in(?)   加入字符串后是 where id in('1,3,5,7') 这种,在SQL中就只会删除一个,我们来看SQL的执行效果

也是只是删除一条记录的,

所以如果想使用#,请在xml中使用动态的SQL,,传递的参数使用List来进行循环遍历.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis-Plus 3.3 查询写法可以使用如下方式: 1. 根据主键查询单条记录 ```java User user = userMapper.selectById(1L); ``` 其,`userMapper` 是一个继承了 `BaseMapper<User>` 的接口,可以通过 Spring 注入或者 MyBatis 的 XML 映射文件配置。 2. 根据条件查询多条记录 ```java List<User> userList = userMapper.selectList(new QueryWrapper<User>() .eq("age", 18) .like("name", "Tom")); ``` 其,`QueryWrapper` 是 MyBatis-Plus 提供的条件构造器,可以通过链式调用构建查询条件。`selectList` 方法会返回符合条件的所有记录列表。 3. 分页查询 ```java Page<User> page = new Page<>(1, 10); IPage<User> userPage = userMapper.selectPage(page, new QueryWrapper<User>() .eq("age", 18) .like("name", "Tom")); ``` 其,`Page` 是 MyBatis-Plus 提供的分页对象,接收两个参数:当前页码和每页记录数。`selectPage` 方法会返回符合条件的分页对象,其包含了符合条件的记录列表和分页信息。 4. 自定义 SQL 查询 ```java List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>() .select(User::getId, User::getName) .eq(User::getAge, 18) .like(User::getName, "Tom")); ``` 其,`LambdaQueryWrapper` 是基于 Java 8 Lambda 表达式的条件构造器,可以通过方法引用构建查询条件。`select` 方法可以指定需要查询的列,可以使用实体类的属性名或者方法引用。`selectList` 方法会返回符合条件的所有记录列表。 以上是 MyBatis-Plus 3.3 常用的查询写法,根据实际需求选择适合的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值