1.createSQLQuery 1.1默认查询的结果为BigDecimal 1.2通过addScalar("CGD_ID", StandardBasicTypes.LONG)可以将结果直接转为Long StringBuffer sb = new StringBuffer();sb.append("select g.CGD_ID from em_circle_apply_info a join em_circle_group_def g on a.CAI_CGD_ID = g.CGD_ID ");if (size != null) {sb.append(" where rownum < " + (size+1));}sb.append(" group by a.CAI_CGD_ID order by count(a.CAI...
Hibernate原生SQL查询多表关联,SQL语句要注意的问题@for&ever 2009-9-4 系统环境:MySQL5.1Hibernate3.3 有如下的假定:实体类 Question 和 Answer分别对应数据表 question 和answer。并且表 question 和answer 的字段大部分都一样,字段数目也一样。 执行如下的操作:1>使用hibernate 使用原生SQL查询,Query q = session.createSQLQuery(sql).addEntity(Question.class).addEntity(Answer.class);createSQLQuery执行的sql是如下...
如果你跟我一样比较熟悉SQL,同时不想学习一门新的语言。那么在hibernate中使用Native SQL 查询也是一种不错的方式。 一方面,Native SQL在效率方面有天生的优势; 另一方面,SQL是数据库操作的一种标准,我们与程序、数据库关联很小。如果将来不用hibernate,而是用别的ORM,sql一样好用。 但尽量用标准SQL,而不要用过多方言SQL。 标量查询 最基本的 SQL 查询就是获得一个标量(数值)的列表。sess.createSQLQuery("SELECT ...
,而且必须是所有的属性
3,sql语句 String sql="select {s.*},{st.*} from grade s,student st where s.id=st.classid"
SQLQuery query=session.createSQLQuery(sql) ;
query.addEntity("s", Grade.class);
query.addEntity("st", Student.class);
利用这样的查询得到的是一个object[]数组,object[0]就是班级实体类,object[1]就是学生实体类
可以用addScalar(String arg,Type type)方法定义要返回的字段类型,如
s.createSQLQu...
然后我们开始写这个数据库操作的dao,代码如下:Java代码 String sql = "select u.userName as userName ,p.title as title ,p.addTime as addTime from user as u,post as p where u.id=p.userId"
Query q = factory.getCurrentSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(PostVO.class));红字部分必须跟PostVO中的属性一直,这样就可以返回一个针对PostVO的一个集合。 其实大家可以看下hiber...
<Map<Object, Object>> listTest = this.getService().getListBySql(sqlTest);for (Map<Object, Object> m : listTest) {for (Object k : m.keySet()) {System.out.println(k + " : " + m.get(k));}}执行代码输出结果为:但其sql语句在数据库中执行结果为:其中this.getService().getListBySql()方法是封装了hibernate原生sql查询List list = (List) this.getHibernateTemplate().execute(new HibernateCallback() {public Object ...
@Override2 @SuppressWarnings("unchecked")3 public <T> Pagination<T> getPageResultObjectParamsBySql(Class<T> clazz,4 String hql, int pageNo, int pageSize,5 Object[] param)6 throws RuntimeException {7 List<T> list = null;8 Pagination<T> page;9 try {
10 Session session = getSession();
11 log.info("[执行HQL:{}]", hql);
1...
它们都将返回一个Object数组组成的List,数组每个元素都是person_inf表的一个字段值。Hibernate会使用ResultSetMetadata来判定返回的标量值的实际顺序和类型。 但是在JDBC中过多的使用ResultSetMetadata会降低程序的性能。所以为了过多的避免使用ResultSetMetadata或者为了指定更加明确的返回值类型,我们可以使用addScalar()方法:
session.createSQLQuery("select * from person_inf") .addScalar("name",StandardBas...
* from person_inf").list(); session.createSQLQuery("select id,name,age from person_inf").list(); 它们都将返回一个Object数组组成的List,数组每个元素都是person_inf表的一个字段值。Hibernate会使用ResultSetMetadata来判定返回的标量值的实际顺序和类型。 但是在JDBC中过多的使用ResultSetMetadata会降低程序的性能。所以为了过多的避免使用ResultSetMetadata或者为了指定更加明确的返回值类型,我们可以使用addS...
StringBuffer();sb.append("select g.CGD_ID from em_circle_apply_info a join em_circle_group_def g on a.CAI_CGD_ID = g.CGD_ID ");if (size != null) {sb.append(" where rownum < " + (size+1));}sb.append(" group by a.CAI_CGD_ID order by count(a.CAI_CGD_ID) desc ");Query query = this.getSession().createSQLQuery(sb.toString()).addScalar("CGD_ID", StandardBasicTypes.LONG);2.createQuery2.1默认查询结果为Long...
SQL查询是通过SQLQuery接口来表示的,SQLQuery接口是Query接口的子接口,完全可以使用Query接口的方法,SQLQuery增加了二个重载方法
addEntity():将查询到的记录与特定的实体关联
addScalar():江查询的记录关联标量值
执行SQL的步骤如下:
获取Hibernate Session对象
编写SQL语句
创建SQLQuery对象,调用Session的createSQLQuery方法创建
调用SQLQuery对象的 addScalar 或者 addEntity 方法将选出的结果与变量值或实体进行关联
如...
聚合函数:count(),avg(),sum(),min(),max()
例:(1)查询Dept表中的所有的记录条数。
String hql=" select count(*) from Dept ";
Long count=(Long)session.createQuery(hql).uniqueResult();
当不确定返回的是什么类型的时候可以根据:变量名.getClass()方法得到类型
例如:count.getClass() 返回的是:java.lang.Long
(2)查询所有员工的工资总和。
String hql="select sum(salary) from Emp";
Do...
(RTDataAttrDto.class)); Hibernate原生sql的查询,返回结果设置到DTO标签:creates factor current bean hiberna bsp res etc cto 本文系统来源:http://www.cnblogs.com/lj821022/p/6606997.html
HibernateHibernate对原生SQL查询的支持和控制是通过SQLQuery接口实现的。通过Session接口,我们能够很方便的创建一个SQLQuery(SQLQuery是一个接口,在Hibernate4.2.2之前,默认返回的是SQLQuery的实现类——SQLQueryImpl对象,在下文中出现的SQLQuery如非注明,都是指该子类)对象来进行原生SQL查询:
session.createSQLQuery(String sql);
SQLQuery实现了Query接口,因此你可以使用Query接口中提供的API来获取数据。
最简单的示例...
String sql = "select * from sql_student";SQLQuery q = session.createSQLQuery(sql).addScalar("id", StandardBasicTypes.LONG)//明确返回值类型,属性名称必须和表中列名相同.addScalar("sname", StandardBasicTypes.STRING).addScalar("teacher_id", StandardBasicTypes.LONG);List list = q.list();for(Object ob : list) {Object[] ob1 = (Object[]) ob;System.out.println(ob1[0] + " | " + ob1[1] + " | " + ob1[2]);}多表...