hibernate复杂sql查询

hibernate如何实现复杂的sql查询--MySQL的11111111

img

可以使用SQLQuery去实现,

String sql = "select  xxxxxx ";
SQLQuery query = this.getSession().createSQLQuery(sql);
List list = query.list();

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/743563
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:hibernate显示完整sql语句的插件
  • 除此之外, 这篇博客: Hibernate之HQL中的 1、原生sql分页 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • ①、BookDao

    /**
    	 * 没有使用BaseDao之前的代码
    	 * @param book
    	 * @param pageBean
    	 * @return
    	 */
    	public List<Book> list(Book book, PageBean pageBean) {
    		Session session = SessionFactoryUtil.getSession();
    		Transaction transaction = session.beginTransaction();
    		String hql = "from Book where 1 = 1";
    
    		if (StringUtils.isNotBlank(book.getBookName())) {
    			hql += " and bookName like :bookName";
    		}
    		Query query = session.createQuery(hql);
    		
    		if (StringUtils.isNotBlank(book.getBookName())) {
    			query.setParameter("bookName", book.getBookName());
    		}
    
    		if (pageBean != null && pageBean.isPagination()) {
    			query.setFirstResult(pageBean.getStartIndex());
    			query.setMaxResults(pageBean.getRows());
    		}
    		List<Book> list = query.list();
    		transaction.commit();
    		session.close();
    		return list;
    	}

    ②、测试及结果

     

  • 您还可以看一下 铭智老师的java代码审计系统课程课程中的 Hibernate型sql注入原理分析小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    要通过Hibernate执行复杂的SQL查询,可以按照以下步骤进行操作:

    1. 获取Session对象:首先需要获取当前会话的Session对象。

    2. 开启事务:在执行SQL查询之前,需要开启一个事务。

    3. 构建SQL查询语句:使用SQL语句来执行复杂的查询操作。可以根据需要编写包含多个表和条件的查询语句。

    4. 创建Query对象:使用Session的createSQLQuery方法创建一个Query对象,将SQL语句传入作为参数。

    5. 执行查询:使用Query对象的list方法执行查询,并将结果存储在一个列表中。

    6. 提交事务:调用Session的getTransaction().commit()方法提交事务。

    7. 返回结果:将查询结果返回。

    下面是一个示例代码,演示了如何通过Hibernate执行复杂的SQL查询:

    public static List<Student> selectStudentListBySql(int age) {
        // 获取Session对象
        Session session = getSession();
        try {
            session.beginTransaction();
            // 构建SQL语句
            String sql = "SELECT id, name, age FROM student WHERE age = :age";
            // 创建Query对象
            SQLQuery query = session.createSQLQuery(sql);
            // 设置参数的值
            query.setInteger("age", age);
            // 指定结果集的映射关系
            query.addEntity(Student.class);
            // 执行查询并获取结果
            List<Student> studentList = query.list();
            // 提交事务
            session.getTransaction().commit();
            return studentList;
        } catch (Exception e) {
            e.printStackTrace();
            // 出现异常时回滚事务
            session.getTransaction().rollback();
        } finally {
            if (session != null && session.isOpen()) {
                session.close(); // 关闭Session
            }
        }
        return null;
    }
    

    请注意,这只是一个示例代码,具体的SQL查询语句和参数绑定方式可能会根据实际情况而有所不同。在构建SQL查询时,需要根据具体的表结构和查询需求进行相应的调整。