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.使用占位符
分页查询: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&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>