@Test public void threadSafety() { final ConstructorExpression<String> expr = Projections.constructor(String.class); Runnable invoker = new Runnable() { @Override public void run() { expr.newInstance(); } }; ThreadSafety.check(invoker, invoker); }
@Test public void beanClassOfTExpressionOfQArray() { PathBuilder<Entity> entity = new PathBuilder<Entity>(Entity.class, "entity"); QBean<Entity> beanProjection = Projections.bean(Entity.class, entity.getNumber("cId", Integer.class), entity.getNumber("eId", Integer.class)); assertEquals(Entity.class, beanProjection.newInstance(1, 2).getClass()); }
public Expression<?> setProjection(Expression<?>... o) { return setProjection(Projections.tuple(o)); }
@Test public void oneToOneToMany_projection_as_bean_and_constructor() { Map<String, User> results = USERS_W_LATEST_POST_AND_COMMENTS.transform( groupBy(userName).as(Projections.bean(User.class, userName, Projections.constructor(Post.class, postId, postName, set(qComment)).as("latestPost")))); assertEquals(2, results.size()); User user = results.get("Jane"); Post post = user.getLatestPost(); assertEquals(toInt(2), post.getId()); assertEquals("post 2", post.getName()); assertEquals(toSet(comment(4), comment(5)), post.getComments()); }
@Test public void fieldsClassOfTExpressionOfQArray() { PathBuilder<Entity> entity = new PathBuilder<Entity>(Entity.class, "entity"); QBean<Entity> beanProjection = Projections.fields(Entity.class, entity.getNumber("cId", Integer.class), entity.getNumber("eId", Integer.class)); assertEquals(Entity.class, beanProjection.newInstance(1, 2).getClass()); }
/** * Create a new GroupByBuilder for the given key expressions * * @param keys keys for aggregation * @return builder for further specification */ public static GroupByBuilder<List<?>> groupBy(Expression<?>... keys) { return new GroupByBuilder<List<?>>(Projections.list(keys)); }
@Test public void oneToOneToMany_projection_as_bean_and_constructor() { List<User> results = USERS_W_LATEST_POST_AND_COMMENTS.transform( groupBy(userName).list(Projections.bean(User.class, userName, Projections.constructor(Post.class, postId, postName, set(qComment)).as("latestPost")))); assertEquals(2, results.size()); User user = results.get(0); Post post = user.getLatestPost(); assertEquals(toInt(2), post.getId()); assertEquals("post 2", post.getName()); assertEquals(toSet(comment(4), comment(5)), post.getComments()); }
@Test public void with_path_and_exprs_using_fields() { QBean<Entity> beanProjection = Projections.fields(entity, name, age, married); Entity bean = beanProjection.newInstance("Fritz", 30, true); assertEquals("Fritz", bean.name); assertEquals(30, bean.age); assertEquals(true, bean.married); }
/** * Create a new GroupByBuilder for the given key expressions * * @param keys keys for aggregation * @return builder for further specification */ public static GroupByBuilder<List<?>> groupBy(Expression<?>... keys) { return new GroupByBuilder<List<?>>(Projections.list(keys)); }
@Test public void factoryExpression_has_right_args() { FactoryExpression<ProjectionExample> constructor = Projections.constructor(ProjectionExample.class, concat); constructor = FactoryExpressionUtils.wrap(constructor); assertEquals(Arrays.asList(str1, str2), constructor.getArgs()); }
@Test public void with_unknown_properties() { QBean<Entity> beanProjection = Projections.bean(entity, name, age, Expressions.booleanPath("unknown")); Entity bean = beanProjection.newInstance("Fritz", 30, true); assertEquals("Fritz", bean.getName()); assertEquals(30, bean.getAge()); }
args.put(Expression[].class, new Expression<?>[]{ Expressions.enumPath(Gender.class, "e"), Expressions.stringPath("s")}); args.put(FactoryExpression.class, Projections.tuple(Expressions.stringPath("str"))); args.put(GroupExpression.class, GroupBy.avg(Expressions.numberPath(Integer.class, "num"))); args.put(Number.class, 1);
@Test public void oneToOneToMany_projection_as_bean_and_constructor() { CloseableIterator<User> resultsIt = USERS_W_LATEST_POST_AND_COMMENTS.transform( groupBy(userName).iterate(Projections.bean(User.class, userName, Projections.constructor(Post.class, postId, postName, set(qComment)).as("latestPost")))); List<User> results = IteratorAdapter.asList(resultsIt); assertEquals(2, results.size()); User user = results.get(0); Post post = user.getLatestPost(); assertEquals(toInt(2), post.getId()); assertEquals("post 2", post.getName()); assertEquals(toSet(comment(4), comment(5)), post.getComments()); }
/** * 获取继承bean的dto * * @param dtoClass dto的class * @param beanPath 实体类的查询类 * @param columns 扩展的列 * @param <T> 实体类 * @param <DTO> dto的类 * @return dto */ @Nonnull static <DTO extends T, T extends BaseEntity<T>> QBean<DTO> extendBean(@Nonnull Class<DTO> dtoClass, @Nonnull RelationalPath<T> beanPath, @Nonnull Expression... columns) { return Projections.fields(dtoClass, extendColumn(beanPath, columns)); } }
@Test public void projections_duplicateColumns() { SAnimal cat = new SAnimal("cat"); assertEquals(1, query().from(cat).select(Projections.list(cat.count(), cat.count())).fetch().size()); }
@Test public void create3() { assertNotNull(Projections.constructor(ProjectionExample.class).newInstance()); }
@Test public void oneToOneToMany_projection_as_bean() { Map<String, User> results = USERS_W_LATEST_POST_AND_COMMENTS.transform( groupBy(userName).as(Projections.bean(User.class, userName, Projections.bean(Post.class, postId, postName, set(qComment).as("comments")).as("latestPost")))); assertEquals(2, results.size()); User user = results.get("Jane"); Post post = user.getLatestPost(); assertEquals(toInt(2), post.getId()); assertEquals("post 2", post.getName()); assertEquals(toSet(comment(4), comment(5)), post.getComments()); }
FactoryExpression<Tuple> expr = FactoryExpressionUtils.wrap(Projections.tuple(expressions)); boolean hasGroups = false; for (Expression<?> e : expr.getArgs()) {
public Projection( Class<T> targetClass ) { PathBuilder<T> entity = new PathBuilder<T>( targetClass, "entity" ); Field[] fields = targetClass.getFields(); Expression[] fieldExpressions = new Expression[fields.length]; for ( int i = 0; i < fields.length; i++ ) { fieldExpressions[i] = entity.getString( fields[i].getName() ); } bean = Projections.fields( targetClass, fieldExpressions ); }
@Test public void constructor() { Expression<Long> longVal = ConstantImpl.create(1L); Expression<String> stringVal = ConstantImpl.create(""); assertEquals(ProjectionExample.class, Projections.constructor(ProjectionExample.class, longVal, stringVal) .newInstance(0L, "").getClass()); }