Java MentaBean:使用或代替和加载bean列表

Java MentaBean:使用或代替和加载bean列表,java,hibernate,orm,mybatis,ebean,Java,Hibernate,Orm,Mybatis,Ebean,我正在加载属于城市235的男性用户列表。好的,很简单。但是现在,我如何加载属于城市235或236的男性用户列表 BeanManager beanManager = new BeanManager(); User userProps = PropertiesProxy.create(User.class); BeanConfig userConfig = new BeanConfig(User.class, "Users") .pk(userProps.getId(), DBTypes.AU

我正在加载属于城市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());
BeanManager BeanManager=new BeanManager();
User userProps=PropertiesProxy.create(User.class);
BeanConfig userConfig=新的BeanConfig(User.class,“用户”)
.pk(userProps.getId(),DBTypes.AUTOINCREMENT)
.field(userProps.getUsername(),DBTypes.STRING)
.field(userProps.getGender(),DBTypes.ENUMID.from(Gender.class))
.field(userProps.getCity().getId(),“city\u id”,DBTypes.INTEGER);
addBeanConfig(userConfig);
BeanSession会话=新建MySQLBeanSession(康涅狄格州beanManager);
用户u=新用户();
u、 setGender(性别:男性);
u、 setCity(新城(235));
列表用户=session.loadList(u,lim(250));
System.out.println(“找到:+users.size());
但是现在我想在where子句中添加OR条件!我该怎么做


我正在使用。

与任何ORM一起使用,最终您将不得不编写查询。与使用group by、子查询、左连接等的查询类似,没有SQL就无法实现所需的功能。有关示例,请参阅。下面是您将如何进行查询:

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
}
PreparedStatement stmt=null;
ResultSet-rset=null;
试一试{
StringBuilder sql=新的StringBuilder(1024);
追加(“选择”);
append(session.buildSelect(User.class));
追加(“来自用户”);
append(“其中性别=?和(城市id=?或城市id=?)”;
stmt=prepare(conn,sql.toString(),Gender.MALE.getId(),235,236);//参数的varargs(来自SQLUtils)
rset=stmt.executeQuery();
列表用户=新建LinkedList();
while(rset.next()){
用户u=新用户();
会议.人口经济学(rset,u);
用户。添加(u);
}
System.out.println(“加载的用户数:+users.size());
}最后{
关闭(rset、stmt、conn);//来自SQLUtils
}

注意:您的代码中缺少gender列的映射,因此我假设它是一个,并且gender枚举有一个getId()方法。否则,如果您使用的是ENUMVALUE,请将
Gender.MALE.getId()
更改为
Gender.MALE.toString()

与任何ORM一起使用,最终您将不得不编写查询。与使用group by、子查询、左连接等的查询类似,没有SQL就无法实现所需的功能。有关示例,请参阅。下面是您将如何进行查询:

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
}
PreparedStatement stmt=null;
ResultSet-rset=null;
试一试{
StringBuilder sql=新的StringBuilder(1024);
追加(“选择”);
append(session.buildSelect(User.class));
追加(“来自用户”);
append(“其中性别=?和(城市id=?或城市id=?)”;
stmt=prepare(conn,sql.toString(),Gender.MALE.getId(),235,236);//参数的varargs(来自SQLUtils)
rset=stmt.executeQuery();
列表用户=新建LinkedList();
while(rset.next()){
用户u=新用户();
会议.人口经济学(rset,u);
用户。添加(u);
}
System.out.println(“加载的用户数:+users.size());
}最后{
关闭(rset、stmt、conn);//来自SQLUtils
}

注意:您的代码中缺少gender列的映射,因此我假设它是一个,并且gender枚举有一个getId()方法。否则,如果您正在使用ENUMVALUE,请将
Gender.MALE.getId()
更改为
Gender.MALE.toString()

我正在使用ENUMID。我编辑以添加缺少的列。谢谢我正在使用ENUMID。我编辑以添加缺少的列。谢谢