Hibernate use HQL, SQL summary

Hibernate HQL use

What 1.HQL that?

HQL ( Hibernate  Query  Language) statements hibernate is dedicated to query data, unlike SQL, HQL closer to the object-oriented way of thinking. 

2. Why use HQL?

Avoid using HQL query using JDBC some drawbacks:

No need to write complicated SQL statements, query for an entity class and its properties;

Query results are stored directly in the List of objects, no package again;

Independent of the database, for automatically generating different databases of different SQL statements executed according to the configuration Hibernate dialect attribute.

3.HQL syntax

[select/update/delete……] from Entity [where……] [group by……] [having……] [order by……].

[Note]: HQL statement keywords are case insensitive, but the entity class and object properties are case sensitive.

4. Test JUnit test class HQL

Example 1:

    public void hql1() {
        HQL String = "TeacherEntity from the SELECT t t" ;
         // create a query object 
        Query Query = session.createQuery (HQL);
         // execute the query 
        List <Object> List = Query.list ();
         for (Object obj: List) {
            System.out.println(((TeacherEntity) obj).getTeacherName() + "/" + ((TeacherEntity) obj).getTeacherClass());
        }
    }

    @Test
    public void hql2() {
        String hql = "from TeacherEntity";
        List<TeacherEntity> list = session.createQuery(hql).list();
        for (TeacherEntity t : list) {
            System.out.println(t.getTeacherName() + "/" + t.getTeacherClass());
        }
    }

These two results will be the same:

(1) Under what circumstances, do not write select
When we query is TeacherEntity all the properties, we can not write select. Such as: from TeacherEntity; of course also be written, but the format is changed to: select t from TeacherEntity (as) t; parentheses may not be written can be written as;

(2) Under what circumstances, write select
when we are no longer query all the attributes Man, we have to write on select. Such as: When we query TeacherEntity the name and class attributes, so we have to write: select t.name, t.class from TeacherEntity t ; can not aliases: select name, class from TeacherEntity;

(3) when the result of the query is an object may be received by Object, the receiving entity may be.

Example 2:

    @Test
    public void hql3() {
        String hql = "from TeacherEntity where teacherName=? ";
        List<TeacherEntity> list = session.createQuery(hql).setParameter(0, "陈老师").list();
        for (TeacherEntity t : list) {
            System.out.println(t.getTeacherName() + "/" + t.getTeacherClass());
        }
    }

    @Test
    public void hql33() {
        String hql = "from TeacherEntity where teacherName=:name ";
        List<TeacherEntity> list = session.createQuery(hql).setParameter("name", "陈老师").list();
        for (TeacherEntity t : list) {
            System.out.println(t.getTeacherName() + "/" + t.getTeacherClass());
        }
    }

HQL use placeholders:

(1) placeholder measure from the index 0;

(2) the use of the above named parameters.

Example 3:

    @Test
    public void hql4() {
        String hql = "select teacherName,teacherClass from TeacherEntity where teacherClass=?";
        List<Object[]> list = session.createQuery(hql).setParameter(0, "Java1").list();
        for (Object[] objs : list) {
            System.out.println(objs[0].toString() + "/" + objs[1].toString());
        }
    }

    @Test
    public void hql5() {
        String hql = "select new com.project.hibernate.dto.TeacherDto(teacherName,teacherClass) from TeacherEntity where teacherClass=?";
        List<TeacherDto> list = session.createQuery(hql).setParameter(0, "Java1").list();
        for (TeacherDto dto : list) {
            System.out.println(dto.getUserName() + "/" + dto.getUserClass());
        }
    }

    @Test
    public void hql6() {
        String hql = "select new map(teacherName,teacherClass) from TeacherEntity where teacherClass=?";
        List<Map> list = session.createQuery(hql).setParameter(0, "Java1").list();
        for (Map map : list) {
            System.out.println(map.get("0") + "/" + map.get("1"));
        }
    }

