HQL 基础查询 ゝ一纸荒年。 2022-06-04 01:25 240阅读 0赞 ### Books类字段 ### private Integer id; private String title; private String author; private Double price; private String publishing; ### 查询所有结果 ### private void hql() { //获取session Session session = HibernateSessionFactory.getSession(); //hql语句 . 是类名称 , 不是数据库的表名 String hql = "from Books"; Query query = session.createQuery(hql); List<Object> list = query.list(); Iterator<Object> itor = list.iterator(); while(itor.hasNext()){ Books book = (Books) itor.next(); System.out.println(book); } } ### 按价值进行升序排列 ### 修改hql语句 String hql = "from Books order by price desc"; ### 只获取书名和作者 ### private void hql() { //获取session Session session = HibernateSessionFactory.getSession(); //hql语句 . 是类名称 , 不是数据库的表名 String hql = "select b.author,b.title from Books as b"; Query query = session.createQuery(hql); List<Object> list = query.list(); Iterator<Object> itor = list.iterator(); while(itor.hasNext()){ //返回的是一个对象数组, [字段1, 字段2]的数组 Object[] book = (Object[]) itor.next(); System.out.println(book[0]+"---"+book[1]); } } ### 聚合函数 ### private void hql() { //获取session Session session = HibernateSessionFactory.getSession(); String hql = "select count(b) from Books as b"; Query query = session.createQuery(hql); Long count = (Long) query.uniqueResult(); hql = "select avg(b.price) from Books as b"; query = session.createQuery(hql); Double avg = (Double) query.uniqueResult(); hql = "select max(b.price) from Books as b"; query = session.createQuery(hql); Double max = (Double) query.uniqueResult(); System.out.println("总数量"+count+"价格平均"+avg+"最贵价格"+max); } ### 按出版社进行分组 ### String hql = "select b.publishing,count(*) from Books as b group by b.publishing"; ### 动态查询 ### 动态查询是将查询查来的字段封装到类中, 避免使用数组的麻烦, 需要几个字段就要在实体类中生成相应字段的构造方法 private void hql() { //获取session Session session = HibernateSessionFactory.getSession(); //hql语句 . 是类名称 , 不是数据库的表名 String hql = "select new Books(b.title,b.price) from Books as b "; Query query = session.createQuery(hql); List<Object> list = query.list(); Iterator<Object> itor = list.iterator(); while(itor.hasNext()){ //返回的是一个对象数组, [字段1, 字段2]的数组 Books book = (Books)itor.next(); System.out.println(book.getTitle()+"---"+book.getPrice()); } } ### 分页查询 ### Query接口提供用于分页的两个函数 * setFirstResult(index); 表示从指定索引的位置开始查询 * setMaxResults(num); 表示一次返回多少个对象 * private void hql() { //获取session Session session = HibernateSessionFactory.getSession(); //hql语句 . 是类名称 , 不是数据库的表名 String hql = "from Books as b "; Query query = session.createQuery(hql); query.setFirstResult(0); query.setMaxResults(4); List<Object> list = query.list(); Iterator<Object> itor = list.iterator(); while(itor.hasNext()){ //返回的是一个对象数组, [字段1, 字段2]的数组 Books book = (Books)itor.next(); System.out.println(book.getTitle()); } } ### 条件查询 ### 根据like关键字进行模糊查询 private void hql() { //获取session Session session = HibernateSessionFactory.getSession(); //hql语句 . 是类名称 , 不是数据库的表名 String hql = "from Books as b where b.title like ?"; Query query = session.createQuery(hql); query.setString(0, "%java%"); List<Object> list = query.list(); Iterator<Object> itor = list.iterator(); while(itor.hasNext()){ //返回的是一个对象数组, [字段1, 字段2]的数组 Books book = (Books)itor.next(); System.out.println(book.getTitle()); } } 除了setString()给”?”设置参数外, 常用的还有setDouble(),setDate(), setInteger() 根据参数进行查询, 用“:”开头, 后面定义要设置key, 通过setString给key赋值 private void hql() { //获取session Session session = HibernateSessionFactory.getSession(); //hql语句 . 是类名称 , 不是数据库的表名 String hql = "from Books as b where b.title=:bookTitle"; Query query = session.createQuery(hql); query.setString("bookTitle", "《java入门》"); List<Object> list = query.list(); Iterator<Object> itor = list.iterator(); while(itor.hasNext()){ //返回的是一个对象数组, [字段1, 字段2]的数组 Books book = (Books)itor.next(); System.out.println(book.getTitle()); } }
还没有评论,来说两句吧...