Hibernate语句

 

 

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

}

 

### Hibernate HQL 和 SQL 使用实例 #### 通过 HQL 执行查询操作 HQL 是一种面向对象的查询语言,允许开发者编写类似于 SQL 的查询语句来操作持久化实体。最基础的形式是从特定类中检索数据: ```java List<Cat> cats = session.createQuery("from Cat", Cat.class).list(); ``` 此代码片段展示了如何利用 `createQuery` 方法创建并执行一条简单查询语句以获取所有猫科动物记录[^3]。 #### 定义自定义布尔值替换规则 为了更好地适应数据库存储需求,在配置文件里可以设置属性 `hibernate.query.substitutions` 来指定真伪逻辑值对应的整数表示形式: ```properties hibernate.query.substitutions=true=1, false=0 ``` 这使得应用程序能够更灵活地处理不同类型的数据库系统对于真假判断的不同实现方式[^1]。 #### 启用查询缓存机制提高性能效率 当频繁访问相同的数据集时,可以通过调用 `Query.setCacheable(true)` 开启二级缓存功能从而减少重复计算带来的开销: ```java query.setCacheable(true); ``` 上述做法有助于优化应用的整体响应速度以及资源利用率[^2]。 #### 实施原生 SQL 查询增强灵活性 除了内置的支持外,Hibernate 还提供了直接运行标准结构化查询的能力,即所谓的“本地”或“原始”的 SQL 命令。这种方式特别适用于那些难以映射成 ORM 对象模型的情况或者是需要充分利用底层 RDBMS 特性的场景: ```java String sql = "SELECT * FROM CATS WHERE NAME LIKE :name"; NativeQuery<?> nativeQuery = session.createNativeQuery(sql); nativeQuery.setParameter("name", "%Garfield%"); List<Object[]> results = nativeQuery.list(); ``` 这段例子说明了怎样构建一个带有参数化的 SELECT 语句并通过 `createNativeQuery()` 函数将其提交给会话管理器去执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值