hibernate的查询方式有HQL, Cretiria和SQLQuery
在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();