When we query object properties of more than one, you can use an array of objects to receive results;

Can also be used a temporary data transfer object is received (dto), configured to have a method in which a corresponding dto;

Map can also use received, the results obtained on the key map button are "0", "1", "2", "3" ....., the value of the corresponding attribute.

Example 4 (fuzzy query):

    // fuzzy query
    @Test
    public  void hql8 () {
        String hql = "select new map(teacherName,teacherClass) from TeacherEntity where teacherClass like ?";
        List<Map> list = session.createQuery(hql).setParameter(0, "%J%").list();
        for (Map map : list) {
            System.out.println(map.get("0") + "/" + map.get("1"));
        }
    }

Example 5 (associated with the query):

    // related inquiries 
    @Test
     public  void hql9 () {
        String hql = "select new map(s.studentName,t.teacherName,t.teacherClass) from StudentEntity s left join s.teacher t where t.teacherName=? ";
        List<Map> list = session.createQuery(hql).setParameter(0, "陈老师").list();
        for (Map map : list) {
            System.out.println(map.get("0") + "/" + map.get("1") + "/" + map.get("2"));
        }
    }

Because entity class already mapped foreign key table students and teachers table's primary key, so here goes like SQL write "on s.f_t_id = t.t_id".

Example 6 (paging query):

    // paging query 
    @Test
     public  void hql10 () {
         // current page 
        int currPage =. 4 ;
         // page shows the number of 
        int the pageSize =. 5 ;
        String hql = "from TeacherEntity where teacherName like ?";
        List<TeacherEntity> list = session.createQuery(hql).setParameter(0, "%刘老师%").
                setFirstResult((currPage - 1) * pageSize).setMaxResults(pageSize).list();
        for (TeacherEntity t : list) {
            System.out.println(t.getTeacherName());
        }
    }

Query object provides an easy method of paging:

setFirstResult (int firstResult) method sets the starting index (equivalent to the limit (a, b) a);

setMaxResults (int maxResults) method returns the setting of the maximum number of records (b equivalent to the limit (a, b)).

Example 7 (returns a result object):

    // Returns an object 
    @Test
     public  void hql11 () {
        String hql = "from TeacherEntity where teacherName=?";
        TeacherEntity t = (TeacherEntity) session.createQuery(hql).setParameter(0, "陈老师").uniqueResult();
        System.out.println(t.getTeacherName() + "/" + t.getTeacherClass());
    }

Examples of determining when to return with only one, or null The uniqueResult () method.

Example 7 (deleting and modifying objects):

   // delete the object 
    @Test
     public  void hql12 () {
        String hql = "delete from TeacherEntity where teacherName=?";
        int i = session.createQuery(hql).setParameter(0, "刘老师19").executeUpdate();
        System.out.println(i);
    }

    // modify objects 
    @Test
     public  void hql13 () {
        String hql = "update TeacherEntity set teacherName=? where teacherId=?";
        int i = session.createQuery(hql).setParameter(0, "测试修改").setParameter(1, "40288ae670f5d8a30170f5d8a5e90011").executeUpdate();
        System.out.println(i);
    }

Hibernate using SQL

    @Test
    public void sql() {
        String sql = "select * from sys_teacher";
        Query NativeQuery = session.createNativeQuery (SQL);
         // to check out the data into the entity, the entity needs to be managed hibernate 
        query.addEntity (TeacherEntity. Class );
        List<TeacherEntity> list = query.list();
        for (TeacherEntity t : list) {
            System.out.println(t.getTeacherName());
        }
    }

    @Test
    public void sql2() {
        String sql = "select t_name,t_class from sys_teacher";
        List<Object[]> list = session.createNativeQuery(sql).list();
        for (Object[] objs : list) {
            System.out.println(objs[0].toString() + "/" + objs[1].toString());
        }
    }

 

Guess you like

Origin www.cnblogs.com/rookie97/p/12536010.html