Hibernate的查询方式(简要)

Hibernate的查询方式

 1.OID检索:

  使用session.get(Object.class,oid),session.load(Object.class,oid),根据表的主键查询

 2.对象导航检索以及联级映射的配置:

  根据已有对象查询与之对应的另外一些对象,比如一个Customer对象中有一个Linkmans(联系人对象)集合,当查询出Customer后,直接变量linkMans集合就可以查询到与之对应的联系人
  配置文件:

    一对一:<one-to-one name="User" class="com.lzy.hibernate.User" ></one-to-one>

    一对多:
    ​ 

    多对一:

        

 3.HQL检索:

  使用session.createQuery("HQL语句")查询

  条件的添加:
      1.使用占位符
  
      2.使用别名
  

  分页查询:q.setFirstResult(0):设置第一条数据的位置
                    q.setMaxResults(3):设置查询数据的条数(也就是每页多少条)

  多表查询:注意第一种写法和第二种写法的区别
  

 4.QBC检索:

                      Criteria criteria = session.createCriteria(Customer.class);
                      criteria.add(Restrictions.like("参数1","参数2"));
             参数1:所添加条件的属性名,比如Customer类中的cust_name属性
             参数2:条件的值,比如 "路%"  (这里使用的是like)
       QBC离线查询:当前台需要多条件查询的时候,在web层将这些条件封装到DetachedCriteria,便于传递到持久层
  

 5.SQL检索:

  session.createSQLQuery("正常SQL语句").list();

如何使用Hibernate

1.配置文件

  核心配置文件hibernate.cfg.xml:url后面的参数为  useUnicode=true&amp;characterEncoding=UTF-8  为了解决中午乱码。

   

  映射文件linkman.hbm.xml

  

 2.使用方法

 (1).在类中加载配置文件

  

  (2).将配置文件等放到工具类中

  

 3.openSession和getCurrentSession的区别

 openSession:打开一个新的session对象,而且每次使用都是打开一个新的session,假如连续使用多次,则获得的session不是同一个对象,并且使用完需要调用close方法关闭session。

 getCurrentSession:获取当前上下文一个session对象,当第一次使用此方法时,会自动产生一个session对象,并且连续使用多次时,得到的session都是同一个对象,这就是与openSession的区别之一,简单而言,getCurrentSession 就是:如果有已经使用的,用旧的,如果没有,建新的。

 在实际开发中,往往使用getCurrentSession多,因为一般是处理同一个事务(即是使用一个数据库的情况),所以在一般情况下比较少使用openSession或者说openSession是比较老旧的一套接口了;

 要使用getCurrentSession需要在核心配置文件中加:<property name="hibernate.current_session_context_class">thread</property>

原文地址:https://www.cnblogs.com/zy-Luo/p/11041708.html