1

都市 235 に属する男性ユーザーのリストを読み込んでいます。わかりました。簡単です。しかし、都市 235 または 236 に属する男性ユーザーのリストを読み込むにはどうすればよいでしょうか。

BeanManager beanManager = new BeanManager();
User userProps = PropertiesProxy.create(User.class);
BeanConfig userConfig = new BeanConfig(User.class, "Users")
   .pk(userProps.getId(), DBTypes.AUTOINCREMENT)
   .field(userProps.getUsername(), DBTypes.STRING)
   .field(userProps.getGender(), DBTypes.ENUMID.from(Gender.class))
   .field(userProps.getCity().getId(), "city_id", DBTypes.INTEGER);
beanManager.addBeanConfig(userConfig);

BeanSession session = new MySQLBeanSession(beanManager, conn);
User u = new User();
u.setGender(Gender.MALE);
u.setCity(new City(235));

List<User> users = session.loadList(u, lim(250));

System.out.println("Found: " + users.size());

しかし、ここで OR 条件を where 句に追加したいと思います! それ、どうやったら出来るの?

このフレームワークを使用しています。

4

1 に答える 1

1

どのORMでも、最終的にはクエリを作成する必要があります。group by、サブクエリ、左結合などを使用したクエリのように、SQLなしでは必要なことを実行する方法はありません。例については、JOINSを参照してください。以下は、クエリを実行する方法です。

PreparedStatement stmt = null;
ResultSet rset = null;

try {

    StringBuilder sql = new StringBuilder(1024);
    sql.append("select ");
    sql.append(session.buildSelect(User.class));
    sql.append(" from Users");
    sql.append(" where gender = ? and (city_id = ? or city_id = ?)");

    stmt = prepare(conn, sql.toString(), Gender.MALE.getId(), 235, 236); // varargs for params (from SQLUtils)

    rset = stmt.executeQuery();

    List<User> users = new LinkedList<User>();

    while(rset.next()) {
        User u = new User();
        session.populateBean(rset, u);
        users.add(u);
    }

    System.out.println("Number of users loaded: " + users.size());

} finally {
    close(rset, stmt, conn); // from SQLUtils
}

注:コードに性別列のマッピングがないため、これはENUMIDであり、性別列挙型にはgetId()メソッドがあると想定しています。それ以外の場合、ENUMVALUEを使用している場合は、に変更Gender.MALE.getId()Gender.MALE.toString()ます。

于 2012-11-20T12:35:14.263 に答える