此方法可多條件查詢且可以根據(jù)關(guān)聯(lián)的表?xiàng)l件進(jìn)行查詢
如查詢某個(gè)商品:
表結(jié)構(gòu)如下:
goods(商品表)
goodsid(商品id) goodsname(名稱) typeid(分類-外鍵) supplierid(供應(yīng)商-外鍵)
type(分類表)
typeid(id主鍵) typename(分類名稱)
supplier(供應(yīng)商表)
supplierid(ID主鍵) suppliername( 供應(yīng)商名稱)
你可建一個(gè)查詢條件的類,里面包括你要查詢的所有字段
如: public class Query{
private String suppliername;
private String goodsname;
private String typename;
..................
get/set方法................
}
得到查詢條件后,可以把此類的一個(gè)對(duì)象傳入自己做的方法,此方法可以根據(jù)條件的個(gè)數(shù)及是否輸入條件進(jìn)行查詢:
public static List query_goods(Query query){
Session session = SessionFactory.getSession();
Criteria criteria = session.createCriteria(Goods.class);
Criteria type = criteria.createCriteria("type");
Criteria supplier= criteria.createCriteria("supplier");
if(null!=query.getGoodsname() && !"".equels(query.getGoodsname() ))
criteria.add(Restrictions.like("goodsname","%"+query.getGoodsname()+"%"));
if(null!=query.getSuppliername() && !"".equels(query.getSuppliername() ))
supplier.add(Restrictions.like("suppliername","%"+query.getSuppliername()+"%"));
if(null!=query.getTypename() && !"".equels(query.getTypename() ))
type.add(Restrictions.like("typename","%"+query.getTypename+"%"));
List list = criteria.list();
session.clear();
session.close();
return list;
}
以上方面還可多層的嵌套,如type里還有外鍵,可以按照以上方法進(jìn)行嵌套。注意,查詢時(shí)所有涉及到的數(shù)據(jù)都將一次性寫入類的屬性中,包括有關(guān)聯(lián)的,即此時(shí)goods的關(guān)聯(lián)延遲加載無(wú)效,我覺(jué)得這一點(diǎn)非常的好。呵呵,有什么好處,可以自己好好的想想。
有許多人曾經(jīng)提到過(guò)用Example,就不用自己判斷了,如果沒(méi)有關(guān)聯(lián)條件查詢的話,確實(shí)是好,可它的缺點(diǎn)就是不能查詢關(guān)聯(lián)中的條件。