@SpringBootTest
class Mybatisplus02DqlApplicationTests {
@Autowired
private UserDao userDao;
@Test
void testGetAll(){
QueryWrapper<User> lqw = new QueryWrapper<User>();
lqw.select("count(*) as count,tel");
lqw.groupBy("tel");
List<Map<String, Object>> list = userDao.selectMaps(lqw);
System.out.println(list);
groupBy分组,最终的sql语句为:
SELECT count(*) as count,tel FROM user GROUP BY tel
聚合与分组查询无法使用lambda表达式完成
MP只是对MyBatis增强,如果MP实现不了,我们可以直接在DAO接口中使用MyBatis的方式实现
三、等值查询
需求:根据用户名和密码查询用户信息
@SpringBootTest
class Mybatisplus02DqlApplicationTests {
@Autowired
private UserDao userDao;
@Test
void testGetAll(){
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
lqw.eq(User::getName, "Jerry").eq(User::getPassword, "jerry");
User loginUser = userDao.selectOne(lqw);
System.out.println(loginUser);
eq():相当于 = ,对应的sql语句为
SELECT id,name,password,age,tel FROM user WHERE (name = ? AND password = ?)
selectList:查询结果为多个或者单个
selectOne:查询结果为单个
public void selectById() {
UserInfo userInfo = userInfoMapper.selectById(123);
System.out.println(userInfo);
聚合查询(aggregate)
聚合查询函数是对一组值执行计算,并返回单个值。
Django 使用聚合查询前要先从 django.db.models 引入 Avg、Max、Min、Count、Sum(首字母大写)。
from django.db.models import Avg,Max,Min,Count,Sum # 引入函数
聚合查询返回值的数据类型是字典。
聚合函数 aggregate() 是 QuerySet 的一个终止子句, 生成的一个汇总值,相当于 count()。
使用 aggregate() 后,数据类型就变为字典
相信我们经常会遇到这样的场景:想要了解双十一天猫购买化妆品的人员中平均消费额度是多少(这可能有利于对商品价格区间的定位);或者不同年龄段的化妆品消费占比是多少(这可能有助于对商品备货量的预估)。
这个时候就要用到分组查询,分组查询的目的是为了把数据分成多个逻辑组(购买化妆品的人员是一个组,不同年龄段购买化妆品的人员也是组),并对每个组进行聚合计算的过程:。
分组查询的语法格式如下:
select cname, group_fun,... from tname [where condition]
group by group_expression [having group_con
QueryWrapper<MetaItem> wrapper = new QueryWrapper<MetaItem>()
.select("set_id,count(0) as field_count")
.in("set_id",setids)
.groupBy("set_id");
List<Map<String,Object>> list.
今天遇到了一个求总数返回的情况,我一细想这不是用sum就完事了吗。但是仔细想想,MybatisPlus好像没有直接使用sum的api。虽然没有直接提供,但是办法还是有的,下面就分享下如何实现的:首先如果使用sql是这么写的:ok,既然知道了sql怎么写的,那就开始写代码吧注意,本文主要以sum为例,但是也同时适用于其他聚合函数,比如avg,min,max。
此处以OrderPayTrace表中根据支付类型的不同,统计金额总和为例,并且还可以根据创建时间段来查询筛选。
QueryWrapper<OrderPayTrace> queryWrapper = new QueryWrapper<>();
queryWrapper.select("type as 'type',IFNULL(sum(amount),0) as 'amountSum'")
.between(!StringUtils.
//总收益
Order order =new Order();
QueryWrapper<Order> queryWrapper = new QueryWrapper<Order>();
queryWrapper.select("sum(price) as sumAll");
Order ord= orderService.getOne(queryWrapper);
SELECT * FROM DATA LIMIT 6
SELECT * FROM DATA LIMIT 5,6
SELECT * FROM DATA WHERE sales <= 25 LIMIT 6
dataMapper.selectPage(new Page<data>(1,6),null);
dataMapper.selectPage(new Page<data>(2
关于Mybatis plus 使用QueryWrapper,group by + having ,自定义查询字段使用方法
QueryWrapper<CustomerBussUser> qw = new QueryWrapper<>();
qw.select("CUST_ID,count(*) as count1");//查询自定义列
qw.eq("user_id",userId);
qw.eq("isvalid","1");
qw.groupBy("cust_Id");
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) CHARA