MyBatis

您所在的位置:网站首页 分组查询怎么用函数表示 MyBatis

MyBatis

2024-07-04 05:51| 来源: 网络整理| 查看: 265

本博客背景为Java环境。MyBatis-Plus在日常开发中经常使用,但有时候太久不使用还是会忘记。以此记录,提醒自己~不定期更新~

1、使用方法示例

使用非常简单易上手,根据你需要的数据库交互需求以及交互动作,把条件写在wrapper中,后续对应获取所需内容或操作即可。

String userId = "123"; //定义一个新的queryWrapper QueryWrapper wrapper = new QueryWrapper(); //在数据库中匹配对应user_id为123的数据 wrapper.eq("user_id", userId); //统计该数目并赋值给userCount long userCount = usergMapper.selectCount(userWrapper); 2、语法详解 2.1 基本语法

基本语法包括查询指定字段、精确匹配、模糊匹配、与查询、或查询、比较函数(大于、小于等)、排序、分组查询、拼接自定义sql语句等。 所有数据库条件组合可以使用链式会比较便捷一些。

QueryWrapper queryWrapper = new QueryWrapper(); //查询指定字段 queryWrapper.select("name", "user_id","position"); //精确查询匹配 queryWrapper.eq("user_id", userId); //模糊查询 queryWrapper.like("create_date",date); //不查询position这个字段 queryWrapper.select(User.class,item -> !item .getColumn().equals("position")); //查询position不为管理员的用户 queryWrapper.select("position").notLike("position","管理员"); //and与查询;or或查询 queryWrapper.and(wrapper -> wrapper.eq("type","类型").or().eq("type","类型2")); //原符号 < >= //对应函数 lt() le() gt() ge() ne() //根据条件查询,比较查询 queryWrapper.le("create_date",date); //StringUtils.isNotBlank()方法是判断传入的值是否为空,为空返回false,此句不执行,不为空,返回true,此句执行,需注意引包为: //import org.apache.commons.lang.StringUtils; queryWrapper.le(StringUtils.isNotBlank(endTime), "time", endTime); //升序排列,从小到大 queryWrapper.orderByAsc("user_id"); //降序排列,从大到小 queryWrapper.orderByDesc("user_id"); //聚合函数,分组查询 queryWrapper.groupBy("type"); //拼接自定义sql语句,可用于多表自定义查询;c和t分别指两张表,需要再mapper中编辑sql指定表 queryWrapper.apply("t.user_id=c.user_id"); //限制第一行,只取第一行数据 .last("limit 1"); //链式 wrapper.and(wrapper -> wrapper.eq("name","张三").or().eq("name","李四")) .like("desc","男生").groupBy("type"); 2.2Lambda与简化

引入lambda,避免在代码中写类似的于user_name的硬编码。lambda也能解决绝大多数的查询问题和需求。

QueryWrapper wrapper = new QueryWrapper(); wrapper.lambda().eq(User::getuserName, userName); List users= userMapper.selectList(wrapper);

简化lambda的使用,可以改写成LambdaQueryWrapper构造器,语法如下:

LambdaQueryWrapper wrapper = new QueryWrapper().lambda(); wrapper.eq(User::getuserName, userName); List users= userMapper.selectList(wrapper);

将QueryWrapper.lambda()再简化

LambdaQueryWrapper wrapper = new LambdaQueryWrapper(); wrapper.eq(User::getuserName, userName); List bannerItems = userMapper.selectList(wrapper); 3、控制台打印sql

有时候写完之后还是想要能够自查准确性,这时候就可以在配置文件中添加如下语句,就可以在控制台查看对应的sql语句 #.yml文件

mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

#.properties文件

mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl 4、多表联查

可实现多表联查,但该办法会稍微麻烦一点。

//Impl中实现 QueryWrapper wrapper = new QueryWrapper(); wrapper.apply("t.user_id=c.user_id") List list = userMapper.getCount(wrapper); //UserMapper文件 @Select("select COUNT(*) from table1 c,table2 t " + "${ew.customSqlSegment} ") List getCount(@Param("ew") QueryWrapper wrapper); 5、IPage<实体>转 IPage<Vo> /** * 根据用户姓名分页查询用户 * * @param userQo * @return */ @Override public IPage selectPageAll(UserQo userQo) { int page = userQo.getPage(); int limit = userQo.getLimit(); IPage userIPage = cpWalletLogMapper.selectPage(new Page(page, limit), new LambdaQueryWrapper() .like(User::getName, userQo.getUserName()) .orderByAsc(User::getId) ); return userIPage .convert(User -> ConvertUtils.beanCopy(User, UserVo.class)); } 6、字段插入与更新(奇怪版) 6.1 有数据就更新,没数据就插入

此处实现查找数据库中是否有对应数据,若没有则插入数据,若有则更新对应数据。

User user = new User(); QueryWrapper wrapper = new QueryWrapper(); wrapper.eq("user_id", user.userId); Long count = UserMapper.selectCount(wrapper); if(count > 0){ user.setUpdateDate(date); UserMapper.update(user, wrapper); }else { user.setCreateDate(date); user.setUpdateDate(date); UserMapper.insert(user); } 6.2 只更新部分字段

此处实现只更新一部分字段。

UpdateWrapper updateWrapper = new UpdateWrapper(); updateWrapper.eq("id", 1); updateWrapper.set("status", 1); updateWrapper.set("nickname", "张三"); baseMapper.update(null, updateWrapper);

参考:https://ask.csdn.net/questions/7672292 https://blog.csdn.net/weixin_44684812/article/details/111151839 https://blog.csdn.net/luChenH/article/details/102459924 https://www.jb51.net/article/253088.htm https://blog.csdn.net/m0_37970699/article/details/115174467 https://blog.csdn.net/manba_yqq/article/details/125511075



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3