所以我现在正在做一个项目第一次使用Hibernate在这个项目中,我也使用Swing我有一个带有多个jTextFields 的表格
public List<Object[]> getoperations(String a,String c,String n,String e,String d) {
SessionDao s=new SessionDao();
session=s.getSession();
Query q;
q=session.createQuery("select idTiers,beneficiaire,emetteur,montant,numcompte,t_param_nature_operation.libelleNature,dateValidite,dateCreation where");
if (a != null && !a.isEmpty()) { q+= " and codeBanque='" + a + "'"; }
if (c != null && !c.isEmpty()) { q += " and numCompte='" + c + "'"; }
if (n != null && !n.isEmpty()) { q += " and t_param_nature_operation_.libelleNature='" + n + "'"; }
if (e != null && !e.isEmpty()) { q += " and decision='" + e + "'"; }
if (d != null && !d.isEmpty()) { q += " and dateCreation='" + d + "'"; }
q+= " order by idTiers" ;
return q.list();
}
正如您所看到的,我正在对这些值进行测试,以便将它们添加到查询中。我的问题是,有没有办法增加这些价值?因为查询+="不起作用。
就我个人而言,我会将Guava utils添加到我的项目中,并使用isNotBlank()作用无论如何,您可以编写自己的静态函数如果不为null且不为空,则返回true;否则返回false,稍后返回使用它。它会让你的代码更加清晰。
以上是我的评论,我决定向您展示这段小代码。
public static boolean isBlank(String s) {
if (s == null)
return true;
if (s.isEmpty())
return true;
return false;
}
现在你可以简单地写:
//static import your isBlank() method
//import static package.classInWhichIsBlankIsDeclared;
if (!isBlank(a) { q+= " and codeBanque='" + a + "'"; }
if (!isBlank(b) { q+= " and codeBanque='" + b + "'"; }
if (!isBlank(c) { q+= " and codeBanque='" + c + "'"; }
if (!isBlank(d) { q+= " and codeBanque='" + d + "'"; }
它的可读性更强,因此在将来出现错误时调试起来会更容易。
请看一下DRY
原理并遵循它。如果您的问题需要检查相同的条件4或5次(2次应该足够使用DRY
),请考虑编写一个函数。称之为对人类友好的方式,而不是不同逻辑语句的组合。
干燥。不要重复自己
维基百科上关于DRY 的文章
您应该考虑使用Criteria
。在处理多个where语句时,它更干净。
例如
Criteria cr = session.createCriteria(YourEntityClass.class);
cr.add(Restrictions.eq("property1", value1));
cr.add(Restrictions.eq("property2", value2));
List results = cr.list();
看看这里的这些例子