zoukankan      html  css  js  c++  java
  • hibernate 查询全部数据的三种方法

    1、Query对象

    使用Query对象需要写hql语句,使用hql语句操作的是实体类和属性。
    用于查询全部的hql语句:from 实体类名称
     
    例:String hql = "from UsersEntity";//准备hql语句
            Query query = session.createQuery(hql);//创建Query对象
            List<UsersEntity> usersEntitys = query.list();//调用Query方法进行查询
     

    2、Criteria对象

    使用这个对象查询全部数据,不需要写语句,直接调用方法实现即可
     
    例:Criteria criteria=session.createCriteria(UsersEntity.class);//创建Criteria对象,此方法需要给出实体类名称
            List<UsersEntity> usersEntitys=criteria.list();//调用Criteria方法进行查询
     
     

    3、SQLQuery对象

    使用这个对象查询全部数据,需要写底层sql。
     
    例:SQLQuery sqlQuery=session.createSQLQuery("select * from users");//创建SQLQuery对象,需要传入底层sql语句
            sqlQuery.addEntity(UsersEntity.class);//返回的list是数组,需要将其转换成实体类对象
            List<UsersEntity> usersEntitys=sqlQuery.list();//调用方法进行查询
     
    flush-强制提交刷新session
    clear--清除session
    evict(Obj)将对象实例从session缓存清除
    session.flush() 不是必须调用的
    session.close()是必须调用的
    session.clear()写在flush后面
    解释session.flush()的调用牵扯到事务,首先我们知道在执行事务之前都会将AutoCommit设置为false【手动提交方式,因为默认是true自动提交的】 当AutoCommit为false时 我们执行完事务就要调用到session.flush();session.clear();一切处理完后我们要close掉当前的这个session但是当我们不做事务操作的时候 我们就没必要去调用session.flush()和session.clear()。直接session.close()就OK 因为这时close会默认调用一次session.flush()。如果使用了ThreadLocal那么就要在close方法里处理一下ThreadLocal。session.flush()的作用是将数据库与缓存中的数据同步 当session.clear()后才会引起缓存数据变化
     

    方式一:基于实体类属性

    对于实体的PO类,有2个要求:

    1,必须继承Serializable接口

    2,必须重写equals()方法和hashcode()方法(个人认为不是必须重写,只要其默认hascode能唯一的确定任何一个Person类即可,当然使用联合主键字段firstname和lastname重写equals()方法和hashcode()方法后,即可通过firstname和lastname唯一确定一个Person类,更符合数据库中firstname和lastname做为联合主键的设计)

  • 相关阅读:
    thinkphp5 数据库和模型
    DAO设计模式
    JSP内置对象
    JSP基础
    Head First Servlet and JSP
    Maven项目中,系统设置的CLASSPATH环境变量问题
    HTML简介
    (三)Maven使用入门之Hello World
    (一)JUnit简介
    (二)Web应用体系结构
  • 原文地址:https://www.cnblogs.com/xdot/p/8677347.html
Copyright © 2011-2022 走看看