当前位置:首页 » 编程语言 » hibernatesql查询字段
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

hibernatesql查询字段

发布时间: 2023-05-29 04:22:16

⑴ hibernate查询语句中条件字段为集合时sql文怎么写

条件字段为集合是指某个条件包含多个值吗?
如果是的话就 where 条件1 in (值1,值2,值3)来表示,这里有一个情况需要说明,如果是在存储过程中使用这个会有点问题,如果是sql的reprotbuilder的话值1,值2可以用一个多值参数传递进来。

⑵ HIbernate多表查询 SQLQuery query2 = session.createSQLQuery(select a.字段1,b.字段2 from a,b) query2.

取不出来么雀裂?森岁激query2中应该就包含a和b字段的内容啊,只要循环此袜就可以取出来的。只不过因为无法确定a表和b表的记录,不知道那个值是a表的哪个值是b表的,单纯取出是可以的

⑶ Hibernate4 升级到Hibernate5 中 sql查询注意事项

Hibernate4 中,利用原生SQL语句查询时,
1、可使用Session.createSQLQuery(sql)建立Qurey(org.hibernate.Query),
2、可使用Query.setParameter(int index, Object obj),对sql语句中的参数根据位置进行参数值动态绑定;

升级到 Hibernate5
1、org.hibernate.Query被标记为@Deprecated
2、Session().createSQLQuery(sql)返回类型为org.hibernate.query.Query;
3、并且Session().createSQLQuery也已经被标记为@Deprecated;
4、可使用Session().createNativeQuery(sql)代替createSQLQuery。
5、createNativeQuery返回的Query, 不可 通过setParameter(int index, Object obj) 根据位置 进行参数值动态绑定; 只可以 通过setParameter(String paramname, Object obj) 按参数名称绑定
6、createNativeQuery(sql)中的sql语句中的 查询占位符
只可使用 命名参数 方式进行编写。

上问错误例子中,将导致如下错误:

⑷ hibernate 的createSQLQuery 要查询 表中的几个字段怎么查呢,写select * 没事

select 字段1,字段2,。。。 from,返回的是一个List<Object>类型的集合,遍历如下,
for(int i = 0; i < list.size(); i++){
Object[] obj = list.get(i);
/肆橡/然后obj[0],obj[1]。。。裂尺旁困乎就是对应的字段值
}

⑸ hibernate sql查询结果集怎么转换

在多表查询的时候使用hibernate的sql查询的时候,一般返回的是object[]数组,或者可以使用
session.createSQLQuery(sql).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
来转化为map来进行处理,可以通过以下方式将查询结果转化为实体类:

1,sql语句 String sql="select s.id as id,s.classname as classname from grade s,student st where s.id=st.classid"

利用以下语句
session.createSQLQuery(sql) .setResultTransformer(Transformers.aliasToBean(Grade.class))可以将sql中查询出来的字段转化为班级这个实体类,但是必须为每个字段指定别名,别名就是班级类里面的对应的属性,但必须注意,对每一个列都必须addScalar("列名"),如果不设置addScalar方法可能会报转型错误的异常.如果查询的结果里面包括多个表里面的字段,不能对应一个实体类去接受,就需要新建一个与查询结果对应的实体类,或者直接使用map结果集

2,sql语句 String sql="select {s.*} from grade s,student st where s.id=st.classid"

针对这样的全部字段查询的sql可以利用addEntity来转化为实体类
SQLQuery query=session.createSQLQuery(sql) ;
query.addEntity("s", Grade.class);

SQL查询语句,它带一个占位符,可以让Hibernate使用字段的别名.
查询返回的实体,和它的SQL表的别名.
addEntity()方法将SQL表的别名和实体类联系起来,并且确定查询结果集的形态。
这样就可以将班级这张表里面的所有字段的值赋值给班级这个实体类java培训机构排名,而且必须是所有的属性

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.createSQLQuery(shuiQingHQL).addScalar("STCD",Hibernate.STRING).addScalar("STNM")

⑹ hibernate查询SQL语句(统计)时的问题

Query query = session.createSQLQuery("select xm,count(xm) count from RcwhB group by xm");

返回的是一个list 查询的时候你在里面加丛清了一个count 的字段
而你对应的RcwhB model类里面肯定没有这个count属性没有李郑歼getCount()和set方法
所以导致hibernate查询的时候不能帮你封装哪冲成对应的modle
所以就报你上面的错误

