hibernate---HQL语句
一、HQL原理
- 面向对象,与数据库无关
- 最终也会生成sql,即HQL使用范围小于sql的范围
- 由query对象获得
- HQL语句没有insert语句,只能session.save添加
二、HQL与Sql区别:
sql关联查询:
- ","号默认内关联---------------查询两表同时存在的数据
- left/right join 为左/右外连接----------查询左/右表数据,右/左表没有,以左/右表为准,右/左表为null
- join...on... 关联条件
HQL关联查询:
- 在hibernate中已经做好了映射关系,可用对象调用对象的方式查询
- 对象与对象间一定要配置映射关系(才能关联查询)
- 没有join后on加条件
sql语句分页:limit(起始数(当前页),每页显示数(常量))
HQL语句分页:.setFirstResult((currPage-1)*number)//起始位置 .setMaxResults(number)//每页显示行数
三、代码实例:
@Test public void findJoin(){//HQL联表查询 String hql = "select new Map(s.name,t.name,t.clas) from StudentBean s left join s.teacher t where t.name=?"; List<Map> list = session.createQuery(hql).setParameter(0, "陈老师").list(); for (Map map:list) { System.out.println(map.get("0")); } } @Test public void findPage(){//演示HQL分页查询 int currPage = 1; int number = 2; String hql = "from StudentBean"; List<StudentBean> list = session.createQuery(hql) .setFirstResult((currPage-1)*number)//起始位置 .setMaxResults(number)//每页显示行数 .list(); for (StudentBean stu:list) { System.out.println(stu.getName()); } } @Test public void findObj(){//查询对象 String hql = "from TeacherBean where name=?"; TeacherBean t = (TeacherBean) session.createQuery(hql) .setParameter(0, "陈老师").uniqueResult();//表示唯一对象 System.out.println(t.getName()); } @Test public void del(){//删除 String hql = "delete from StudentBean where name=?"; int i = session.createQuery(hql) .setParameter(0, "小子3").executeUpdate();//表示执行修改、删除后返回受影响的行数 System.out.println(i); } @Test public void update(){//修改 String hql = "update StudentBean set name = ? where name = ?"; int i = session.createQuery(hql) .setParameter(0, "小子22") .setParameter(1, "小子22").executeUpdate(); System.out.println(i); } ===================================================================================================================================== @Test public void findTeacher(){//将查询结果放入实体中 String sql = "select * from t_teacher"; //查询结果要与对应实体属性一一对应,不能是*(不知道哪个数据放到哪个属性里) //实体与数据表列名早已经映射好,不需要取别名 NativeQuery query = session.createNativeQuery(sql); query.addEntity(TeacherBean.class);//把查询结果放到,被hibernate管理的实体中 List<TeacherBean> list = query.list(); for (TeacherBean t:list) { System.out.println(t.getName()); } } @Test public void findTeacher2(){//把查询结果放入数组中 String sql = "select t_name,t_class from t_teacher"; List<Object[]> list = session.createNativeQuery(sql).list(); for (Object[] obj:list) { System.out.println(obj[0]+";"+obj[1]); } }

浙公网安备 33010602011771号