Hibernate
Criteria query 实现模糊查询
hibernate有三种查询方式:Hibernate Query Language (HQL)、Criteria query
、Native SQL query 。其中Criteria
query最适合查询条件数量不定的模糊查询。一下通过一个例子说明用Criteria
query实现模糊查询的方法。
1.Oracle数据库表mytable,设有2个字段name,age;
2.查询条件输入页面querySet.jsp;
3.查询结构输出页面queryResult.jsp;
4.struts1的ActionForm:queryForm.java;
5.Action:QueryAction.java;
6.Pojo:MyTable.java;
7.myTable.hbn.xml;
8.还有struts配置文件和hibernate配置文件等。
querySet.jsp的内容如下
method="post">
请输入查询条件:
姓名:
name="name"/>
年龄:
name="age"/>
value="查询"/>
效果如下:
用户在界面中输入查询条件,也可以不输入任何内容。如果用户在姓名栏中输入内容,则在表中查询所有name字段中包含输入字符的记录;如果用户在年龄栏中输入数值,则查询age等于输入值得记录;如果用户没有输入任何内容,将查询所有记录。
QueryAction.java的主要内容如下:
QueryForm queryForm =
(QueryForm) form;
String name =
queryForm.getName();
String sAge =
queryForm.getAge();
Session s =
HibernateSessionFactory.getSession();
Criteria criteria =
s.createCriteria(MyTable.class);
if (name != null
&& name.trim().length()
> 0) {
Criterion
criterion1 = Expression.like("name", "%"+name.trim()+"%");
criteria.add(criterion1);
}
if (age != null
&& age.trim().length()
> 0) {
int
age=Integer.parseInt(sAge);
Criterion
criterion2 = Expression.eq("age", age);
criteria.add(criterion2);
}
criteria.addOrder(Order.asc("name"));
criteria.addOrder(Order.des("age"));
List myTables=criteria.list();