1、Query对象
使用Query对象需要写hql语句,使用hql语句操作的是实体类和属性。
用于查询全部的hql语句:from 实体类名称
例:String hql = "from UsersEntity";//准备hql语句
Query query = session.createQuery(hql);//创建Query对象
List<UsersEntity> usersEntitys = query.list();//调用Query方法进行查询
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方法进行查询
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();//调用方法进行查询
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做为联合主键的设计)