⑺ 在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 怎样 执行sql语句,获得查询到的值

这个你都要纠结嘛。。直接声明一个int 类型的 变量来接收这个值就可以了,我一般都是把这个写在一个方法里面,这个方法的返回值为Int 在这个方法里面,取出这个值,返回即可。

⑼ Hibernate有几种查询方法

转录:
从点到面,讲讲hibernate查询的6种方法。分别是HQL查询
,对象化查询Criteria方法,动态查询DetachedCriteria,例子查询,sql查询,命名查询。
如果单纯的使用hibernate查询数据库只需要懂其中的一项就可以完成想要实现的一般功能,但是
从一个点,让我们掌握6中方法,则提供了更多选择。每一种方法都有其适用的情况与前提。
HQL查询
HQL是hibernate自己的一套查询语言,于SQL语法不同,具有跨数据库的优点。示例代码:

static void query(String name){
Session s=null;
try{
s=HibernateUtil.getSession();

//from后面是对象,不是表名
String hql="from Admin as admin where admin.aname=:name";//使用命名参数,推荐使用,易读。
Query query=s.createQuery(hql);
query.setString("name", name);

List<Admin> list=query.list();

for(Admin admin:list){
System.out.println(admin.getAname());
}
}finally{
if(s!=null)
s.close();
}
}

适用情况:常用方法,比较传统,类似jdbc。缺点:新的查询语言,适用面有限,仅适用于Hibernate框架。
对象化查询Criteria方法:

static void cri(String name,String password){
Session s=null;
try{
s=HibernateUtil.getSession();

Criteria c=s.createCriteria(Admin.class);
c.add(Restrictions.eq("aname",name));//eq是等于,gt是大于,lt是小于,or是或
c.add(Restrictions.eq("apassword", password));

List<Admin> list=c.list();
for(Admin admin:list){
System.out.println(admin.getAname());
}
}finally{
if(s!=null)
s.close();
}
}

适用情况:面向对象操作,革新了以前的数据库操作方式,易读。缺点:适用面较HQL有限。
动态分离查询DetachedCriteria

static List dc(DetachedCriteria dc) {

Session s = HibernateUtil.getSession();
Criteria c = dc.getExecutableCriteria(s);
List rs = c.list();
s.close();
return rs;
}

DetachedCriteria dc = DetachedCriteria.forClass(User.class);
int id = 1;
if (id != 0)
dc.add(Restrictions.eq("id", id));
Date age = new Date();
if (age != null)
dc.add(Restrictions.le("birthday", age));
List users = dc(dc);
System.out.println("离线查询返回结果:" + users);

适用情况:面向对象操作,分离业务与底层,不需要字段属性摄入到Dao实现层。 缺点:适用面较HQL有限。
例子查询

static List example(User user) {
Session s = HibernateUtil.getSession();
List<User> users = s.createCriteria(User.class).add(
Example.create(user)).list();
// List<User>
// users2=s.createCriteria(User.class).add((Example.create(user)).ignoreCase())
// .createCriteria("child").add((Example.create(user))).list();
return users;
}

适用情况:面向对象操作。 缺点:适用面较HQL有限,不推荐。

sql查询

static List sql() {

Session s = HibernateUtil.getSession();
Query q = s.createSQLQuery("select * from user").addEntity(User.class);
List<User> rs = q.list();
s.close();
return rs;
}

适用情况:不熟悉HQL的朋友,又不打算转数据库平台的朋友,万能方法 缺点:破坏跨平台,不易维护,不面向对象。
命名查询

static List namedQuery(int id) {
Session s = HibernateUtil.getSession();
Query q = s.getNamedQuery("getUserById");
q.setInteger("id", id);
return q.list();
}

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class name="com.sy.vo.User" table="user" catalog="news">

</class>
<!-- 命名查询:定义查询条件 -->
<query name="getUserById">
<![CDATA[from User where id=:id]]>
</query>
<!-- 命名查询中使用sql,不推荐使用,影响跨数据库
<sql-query name="getUserById2">
<![CDATA[select * from User where ]]>
</sql-query> -->
</hibernate-mapping>

适用情况:万能方法,有点像ibatis轻量级框架的操作,方便维护。 缺点:不面向对象。基于hql和sql,有一定缺陷。

⑽ 请问我用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();