我正在加载属于城市 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());
但现在我想在我的 where 子句中添加一个 OR 条件!我该怎么做?
我正在使用this framework .
对于任何 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并且 Gender 枚举有一个 getId() 方法。否则,如果您使用 ENUMVALUE,请将 Gender.MALE.getId()
更改为 Gender.MALE.toString()
。
我是一名优秀的程序员,十分优秀!