HQL查询:
Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询在涵盖Criteria查询的所有功能的前提下,提供了类似标准SQL语句的查询方式,同时也提供了更加面向对象的封装。完整的HQL语句形势如下:
Select/update/delete…… from …… where …… group by …… having …… order by …… asc/desc
其中的update/delete为Hibernate3中所新添加的功能,可见HQL查询非常类似于标准SQL查询。
HQL查询实例:
测试代码如下:
/*测试HQL的语句*/
public void testHql(String keyName,String sex){
Session session=null;
List<User> list=null;
try{
/*利用写好的工具类得到session对象*/
session=HibernateUtil.getSession();
String sql="";
/*利用名字的关键字进行模糊查询记录*/
sql="from User user where name like :key";
/*利用session对象创建query对象*/
Query query=session.createQuery(sql);
query.setString("key", keyName);
list=query.list();
System.out.println("HQL测试一:");
for(User user:list){
System.out.println(user.getId()+"\t"+user.getName()+"\t"+user.getSex()
+"\t"+user.getEmail()+"\t"+user.getBirthday().toGMTString());
}
/*查询与and操作*/
sql="from User user where name like :key and sex=:s";
query=session.createQuery(sql);
query.setString("key", keyName);
query.setString("s", sex);
list=query.list();
System.out.println("HQL测试二:");
for(User user:list){
System.out.println(user.getId()+"\t"+user.getName()+"\t"+user.getSex()
+"\t"+user.getEmail()+"\t"+user.getBirthday().toGMTString());
}
/*查询或or操作*/
sql="from User user where name like :key or sex=:s";
query=session.createQuery(sql);
query.setString("key", keyName);
query.setString("s", sex);
list=query.list();
System.out.println("HQL测试三:");
for(User user:list){
System.out.println(user.getId()+"\t"+user.getName()+"\t"+user.getSex()
+"\t"+user.getEmail()+"\t"+user.getBirthday().toGMTString());
}
}finally{
if(session!=null){
session.close();
}
}
}
如下是关于配置信息的源码
1、 配置文件代码:
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///crud</property>
<property name="connection.username">root</property>
<property name="connection.password">1234</property>
<!--方言,告诉hibernate是哪一种数据库 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>
<!--告诉hibernate的映射文件在那里-->
<mapping resource="cn/csdn/domain/User.hbm.xml"/>
</session-factory>
2、 映射文件代码:
<hibernate-mapping
package="cn.csdn.domain">
<class name="User" table="user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<property name="sex"/>
<property name="email"/>
<property name="birthday"/>
</class>
</hibernate-mapping>
3、 实体定义的domian字段如下并实现无参构造函数与无意义的字段id且没有finaly字段
private Integer id;
private String name;
private String sex;
private String email;
private Date birthday;
public User() {
super();
// TODO Auto-generated constructor stub
}