Hibernate 使用纯SQL语句完成查询操作

采用这种方式查询原因:由于多表关联,在查询时无需多余的字段,为了少些不必要的字段和代码,故初次下策,一般情况下采用这种方式。
当前项目使用到spring+springmvc + hibernate 框架整合,在多表关联查询是遇到一些问题。后来发现是否可以采用纯sql语句来查询,在google查询一番后,整理如下:

public List findBirthdayAccounts() {
        List rsli = (List) this.getHibernateTemplate().executeFind(new HibernateCallback(){
            public Object doInHibernate(Session session)
                    throws HibernateException, SQLException {
                String sql = "select distinct r.user_id, c.name, birthday, account_no  from  auth_teacher t ,  auth_relation r, auth_account a, center_user_name c " +
                        " where t.teacher_no=r.user_id  and a.user_id = r.user_id and a.account_no=c.jaccount AND SUBSTR(t.birthday, 6, 5)= to_char(sysdate,'mm-dd') ";
                Query q = session.createSQLQuery(sql);
                return q.list();
            }
        });
        List fieldTypes = new ArrayList<>();
        for (Iterator iterator=rsli.iterator();iterator.hasNext();) {
            Object[] objects = (Object[]) iterator.next();
            FieldType fieldType = new FieldType();
            fieldType.setUserId(objects[0].toString());
            fieldType.setName(objects[1].toString());
            fieldType.setBirthday(objects[2].toString());
            fieldType.setAccountNo(objects[3].toString());
            fieldTypes.add(fieldType);
        }
        return fieldTypes;
    }

Hibernate 使用纯SQL语句完成查询操作_第1张图片

说明:
sql查询出来的数据为Object数组,并不是json数组类型,由于接口采用Restful风格展示,于是新建FieldType用于封装查询出来的数据。

你可能感兴趣的:(学习笔记)