hibernate学习之第五篇

1, oracle数据库中,user是关键字,如果用户的表名为user会引起冲突。采取的方法主要有两种:

①如果可以修改表名,最好改变表名为tuser或其他的名字,免得引起麻烦。
②如果表名不能修改,那么可以在配置文件中加上反引号,让oracle把user当做字符串处理,而不是关键字。

如下:

<hibernate-mapping package="hibernatetest">
    <class name="User" table="`user`">
        <id name="id" >
            <generator class="hilo"></generator>
        </id>
        <property name="userName"></property>
        <property name="birthday"></property>
    </class>
</hibernate-mapping>

 

同理,字段名发生冲突,也可以采用这种办法。

2,HQL
HQL,hibernate查询语言,类似于sql但与sql又有很大的不同,它是面向对象的。HQL中的对象名是区分大小写的(除了java类和属性,其他部分不区分大小写);HQL中查的是对象而不是表,并且支持多态;HQL主要通过query来操作。
例子:

·from Person
·from User user where user.name=:name
·from User user where user.name=:name and user.birthday<:birthday

 

3,query接口的使用

  public static void query(String name) {
       Session session = HibernateUtil.getSession();
        String hql = "from  User as user where user.userName=?";
        Query query = session.createQuery(hql);
        query.setString(0, name);
        List<User> list = query.list();
        for (User user : list) {
            System.out.println(user.getUserName());
        }
}

 

还可以使用命名参数的方法:只需要修改两处即可。

写道
String hql = "from User as user where user.userName=:name";
query.setString("name", name);
 

query接口的分页查询:

query接口有两个方法:query.setFirstResult(int) --设置从第几条记录开始读取, query.setMaxResults(int)--设置最多读取的记录数
各数据库的分页查询方法不同,比如mysql采取的是limit关键字,所以query接口的分页查询屏蔽了底层的数据库,实现了跨平台。

如果确认查询的结果最多有一条,则可以使用query的query.uniqueResult()方法。

4,条件查询
criteria是比HQL 更面向对象的查询方式;Criteria的创建方式:

 

Criteria crit = session.createCriteria(DomainClass.class);

 

简单属性条件约束如:

 

criteria.add(Restrictions.eq(propertyName),value);
criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName));

 

Query和Criteria作为Hinbernate数据查询接口,提供了查询条件的封装机制。

两者的不同之处在于,Query面向HQL和Native SQL,而Criteria则提供了面向对象的查询模式

你可能感兴趣的:(oracle,sql,Hibernate,mysql)