ConditionBean at a Glance
ConditionBean Functions
Retrieving Data
Retrieving Data @Java
MemberCB cb = new MemberCB();
// <<< SetupSelect(Relation), SpecifyColumn >>>
cb.setupSelect_MemberStatus(); // retrieving tables via one-to-many relationship
cb.specify().specifyMemberStatus().columnMemberStatusName(); // retrieving a specific column
cb.setupSelect_MemberSecurityAsOne(); // retrieving tables via one-to-one
cb.setupSelect_MemberServiceAsOne().withServiceRank(); // retrieving nested tables
cb.setupSelect_MemberAddress(currentDate); // retrieving tables that are practically one-to-one
// <<< (Specify)DerivedReferrer >>>
// Retrieving derived columns from child tables (correlated subqueries)
// e.g. latest login time via PC
cb.specify().derivedMemberLoginList().max(new SubQuery<MemberLoginCB>() {
public void query(MemberLoginCB subCB) {
subCB.specify().columnLoginDatetime();
subCB.query().setMobileLoginFlg_Equal_False();
}
}, Member.ALIAS_latestLoginDatetime); // press ctrl+1 to autocomplete if you have EMecha installed
// you can make adjustments using SQL functions when necessary
//}, Member.ALI..., new DerivedReferrerOption().coalesce("1192-01-01"));
// <<< LoadReferrer >>> ※after a SELECT clause
// Retrieving data from child tables (one-to-many)
// e.g. Retrieving the purchase data, in descending order, of each member (Load)
ListResultBean<Member> memberList = memberBhv.selectList(cb); // List Search
memberBhv.loadPurchaseList(memberList, new ConditionBeanSetupper<Pu...CB>() {
public void setup(PurchaseCB cb) {
cb.query().addOrderBy_PurchaseDatetime_Desc();
}
});
// Use LoadReferrerOption to retrieve a child table of a child table
//LoadReferrerOption<MemberCB, Member> option
// = new LoadReferrerOption<MemberCB, Member>();
//option.setConditionBeanSetupper(...);
//option.setEntityListSetupper(...);
//memberBhv.loadPurchaseList(memberList, option);
...
Filtering Data
Filtering Data @Java
...
// Equalities
cb.query().setMemberId_Equal(1); // MEMBER_ID = 1
cb.query().setMemberStatusCode_Equal_FormalizedMember(); // using category tables
// Inequalities
cb.query().setMemberId_NotEqual(1); // MEMBER_ID <> 1
cb.query().setMemberStatusCode_NotEqual_FormalizedMember(); // using category tables
cb.query().setMemberId_GreaterThan(3); // MEMBER_ID > 3
cb.query().setMemberId_LessThan(3); // MEMBER_ID < 3
cb.query().setMemberId_GreaterEqual(3); // MEMBER_ID >= 3
cb.query().setMemberId_LessEqual(3); // MEMBER_ID <= 3
// IN lists (in ('a', 'b'))
cb.query().setMemberId_InScope(memberIdList);
cb.query().setMemberStatusCode_InScope_AsMemberStatus(cdefList); // using category tables
// NOT IN (...)
// cb.query().setMemberId_NotInScope(...)
// Fuzzy searches (with escape key)
cb.query().setMemberName_PrefixSearch("S"); // begins-with search (LIKE 'S%' ESCAPE '|')
cb.query().setMemberName_LikeSearch("vi"
, new LikeSearchOption().likeContain()); // this-and-that options
cb.query().setMemberName_LikeSearch("to vi"
, new LikeSearchOption().likeContain().splitByBlank());// contains "to" and "vi"
cb.query().setMemberName_LikeSearch("to vi"
, new LikeSearchOption().likeContain().splitByBlank().asOrSplit());// contains "to" or "vi"
// NOT LIKE '...'
cb.query().setMemberName_NotLikeSearch(...)
// Null checks, etc.
cb.query().setBirthdate_IsNull();
cb.query().setBirthdate_IsNotNull();
cb.query().setMemo_IsNullOrEmpty();
// The standard FromTo method (for dates)
// e.g. from October to December (all-inclusive)
Date fromMonth = new HandyDate("2005/10/01").getDate();
Date toMonth = new HandyDate("2005/12/01").getDate();
cb.query().setFormalizedDatetime_FromTo(fromMonth, toMonth
, new FromToOption().compareAsMonth()); // this-and-that options
// Using the OrIsNull option
// e.g. until 2005 (all-inclusive)
Date toYear = new HandyDate("2005/01/01").getDate();
cb.query().setFormalizedDatetime_FromTo(null, toYear
, new FromToOption().compareAsYear().orIsNull());
// The frequently-used DateFromTo method
// e.g. from 10/1 to 10/3 (all-inclusive) ※equivalent to the compareAsDate() option
Date fromDate = new HandyDate("2005/10/01").getDate();
Date toDate = new HandyDate("2005/10/03").getDate();
cb.query().setFormalizedDatetime_DateFromTo(fromDate, toDate);
// The standard RangeOf method (for numbers)
// e.g. from 30 to 70 (or null)
cb.query().setMemberAge_RangeOf(30, 70, new RangeOfOption().orIsNull());
// <<< ExistsReferrer >>>
// Filtering using child tables (EXISTS (SELECT ...))
// e.g. members with purchases of ¥2000 and above
cb.query().existsPurchaseList(new SubQuery<PurchaseCB>() {
public void query(PurchaseCB subCB) {
subCB.query().setPurchasePrice_GreaterEqual(2000);
}
});
// NOT EXISTS (SELECT...))
// cb.query().notExistsPurchaseList(...)
// <<< InScopeRelation >>>
// Filtering using IN lists (IN (SELECT ...))
// e.g. members with purchases of ¥2000 and above
cb.query().inScopePurchaseList(new SubQuery<PurchaseCB>() {
public void query(PurchaseCB subCB) {
subCB.query().setPurchasePrice_GreaterEqual(2000);
}
});
// NOT IN (SELECT ...)
// cb.query().notInScopePurchaseList(...)
// <<< (Query)DerivedReferrer >>>
// Filtering using derived columns of child tables (correlated subqueries)
// e.g. members with paid purchases, the maximum purchase price of which is ¥2000 and above
cb.query().derivedPurchaseList().max(new SubQuery<PurchaseCB>() {
public void query(PurchaseCB subCB) {
subCB.specify().columnPurchasePrice();
subCB.query().setPaymentCompleteFlg_Equal_True();
}
}).greaterEqual(2000);
// you can make adjustments to derived columns using SQL functions when necessary
//}, new DerivedReferrerOption().coalesce(0)).greaterEqual(...);
// <<< ScalarCondition >>>
// Filtering using derived columns (normal subqueries)
// e.g. members with the same birthdate as the youngest formalized member
cb.query().scalar_Equal().max(new SubQuery<MemberCB>() {
public void query(MemberCB subCB) {
subCB.specify().columnBirthdate();
subCB.query().setMemberStatusCode_Equal_Formalized();
}
});
// <<< ScalarConditionPartitionBy >>>
// Filtering using derived columns and categories (correlated subqueries)
// e.g. the youngest member per member status
cb.query().scalar_Equal().max(new SubQuery<MemberCB>() {
public void query(MemberCB subCB) {
subCB.specify().columnBirthdate();
}
}).partitionBy(new SpecifyQuery<MemberCB>() {
public void specify(MemberCB cb) {
cb.specify().columnMemberStatusCode();
}
});
// <<< MyselfInScope >>>
// Filtering using IN lists with values from the same table (used only under special conditions)
cb.query().myselfInScope(new SubQuery<MemberCB>() {
public void query(MemberCB subCB) {
//subCB.specify().column...() // defaults to the PK column when not specified
subCB.query().setMemberStatusCode_Equal_Formalized(); // the filter condition
}
});
// <<< ColumnQuery >>>
// Filtering using the values of two columns from the same table
// e.g. members whose birthdates are earlier than their formalization dates
cb.columnQuery(new SpecifyQuery<MemberCB>() {
public void specify(MemberCB cb) {
cb.specify().columnBirthdate();
}
}).lessThan(new SpecifyQuery<MemberCB>() {
public void specify(MemberCB cb) {
cb.specify().columnFormalizedDatetime();
}
});
// you can make adjustments to the values using SQL functions when necesary
//}).convert(new ColumnConversionOption().truncTime().addDay(7));
// <<< OrScopeQuery >>>
// The OR operator (conditions are joined by AND by default)
// e.g. members whose names start with "S" or "J", or whose MEMBER_ID is equal to 3
cb.orScopeQuery(new SubQuery<MemberCB>() {
public void query(MemberCB orCB) {
orCB.query().setMemberName_PrefixSearch("S");
orCB.query().setMemberName_PrefixSearch("J");
orCB.query().setMemberId_Equal(3);
}
});
// <<< OrScopeQueryAndPart >>>
// Using AND operators within OR operators
// e.g. members who have withdrawn or whose MEMBER_ID is greater than or equal to 100 and with null formalized dates
cb.orScopeQuery(new SubQuery<MemberCB>() {
public void query(MemberCB orCB) {
orCB.query().setMemberStatusCode_Equal_Withdrawal();
orCB.orScopeQueryAndPart(new AndQuery<MemberCB>() {
public void query(MemberCB andCB) {
andCB.query().setMemberId_GreaterEqual(100);
andCB.query().setFormalizedDatetime_IsNull();
}
};
}
});
// <<< UnionQuery >>>
// Using the UNION clause
// e.g. searching for members whose birthdates are on or after 2005 using UNION
cb.union(new UnionQuery<MemberCB>() {
public void query(MemberCB unionCB) {
Date targetDate = new HandyDate("2005/01/01").getDate();
unionCB.query().setBirthdate_GreaterEqual(targetDate);
}
});
...
Sorting Data
Sorting Data @Java
...
cb.query().addOrderBy_MemberId_Asc(); // ascending sort
cb.query().addOrderBy_FormalizedDatetime_Desc(); // descending sort
cb.query().addOrderBy_Birthdate_Desc().withNullsFirst(); // with null values first
cb.query().addOrderBy_Birthdate_Desc().withNullsLast(); // with null values last
// <<< ManualOrder >>>
// Sorting manually using conditions
// e.g. putting data modified within the last 24 hours first
ManualOrderBean mob = new ManualOrderBean();
Date date24before = new HandyDate(currentDate()).addDay(-1).getDate();
mob.when_GreaterThan(date24before); // date modified > 24 hours ago
cb.query().addOrderBy_UpdateDatetime_Asc().withManualOrder(mob);
// <<< SpecifiedDerivedOrderBy >>>
// Sorting using derived columns
// e.g. sorting by last login
cb.query().addSpecifiedDerivedOrderBy_Desc(Member.ALIAS_latestLoginDatetime);
...
Search types
Search types @Java
...
// Count
int count = memberBhv.selectCount(cb);
// Item search (returns null if not found)
Member member = memberBhv.selectEntity(cb);
// Item search (throws an Exception if not found)
Member member = = memberBhv.selectEntityWithDeletedCheck(cb);
// List search
ListResultBean<Member> memberList = memberBhv.selectList(cb);
// Paging
PagingResultBean<Member> page = memberBhv.selectPage(cb);
// <<< ScalarSelect >>>
// Using derived values
// e.g. the youngest formalized member
Date max = memberBhv.scalarSelect(Date.class).max(new ScalarQuery<Me...CB>() {
public void query(MemberCB cb) {
cb.specify().columnBirthdate(); // latest birthdate
cb.query().setMemberStatusCode_Equal_Formalized(); // search only for formalized members
}
});
// <<< CursorSelect >>>
// Using cursors (fetch one record at a time)
memberBhv.selectCursor(cb, new EntityRowHandler<Member>() {
public void handle(Member entity) {
Integer memberId = entity.getMemberId();
String memberName = entity.getMemberName();
...
}
});
// <<< QueryDelete >>>
memberBhv.queryDelete(cb);
// <<< QueryUpdate >>>
Member member = new Member();
member.setMemberStatusCode_ProvisionalMember();
memberBhv.queryUpdate(member, cb);
...
Other options
Other options @Java
...
// throw an exception if a condition value is null or an empty String (ignored by default)
cb.checkInvalidQuery();
// acquire a table lock (for updates)
cb.lockForUpdate();
...
Special Thanks
Cruz, thank you for your translation.