今天的項目中在用Hibernate3.0進行模糊查詢的時候,出現中文亂碼,在網上查了好久資料,終于解決了,現在把整理后的貼出來。
Hibernate中實現模糊查詢,可有以下三種方式:
第一種方式:QBC查詢
String name = "", info = "";
if (sub != null && sub.getSubname() != null) {
name = sub.getSubname();
}
if (sub != null && sub.getSubinfo() != null) {
info = sub.getSubinfo();
}
Criteria cr = session.createCriteria(Subject.class);
cr.add(Expression.like("subname","%"+name+"%"));
cr.add(Expression.like("subinfo","%"+info+"%"));
第二種方式:HQL查詢語句
String hql = "from Subject as s where s.subname like :name and s.subinfo like :info";
// 調用session的獲得數據列表方法,傳遞HQL查詢語句
String subnamevalue="要查詢的中文值";
String sql="";
sql = "from Pfapp where name like :subname ";
Query query = session.createQuery(sql);
query.setString("subname","%"+subnamevalue+"%");
System.out.println("*********"+sql);
注:Subject為數據庫表subject映射的類;它有相應的屬性subname、subinfo及相應的get和set方法;sub為Subject的一個實例化對象。
另外說明的是:如果你不寫對象名稱,直接寫字段,那么hibernate就按照數據庫字段進行查找
如果你寫 (對象名.對象屬性),那么hibernate就按照ormapping中的映射字段進行查找
這是hibernate的靈活之處!!