hibernate的查询、删除、修改基本操作

SQL与HQL的区别
    1、sql 面向数据库表查询。hql 面向对象查询。
    2、sql: from 后面跟的是表名, where 后用表中字段做条件查询。hql:from 后面跟的类名,where后用对象的属性做条件。
两者间最根本的区别是,HQL是面向对象的。
SQL语句的关联查询
    1、用逗号,默认为内关联,查询出来的数据是两个表都同时存在的数据(交集),效率高
    2、left 或right join  ,以左或右为参照物。比如左连接,左表有的数据 右表没有,那么查询出来的数据以左表的数据为准,右表没有的用null来占位。
    3、join ...... on  on后面是两个表关联的条件。
HQL的关联查询
1、在Hibernate对象之间我们已经做好映射关系,要查任何一个对象的数据,都可以在对象中“点”出来
2、HQL进行关联查询的时候,对象与对象之间一定要预先配置了映射关系。因此HQL在使用关联查询时,没有on。
下面我们就来看看hql的基本操作:
1、查询出一个对象
 1   /**
 2      * 查询一个对象
 3      */
 4     @Test
 5     public void hqlTest9(){
 6         String hql="from MTeacherEntity where teacherName=?";
 7         MTeacherEntity t= (MTeacherEntity) session.createQuery(hql)
 8                 .setParameter(0,"李老师")
 9                 .uniqueResult();    //查询一个对象,若返回多个,会报错
10         System.out.println(t.getTeacherId()+" "+t.getTeacherName());
11     }

2、查询出多个对象,可以使用Object数组接收,也可以使用Map接收,还可以自定义DTO类进行接收。

 1   /**
 2      * 返回多个对象
 3      */
 4     @Test
 5     public void hqlTest4(){
 6         String hql="select teacherId,teacherName from MTeacherEntity where teacherName like ?";
 7         List<Object[]> list=session.createQuery(hql)
 8                 .setParameter(0,"%李%").list();
 9         for (Object obj[]:
10                 list) {
11             System.out.println(obj[0].toString()+"  "+obj[1].toString());
12         }
13     }
14     @Test
15     public void hqlTest5(){
16         String hql="select new com.project.entity.many.TeacherDTO(teacherId,teacherName) from MTeacherEntity where teacherName like ?";
17         List<TeacherDTO> list=session.createQuery(hql)
18                 .setParameter(0,"%老师%").list();
19         for (TeacherDTO teacher:
20                 list) {
21             System.out.println(teacher.getTeacherId()+"  "+teacher.getTeacherName());
22         }
23     }
24     @Test
25     public void hqlTest6(){
26         String hql="select new Map(teacherId,teacherName) from MTeacherEntity where teacherName like ?";
27         List<Map> list=session.createQuery(hql)
28                 .setParameter(0,"%老师%").list();
29         for (Map teacher:
30                 list) {
31             System.out.println(teacher.get("0")+"  "+teacher.get("1"));
32         }
33     }

3、分页查询

 1     /**
 2      * 分页查询
 3      */
 4     @Test
 5     public void hqlTest8(){
 6         int pageNO=2;
 7         int pageSize=5;
 8         String hql="from MTeacherEntity";
 9         List<MTeacherEntity> list=session.createQuery(hql)
10                 .setFirstResult((pageNO-1)*pageSize)    //起始下标
11                 .setMaxResults(pageSize)        //返回多少条数据
12                 .list();
13         for (MTeacherEntity t:
14              list) {
15             System.out.println(t.getTeacherName());
16         }
17     }

4、关联查询

 1     /**
 2      * 关联查询
 3      */
 4     @Test
 5     public void hqlTest7(){
 6         String hql="select new Map(t.teacherId,t.teacherName,s.studentName)" +
 7                 " from MTeacherEntity t left join t.studentSet s " +
 8                 " where t.teacherName like ?";
 9         List<Map> list=session.createQuery(hql)
10                 .setParameter(0,"%老师%").list();
11         for (Map teacher:
12                 list) {
13             System.out.println(teacher.get("0")+"  "+teacher.get("1")+"学生:"+teacher.get("2"));
14         }
15     }

5、修改

 1     /**
 2      * 修改
 3      */
 4     @Test
 5     public void hqlTest10(){
 6         String hql="update MTeacherEntity set teacherName=? where teacherId=?";
 7         int i=session.createQuery(hql)
 8                 .setParameter(0,"陈老师")
 9                 .setParameter(1,"402881d670f68cf60170f68cfa600000")
10                 .executeUpdate();
11         System.out.println(i);//打印修改、删除影响的条数
12     }

6、删除

 1 /**
 2      * 删除
 3      */
 4     @Test
 5     public void hqlTest11(){
 6         String hql="delete from MTeacherEntity where teacherName=?";
 7         int i=session.createQuery(hql)
 8                 .setParameter(0,"陈老师")
 9                 .executeUpdate();
10         System.out.println(i);
11     }

hql没有提供insert的添加语句,他是直接使用save进行插入数据的。所以hql只提供了删除、修改、查询语句。

 

猜你喜欢

转载自www.cnblogs.com/libobo22/p/12533167.html