DBアクセスを定番化しよう DBFlute入門

第3回 ConditionBeanで色々な条件組み立て

この記事を読むのに必要な時間:およそ 7.5 分

では同じカラムに対する同じ演算子で「同じ値」の条件を設定した時が気になりますね。どうなるのでしょう?

明らかに意味が無いため,もちろん2つ条件を作ったりはせずに1つだけ条件が有効になりますリスト7⁠。この場合は,明らかなプログラミングミスになりますので,既に設定済みであることを示すWARNログが出力されますリスト8⁠。

リスト7:全く同じ条件の設定

/**
 * 会員ID「3」の設定をした後,会員ID「3」を設定
 * 
 * @throws Exception
 */
public void test_ConditionBean_Query_Equal_AbsolutelySameCondition_Tx() throws Exception {
    // ## Arrange ##
    final Integer beforeMemberId = 3;
    final Integer afterMemberId = beforeMemberId;
    final MemberCB cb = new MemberCB();
    cb.query().setMemberId_Equal(beforeMemberId);
    cb.query().setMemberId_Equal(afterMemberId);

    // ## Act ##
    final Member member = memberBhv.selectEntityWithDeletedCheck(cb);

    // ## Assert ##
    assertNotNull(member);
    assertEquals(beforeMemberId, member.getMemberId());
}

リスト8:「全く同じ条件の設定」のWARNログ

The value has already registered at equal of MEMBER.memberId: value=3
NotEqual

では,じゃんじゃん他の演算子を見ていきましょう。

「NotEqual」ですリスト9⁠。SQLでは「where COLUMN_NAME != 3」という条件になります。同じカラムに対する同じ演算子の条件を複数指定すると,最後に設定した条件が有効になります。

リスト9:NotEqual

/**
 * 会員ID「3」でない会員を検索
 * 
 * @throws Exception
 */
public void test_ConditionBean_Query_NotEqual_Tx() throws Exception {
    // ## Arrange ##
    final Integer expectedMemberId = 3;
    final MemberCB cb = new MemberCB();
    cb.query().setMemberId_NotEqual(expectedMemberId);

    // ## Act ##
    final List<Member> memberList = memberBhv.selectList(cb);

    // ## Assert ##
    assertNotNull(memberList);
    assertNotSame(0, memberList.size());
    final Member notContainsMember = new Member();
    notContainsMember.setMemberId(expectedMemberId);
    if (memberList.contains(notContainsMember)) {
        fail();
    }
}
GreaterThan

「GreaterThan」ですリスト10⁠。SQLでは「where COLUMN_NAME > 3」という条件になります。同じカラムに対する同じ演算子の条件を複数指定すると,最後に設定した条件が有効になります。

リスト10:GreaterThan

/**
 * 会員ID「3」より大きい会員IDを持った会員を検索
 * 
 * @throws Exception
 */
public void test_ConditionBean_Query_GreaterThan_Tx() throws Exception {
    // ## Arrange ##
    final Integer expectedMemberId = 3;
    final MemberCB cb = new MemberCB();
    cb.query().setMemberId_GreaterThan(expectedMemberId);

    // ## Act ##
    final List<Member> memberList = memberBhv.selectList(cb);

    // ## Assert ##
    assertNotNull(memberList);
    assertNotSame(0, memberList.size());
    for (final Member member : memberList) {
        if (member.getMemberId() <= 3) {
            fail();
        }
    }
}
GreaterEqual

「GreaterEqual」ですリスト11⁠。SQLでは「where COLUMN_NAME >= 3」という条件になります。同じカラムに対する同じ演算子の条件を複数指定すると,最後に設定した条件が有効になります。

リスト11:GreaterEqual

/**
 * 会員ID「3」以上の会員IDを持った会員を検索
 * 
 * @throws Exception
 */
public void test_ConditionBean_Query_GreaterEqual_Tx() throws Exception {
    // ## Arrange ##
    final Integer expectedMemberId = 3;
    final MemberCB cb = new MemberCB();
    cb.query().setMemberId_GreaterEqual(expectedMemberId);

    // ## Act ##
    final List<Member> memberList = memberBhv.selectList(cb);

    // ## Assert ##
    assertNotNull(memberList);
    assertNotSame(0, memberList.size());
    for (final Member member : memberList) {
        if (member.getMemberId() < 3) {
            fail();
        }
    }
}
LessThan

「LessThan」ですリスト12⁠。SQLでは「where COLUMN_NAME < 3」という条件になります。同じカラムに対する同じ演算子の条件を複数指定すると,最後に設定した条件が有効になります。

リスト12:LessThan

/**
 * 会員ID「3」より小さい会員IDを持った会員を検索
 * 
 * @throws Exception
 */
public void test_ConditionBean_Query_LessThan_Tx() throws Exception {
    // ## Arrange ##
    final Integer expectedMemberId = 3;
    final MemberCB cb = new MemberCB();
    cb.query().setMemberId_LessThan(expectedMemberId);

    // ## Act ##
    final List<Member> memberList = memberBhv.selectList(cb);

    // ## Assert ##
    assertNotNull(memberList);
    assertNotSame(0, memberList.size());
    for (final Member member : memberList) {
        if (member.getMemberId() >= 3) {
            fail();
        }
    }
}
LessEqual

「LessEqual」ですリスト13⁠。SQLでは「where COLUMN_NAME <= 3」という条件になります。同じカラムに対する同じ演算子の条件を複数指定すると,最後に設定した条件が有効になります。

リスト13:LessEqual

/**
 * 会員ID「3」以下の会員IDを持った会員を検索
 * 
 * @throws Exception
 */
public void test_ConditionBean_Query_LessEqual_Tx() throws Exception {
    // ## Arrange ##
    final Integer expectedMemberId = 3;
    final MemberCB cb = new MemberCB();
    cb.query().setMemberId_LessEqual(expectedMemberId);

    // ## Act ##
    final List<Member> memberList = memberBhv.selectList(cb);

    // ## Assert ##
    assertNotNull(memberList);
    assertNotSame(0, memberList.size());
    for (final Member member : memberList) {
        if (member.getMemberId() > 3) {
            fail();
        }
    }
}

著者プロフィール

久保雅彦(くぼまさひこ)

DBFluteメインコミッタ。主にオープン系の開発に従事。DB設計・DB周りの実装などを担当することが多い。