Слияние кода завершено, страница обновится автоматически
fluent mybatis内置了6个聚合函数,聚合函数都可以指定别名或不指定别名
示例1: 按status分组,求分组平均积分和总积分
@Repository
public class UserDaoImpl extends UserBaseDao implements UserDao {
/**
* 按status分组,求分组平均积分和总积分
*/
@Override
public List<Map<String, Object>> selectAggregate() {
UserQuery query = super.query()
.select
.apply(status)
.bonusPoints().avg()
.bonusPoints().sum("SUM").end()
.groupBy.status().end();
return super.mapper.listMaps(query);
}
}
验证聚合查询sql语句
class UserDaoImplTest extends BaseTest {
@Autowired
private UserDao userDao;
@Test
void selectAggregate() {
userDao.selectAggregate();
db.sqlList().wantFirstSql()
.eq("SELECT status, AVG(bonus_points), SUM(bonus_points) AS SUM " +
"FROM user GROUP BY status");
}
}
示例2: 分组连接函数
@Repository
public class UserDaoImpl extends UserBaseDao implements UserDao {
/**
* 分组连接函数
*/
@Override
public List<Map<String, Object>> selectGroupConcat() {
UserQuery query = super.query()
.select
.apply(status)
.userName().group_concat().end()
.groupBy.status().end();
return super.mapper.listMaps(query);
}
}
验证分组连接函数语句
class UserDaoImplTest extends BaseTest {
@Autowired
private UserDao userDao;
@Test
void selectGroupConcat() {
userDao.selectGroupConcat();
db.sqlList().wantFirstSql()
.eq("SELECT status, GROUP_CONCAT(user_name) " +
"FROM user GROUP BY status");
}
}
除了使用fluent mybatis内置的聚合函数外, 你也可以自定义聚合函数
select.apply("自定义聚合表达式")...end()
@Repository
public class UserDaoImpl extends UserBaseDao implements UserDao {
/**
* 自定义聚合函数
* 将分组user_name排序,并以'#'串联
*/
@Override
public List<String> selectCustomizedAggregate() {
UserQuery query = super.query()
.select
.apply("GROUP_CONCAT(user_name order by user_name SEPARATOR '#')", "userNames").end()
.groupBy.status().end();
return super.mapper.listObjs(query);
}
}
验证自定义聚合函数查询结果
class UserDaoImplTest extends BaseTest {
@Autowired
private UserDao userDao;
@DisplayName("验证自定义group_concat效果, 准备5条数据, 查询结果user_name以#连接起来")
@Test
void selectCustomizedAggregate() {
db.table(ITable.t_user).clean()
.insert(TM.user.create(5)
.status.values("NORMAL")
.user_name.formatAutoIncrease("user_%d")
);
List<String> userNames = userDao.selectCustomizedAggregate();
db.sqlList().wantFirstSql()
.eq("SELECT GROUP_CONCAT(user_name order by user_name SEPARATOR '#') as userNames " +
"FROM user GROUP BY status");
want.string(userNames.get(0)).eq("user_1#user_2#user_3#user_4#user_5");
}
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )