使用MyBatis或者MyBatis-Plus解决MySQL数据表某个字段存入数组进行查询的问题,记录一下具体解决方案

最近单位有个需求,有一个分类的表,这个分类表要对某个表中的数据进行分类,这个要分类的表,类似于商品表,要求商品表的单条数据指向不止一个分类,存数据的时候,前端传递用的array,到数据库后用的是[“1”,“2”,“3”]这种ID存入的形式,在解决查询数据时,卡了两天,这里记录一下解决过程。
通用的传入数据ID查询对应的数据肯定是不行,一查肯定是找不到数据:下面是解决步骤:
1.检查 sql 查询语句,最好是将查询语句 copy 到查询面板,看看是否能传递参数查到数据,目前数据库(MySQL) 5.7+ ,可以对数组数据进行json解析,我这里用的语句是:JSON_EXTRACT(表存放数组的字段, ‘$’ ) LIKE ‘%查询参数%’ —> 最后查到数据
2.将查询语句移植到程序中:
mybatis: --> and JSON_EXTRACT(对应表字段, ‘$’ ) LIKE concat(‘%’, #{xxx}, ‘%’)
mybatis-plus: --> lqw.apply(“json_extract(对应表字段,‘$’) like '%”+ 传递的对应的实体类映射字段 +“%'”)
以上就是整个解决过程,实际上并不难,只是需要用到 mysql 的解析 json 的特性。
### 回答1: 我推荐使用MyBatis-Plus的LocalDateTimeTypeHandler来处理日期和时间,它可以轻松地将LocalDateTime类型的数据存储到MySQL数据库,而且可以轻松地通过MyBatis-Plus的API获取上月的时间。 ### 回答2: 使用Mybatis-Plus查询上个月的时间可以按照以下步骤进行操作: 步骤1:首先,获取当前时间,并利用Java提供的Calendar类进行日期计算。可以使用以下代码获取当前时间并计算上个月的时间: ```java import java.util.Calendar; import java.util.Date; public class Main { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.add(Calendar.MONTH, -1); Date lastMonth = calendar.getTime(); System.out.println(lastMonth); } } ``` 步骤2:接下来,根据上个月的时间作为查询条件进行数据库查询使用Mybatis-Plus进行查询时,可以通过Wrapper对象定义查询条件。具体的代码如下: ```java import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; ... Date lastMonth = ...; // 上个月的时间 QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.ge("create_time", lastMonth); // 查询大于等于上个月的时间 List<User> userList = userMapper.selectList(queryWrapper); ``` 这里的例子假设我们使用Mybatis-Plus框架进行用户表(User)的查询,create_time字段表示记录创建的时间。根据查询条件`create_time >= 上个月时间`,使用`selectList()`方法进行查询,并将结果保存在userList列表中。 请注意,具体的代码细节可能会因为数据库表以及实体类的定义而有所不同,请根据实际情况进行相应的调整。以上就是使用Mybatis-Plus查询上个月时间的方法。 ### 回答3: 在使用Mybatis-Plus查询上个月的时间,我们可以借助Java的日期时间类来完成。首先,我们需要获取当前日期的上个月时间,可以使用Java 8的日期时间API的`LocalDate`类来进行操作。下面是一个示例代码: ```java // 获取当前日期 LocalDate currentDate = LocalDate.now(); // 获取上个月的时间 LocalDate lastMonth = currentDate.minusMonths(1); // 获取上个月的起始时间和结束时间 LocalDate firstDayOfMonth = lastMonth.withDayOfMonth(1); // 上个月的第一天 LocalDate lastDayOfMonth = lastMonth.withDayOfMonth(lastMonth.lengthOfMonth()); // 上个月的最后一天 // 转换为需要的格式,如字符串、日期对象等 String firstDayOfMonthStr = firstDayOfMonth.toString(); String lastDayOfMonthStr = lastDayOfMonth.toString(); ``` 上述代码中,我们首先获取当前日期`LocalDate.now()`,然后通过`minusMonths(1)`方法减去一个月得到上个月的日期。接着,通过`withDayOfMonth(1)`方法获取上个月的第一天,`withDayOfMonth(lastMonth.lengthOfMonth())`方法获取上个月的最后一天。最后,根据需要将日期转换为字符串或日期对象即可。 在Mybatis-Plus中,可以使用`QueryWrapper`或`LambdaQueryWrapper`类组装查询条件,调用相应的查询方法查询数据库中符合条件的数据。结合上述获取的上个月时间,可以编写类似如下的代码: ```java QueryWrapper<Entity> queryWrapper = new QueryWrapper<>(); queryWrapper.between("create_time", firstDayOfMonth, lastDayOfMonth); List<Entity> resultList = entityMapper.selectList(queryWrapper); ``` 以上代码中,`QueryWrapper`对象`queryWrapper`用于设置查询条件,通过`between`方法指定`create_time`字段在上个月的范围内。最后,调用`selectList`方法执行查询,将符合条件的数据存入`resultList`中。 需要注意的是,以上代码只是示例,需要根据具体数据表和实体进行相应的调整。同时,Mybatis-Plus还提供了更多强大的查询方法,可以根据具体需求选择合适的方法来完成查询操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值