弄了好几天,终于成功上传到maven
中央仓库了
使用方式:
代码语言:javascript复制<dependency>
<groupId>io.github.vampireachao</groupId>
<artifactId>stream-plugin-mybatis-plus</artifactId>
<version>1.0.5</version>
</dependency>
<dependency>
<groupId>io.github.vampireachao</groupId>
<artifactId>stream-core</artifactId>
<version>1.0.5</version>
</dependency>
引入这两个依赖,然后就可以使用啦
测试用例
代码语言:javascript复制package io.github.vampireachao.stream.plugin.mybatisplus;
import com.baomidou.mybatisplus.test.autoconfigure.MybatisPlusTest;
import io.github.vampireachao.stream.plugin.mybatisplus.pojo.po.UserInfo;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* 一对一测试
*
* @author VampireAchao < achao1441470436@gmail.com >
*/
@MybatisPlusTest
class OneToOneTest {
@Test
void testQuery() {
List<Long> userIds = Arrays.asList(1L, 2L, 3L, 4L, 5L);
Map<Long, UserInfo> idUserMap = OneToOne.query(userIds, UserInfo::getId);
Assertions.assertEquals(5, idUserMap.size());
Map<Long, String> userIdNameMap = OneToOne.query(userIds, UserInfo::getId, UserInfo::getName);
Assertions.assertEquals(5, userIdNameMap.size());
userIdNameMap = OneToOne.query(w -> w.le(UserInfo::getAge, 22), userIds, UserInfo::getId, UserInfo::getName);
Assertions.assertEquals(3, userIdNameMap.size());
idUserMap = OneToOne.query(1L, UserInfo::getId);
Assertions.assertEquals(1, idUserMap.size());
userIdNameMap = OneToOne.query(1L, UserInfo::getId, UserInfo::getName);
Assertions.assertEquals(1, userIdNameMap.size());
userIdNameMap = OneToOne.query(w -> w.le(UserInfo::getAge, 22), 1L, UserInfo::getId, UserInfo::getName);
Assertions.assertEquals(1, userIdNameMap.size());
Map<Long, Boolean> query = OneToOne.query(w -> w.select(UserInfo::getId, UserInfo::getName), userIds, UserInfo::getId, userInfo -> userInfo.getName() != null && userInfo.getName().contains("a"));
Assertions.assertEquals(2, query.values().stream().filter(Boolean::booleanValue).count());
}
}
一对多
代码语言:javascript复制package io.github.vampireachao.stream.plugin.mybatisplus;
import com.baomidou.mybatisplus.test.autoconfigure.MybatisPlusTest;
import io.github.vampireachao.stream.plugin.mybatisplus.pojo.po.UserInfo;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* 一对多测试
*
* @author VampireAchao < achao1441470436@gmail.com >
* @since 2022/5/23 13:51
*/
@MybatisPlusTest
class OneToManyTest {
@Test
void testQuery() {
Assertions.assertAll(() -> {
List<Integer> userAges = Arrays.asList(18, 18, 28, 21, 24);
Map<Integer, List<UserInfo>> ageUsersMap = OneToMany.query(userAges, UserInfo::getAge);
Assertions.assertEquals(4, ageUsersMap.size());
Map<Integer, List<String>> userAgeNameMap = OneToMany.query(userAges, UserInfo::getAge, UserInfo::getName);
Assertions.assertEquals(4, userAgeNameMap.size());
userAgeNameMap = OneToMany.query(w -> w.le(UserInfo::getAge, 22), userAges, UserInfo::getAge, UserInfo::getName);
Assertions.assertEquals(2, userAgeNameMap.size());
ageUsersMap = OneToMany.query(18, UserInfo::getAge);
Assertions.assertEquals(1, ageUsersMap.size());
userAgeNameMap = OneToMany.query(18, UserInfo::getAge, UserInfo::getName);
Assertions.assertEquals(1, userAgeNameMap.size());
userAgeNameMap = OneToMany.query(w -> w.le(UserInfo::getAge, 22), 18, UserInfo::getAge, UserInfo::getName);
Assertions.assertEquals(1, userAgeNameMap.size());
Map<Integer, List<Boolean>> query = OneToMany.query(w -> w.select(UserInfo::getAge, UserInfo::getName), userAges, UserInfo::getAge, userInfo -> userInfo.getName() != null && userInfo.getName().contains("a"));
Assertions.assertEquals(2, query.values().stream().flatMap(Collection::stream).filter(Boolean::booleanValue).count());
});
}
}
一对多对一
代码语言:javascript复制package io.github.vampireachao.stream.plugin.mybatisplus;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.toolkit.SimpleQuery;
import com.baomidou.mybatisplus.test.autoconfigure.MybatisPlusTest;
import io.github.vampireachao.stream.core.StreamHelper;
import io.github.vampireachao.stream.plugin.mybatisplus.pojo.po.RoleInfo;
import io.github.vampireachao.stream.plugin.mybatisplus.pojo.po.UserInfo;
import io.github.vampireachao.stream.plugin.mybatisplus.pojo.po.UserRole;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* OneToManyToOneTest
*
* @author VampireAchao
* @since 2022/5/23
*/
@MybatisPlusTest
class OneToManyToOneTest {
@Test
void testQuery() {
Assertions.assertAll(() -> {
List<UserInfo> userInfos = SimpleQuery.selectList(UserInfo.class, Wrappers.lambdaQuery());
Assertions.assertEquals(5, userInfos.size());
List<UserRole> userRoles = SimpleQuery.selectList(UserRole.class, Wrappers.lambdaQuery());
Assertions.assertEquals(10, userRoles.size());
List<RoleInfo> roleInfos = SimpleQuery.selectList(RoleInfo.class, Wrappers.lambdaQuery());
Assertions.assertEquals(3, roleInfos.size());
Set<Long> userIds = StreamHelper.mapToSet(userInfos, UserInfo::getId);
Set<Long> roleIds = new HashSet<>();
Map<Long, List<Long>> userIdRoleIdsMap = OneToMany.query(userIds, UserRole::getUserId, UserRole::getRoleId, userRole -> roleIds.add(userRole.getRoleId()));
Map<Long, RoleInfo> idRoleMap = OneToOne.query(roleIds, RoleInfo::getId);
Map<Long, List<RoleInfo>> userIdRoleInfosMap = userIdRoleIdsMap.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().stream().map(idRoleMap::get).collect(Collectors.toList())));
Assertions.assertEquals(5, userIdRoleInfosMap.size());
userIdRoleInfosMap = OneToManyToOne.query(userIds, UserRole::getUserId, UserRole::getRoleId, RoleInfo::getId);
Assertions.assertEquals(5, userIdRoleInfosMap.size());
});
}
}