关于hibernate的查询语句

hibernate的查询方式有HQL, CretiriaSQLQuery

 

 

在DAO层获取到hibernate模板,即hql执行crude操作:

查询

1.根据主键查询列表one

         this.getHibernateTemplate().get(User.class, id);

2.查询列表list        注意 一定是 from开头的

    String hql=" FROM User info WHERE id='"+id+"';

    this.getHibernateTemplate().find(sql);

 

新增

1.新增操作 参数是实体类

    (String)this.getHibernateTemplate().save(infopo);

    Serializable pk = this.getHibernateTemplate().save(contractInfo);

    return (String) pk;

     该处返回的时生成的一个主键

修改

1.修改操作 参数是实体类  实际是根据id修改

    this.getHibernateTemplate().update(infopo);

   删除

1.删除操作  参数是实体类  实际是根据id修改

    this.getHibernateTemplate().delete(pH);

 

============================SQLQuery=============================

 

SQLQuery接口用于接收一个sql语句进行查询,

 SQLQuery是hibernate用于支持原生sql的接口类,然后调用list()或者uniqueResult()方法进行查询,

 但是SQL语句不会直接封装到实体对象中,需要我们手动写代码才可以封装到实体中

 

查询

1.查询列表list 

  SQLQuery sqlQuery = session.createSQLQuery(" select * from Customer");
  sqlQuery.addEntity(Customer.class);

  注意这里查询的必须时全部的字段,否则会报错列名无效;

2..查询列表list

SQLQuery createSQLQuery=this.getSession().createSQLQuery("select a,b from t")

.addScalar("a").addScalar("b");

return createSQLQuery.list();

注意这里可以查询部分字段 ,也可以查询其他表的字段,但是返回值的类型时Object[]…后续不知道怎么处理了。。。

3.SQLQuery 的连表查询

action:

List list =  statisticalQueryService.findPrescription(Bean bean,startIndex,this.getNumPerPage());

       for (int i = 0; i < list.size(); i++) {

           Object []object = (Object[]) list.get(i);   // 将获取到的值,用object[]接受

           bean= new StatisticalQueryVo();    //bean自建的 不对应数据库表,用于接收值,和返回页面值

           bean.setContractNo((String) object[0]);

       }

DAO:

    public List findPrescription( StatisticalQueryConditionVo statisticalQueryConditionVo,   int startIndex, int numPerPage) {

       session = this.getSession();

       StringBuilder str = new StringBuilder();

       str.append("select  t1.a,t1.b,t2.c,t2.d  from t1 left join t2 on t1.id = t2.id "); //连表查询返回多个表的字段

       Query query = session.createSQLQuery(hql).setFirstResult(startIndex).setMaxResults(numPerPage);//  分页操作

       List list = query.list();

       return list;

    }

连表查询后会返回list的数据:?代替了实体类。

用Object[] ob 数组 接受  list的  遍历值:

 

再将数组 object的值 赋值到 实体类返回到前端即可。

新增 删除 和 修改

 String sql = "insert  delete  update  table  where id= '?'  "

   this.getSession().createSQLQuery(sql).executeUpdate();

你可能感兴趣的:(关于hibernate的查询语句)