hibernatesql查询map
① hibernate 将结果封装成map
两种方式:
原生sql查询
以下代码功能:Hibernate执行原生SQL返回List类型结果集
//获得session对象
Session session = super.getSession();//创建sql语句
String sql = "SELECT users.name,usersinfo.* FROM users,usersinfo WHERE users.id = usersinfo.userid";//获得SQLQuery对象
SQLQuery query = session.createSQLQuery(sql); //设定结果结果集中的每个对象为Map类型 query.setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP); //执行查询
List list = query.list();HQL查询
如果部分使用alias,部分不使用,则使用了alias的将使用alias作为key,没有使用的则仍然使用序号代替,其中序号则为在查询结果的序号
String query = "select new Map(p.code as code, p.value) from Dictionary p";
List list = session.createQuery(query).list();
说明:两种方式最后返回的List 都是 Map<String, Object> 数据结构。
希望对你有帮助,如果满意还望采纳。谢谢 !
② 到底怎么查看Hibernate生成SQL中的参数值
Hibernate在查询出一行数据之后,内部实现还是将数据读出到ResultSet里。
然后分析session.get(Class, Object)函数的Class参数,通过类反射可以知道该Class包含哪些对象并且newInstance一个该类的对象。
从ResultSet读出属性填充到该对象,用户只需要对这个对象进行简单的类型转换就可以使用了。
例子如下:
static final ActiveRecord setupObject (Object object, ResultSet resultSet) throws java.sql.SQLException, ObjectAnalysisException
{
Map<Field, Accesstor> fields = ActiveRecord.analizeObjectFields(object);
try
{
for(Field field : fields.keySet())
{
Object value = resultSet.getObject(field.getName());
if(value != null)
fields.get(field).getSetter().invoke(object, value);
}
}
catch(SQLException err)
{
throw err;
}
catch(Exception err)
{
if(err instanceof IllegalAccessException || err instanceof IllegalArgumentException)
throw new ObjectAnalysisException(err.toString(), err);
else if(err instanceof InvocationTargetException)
throw new ObjectAnalysisException(err.toString(), err);
}
object.setId(resultSet.getLong("id"));
return object;
}
③ hibernate查询问题
你用我的试一试,我用的是泛型类你写一个自己的类实现这个类再传入对应的bean就行:
public class CommonDaoImpl<T> implements ICommonDao<T> {
private Class entityClass = GenericSuperclass.getActualTypeClass(this.getClass());
public List<T> findCollectionByCondition(String condition,
final Object[] params, LinkedHashMap<String, String> orderby) {
String hql="from "+entityClass.getSimpleName()+" o where 1=1 ";
String orderHql=this.orderByHql(orderby);
final String finalHql = hql + condition + orderHql;
List<T> list=(List<T>) hibernateTemplate.execute(new HibernateCallback<T>() {
public T doInHibernate(Session session) throws HibernateException,
SQLException {
Query query=session.createQuery(finalHql);
for (int i = 0; params!=null&& i < params.length; i++) {
query.setParameter(i, params[i]);
}
return (T) query.list();
}
});
return list;
}
}
--------------------------------下面是一个调用的例子:
public List<Bookmsg> findall(Bookmsg book) {
String bookid=book.getBookid();
String bookname=book.getBookname();
List<Bookmsg> list =new ArrayList<Bookmsg>();
// 组织查询条件
String condition = "";
List<String> paramsList = new ArrayList<String>();
if (StringUtils.isNotBlank(bookid)) {
bookid = bookid.trim();
condition += " and o.bookid = ?";
paramsList.add(bookid);
}
if (StringUtils.isNotBlank(bookname)) {
bookname = bookname.trim();
condition += " and o.bookname like ?";
paramsList.add("%["+bookname+"]%");
}
Object[] params = paramsList.toArray();
LinkedHashMap<String, String> orderby = new LinkedHashMap<String, String>();
orderby.put("bookid", "asc");
list = bmDao.findCollectionByCondition(condition, params, orderby);
return list;
}
④ hibernate怎么获取数据库表字段等信息
hibernate怎么获取数据库表字段等信息
教你个方法:
List result = session.createSQLQuery(sql)
.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list()
用这个方法可以把数据库查询出来的每一行封装成一个Map类型,Key为数据库字段,Value为值,
然后把这些Map放到了一个List里面,
如果你只返回一条记录:
那么
Map<String, Object> map = (Map<String, Object>) result.get(0);
即可得到你这一行记录转换层的Map,
如果有多条,迭代List即可。
希望对你有帮助
⑤ hibernate使用sql查询
给你一个我写的例子:
public List<Statistics> statistics(){
String sql="select "+
"sum(case when (t.type_code=3) then 1 else 0 end),"+
"sum(case when (t.type_code=5) then 1 else 0 end),"+
"sum(case when (t.type_code=8) then 1 else 0 end),"+
"sum(case when (t.type_code=0) then 1 else 0 end),"+
"sum(case when (t.type_code=6) then 1 else 0 end),"+
"sum(case when (t.type_code=9) then 1 else 0 end),"+
"count(*)"+
"from cs_cust_complaint_data t where t.from_flag='2'";
List<Statistics> stal = new ArrayList<Statistics>();
SQLQuery query = getSession().createSQLQuery(sql);
Object[] obj = (Object[])query.uniqueResult();
BigDecimal b0 = (BigDecimal)obj[0];
BigDecimal b1 = (BigDecimal)obj[1];
BigDecimal b2 = (BigDecimal)obj[2];
BigDecimal b3 = (BigDecimal)obj[3];
BigDecimal b4 = (BigDecimal)obj[4];
BigDecimal b5 = (BigDecimal)obj[5];
BigDecimal b6 = (BigDecimal)obj[6];
Double zs = b6.doubleValue();
DecimalFormat df=new DecimalFormat("#.00");
stal.add(new Statistics("卷烟营销", b0.longValue(),Double.parseDouble(df.format(b0.doubleValue()/zs*100))));
stal.add(new Statistics("专卖法规", b1.longValue(),Double.parseDouble(df.format(b1.doubleValue()/zs*100))));
stal.add(new Statistics("烟叶生产", b2.longValue(),Double.parseDouble(df.format(b2.doubleValue()/zs*100))));
stal.add(new Statistics("政风行风", b3.longValue(),Double.parseDouble(df.format(b3.doubleValue()/zs*100))));
stal.add(new Statistics("人事劳资", b4.longValue(),Double.parseDouble(df.format(b4.doubleValue()/zs*100))));
stal.add(new Statistics("其他咨询", b5.longValue(),Double.parseDouble(df.format(b5.doubleValue()/zs*100))));
return stal;
}
⑥ 请问我用hibernate的SQLQuery查询数据库里的一个字段onlineDuration在某个时间段的总数
在某些场合下,我们可能想使用HIBERNATE的框架提供的SQL查询接口,但是,由于实体没有做映射,HIBERNATE不能把结果集转换成你想要的List<POJO>,本文讨论如何在这种情况下让HIBERNATE直接返回你想的结果。下面是简单的查询封装方法
Java代码
public List<?> findObjectBySql(String queryString,Class<?> pojoClass){
//使用SQL构造查询对象,此SQL是可以被JDBC接受的SQL,如SELECT * FROM XXX_TABLE
Query query = this.getSession().createSQLQuery(queryString);
//设置结果集转换器,这是本文重点所在
query.setResultTransformer(new EscColumnToBean(pojoClass));
//返回查询结果
return query.list();
⑦ hibernate 使用SQLquery 查询List<map<String,Object>> 后 怎么设置Object的数据类型啊
查询List<map<String,Object>>
是什么意思咧? 查询结果不是是你自己装配置的吗?
原生的结果返回的话强转成对应的类型就可以吧
⑧ 怎样用hibernate的hql查询查询成map或list
最简单的是给你个案例,下面是hql实现的分页查询,看看就明白的
/**
* 分页查询列表
*/
@SuppressWarnings("unchecked")
public List<T> queryForList(final String hqlStr, final Object[] paras,
final int pageNo, final int pageSize) throws CCException {
List<T> objList = new ArrayList<T>();
int count = 0;
Query query = this.getCurrentSession().createQuery(hqlStr);
if (null != paras && paras.length > 0) {
for (Object para : paras) {
query.setParameter(count++, para);
}
}
query.setFirstResult((pageNo - 1) * pageSize);
query.setMaxResults(pageSize);
objList = query.list();
return objList;
}