问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

使用hibernate如何查询返回一个对象呢 如果数据库有很多对象又怎么查询能返回一个list

发布网友 发布时间:2022-05-01 02:39

我来回答

3个回答

懂视网 时间:2022-05-01 07:01

com.hfview.bean; import java.util.ArrayList; import java.util.List; public class PersonEx { private String id; private String name; private String birthday; private String area; private List<Menu> menu = new ArrayList<Menu>(); public PersonEx(){ } public PersonEx(String name, String area) { super(); this.name = name; this.area = area; } public PersonEx(String id, String name, String birthday) { super(); this.id = id; this.name = name; this.birthday = birthday; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday; } public List<Menu> getMenu() { return menu; } public void setMenu(List<Menu> menu) { this.menu = menu; } public String getArea() { return area; } public void setArea(String area) { this.area = area; } }

实体Person1

package com.hfview.bean;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Table(name = "t_person",schema="zhw")
@Entity
public class Person1 {

 private String id;
 private String name;
 private String sex;
 private Card card;

 @Id
 @Column(name="ID")
 public String getId() {
 return id;
 }

 public void setId(String id) {
 this.id = id;
 }

 @Column(name="NAME")
 public String getName() {
 return name;
 }

 public void setName(String name) {
 this.name = name;
 }

 @Column(name="SEX",columnDefinition="varchar2(8)")
 public String getSex() {
 return sex;
 }

 public void setSex(String sex) {
 this.sex = sex;
 }

 @OneToOne
 @JoinColumn(name="CARDID")
 public Card getCard() {
 return card;
 }

 public void setCard(Card card) {
 this.card = card;
 }


}

实体Card

package com.hfview.bean;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Table(name = "t_card",schema="zhw")
@Entity
public class Card {

 private String id;
 private String cardId;
 private String area;

 @Id
 @Column(name="ID")
 public String getId() {
 return id;
 }

 public void setId(String id) {
 this.id = id;
 }

 @Column(name="CARDID")
 public String getCardId() {
 return cardId;
 }

 public void setCardId(String cardId) {
 this.cardId = cardId;
 }

 @Column(name="AREA")
 public String getArea() {
 return area;
 }

 public void setArea(String area) {
 this.area = area;
 }

}

Person1和card是一对一关系,PersonEx是这两个扩展对象

public List<PersonEx> getListPersonEx1(){
 String hql=" select new com.hfview.bean.PersonEx(a.name,b.area) from Person1 a left join a.card b ";
 return getHt().find(hql);
 }

这样就动态的取到了PersonEx的集合。
这里需要注意几点
1、PersonEx里面一定要有对应的构造方法,并且sql里面参数顺序和构造器里面的顺序一致
2、PersonEx可以是没有映射关系的,也可以是实体

原生SQL

类 Person2

package com.hfview.bean;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Table(name = "t_person", schema = "zhw")
@Entity
public class Person2 {
 private String id;
 private int age;
 private Date birthday;
 private List<Menu> menu = new ArrayList<Menu>();

 @Id
 @Column(name="ID")
 public String getId() {
 return id;
 }

 public void setId(String id) {
 this.id = id;
 }

 @Column(name="AGE")
 public int getAge() {
 return age;
 }

 public void setAge(int age) {
 this.age = age;
 }

 @Column(name="BIRTHDAY")
 public Date getBirthday() {
 return birthday;
 }

 public void setBirthday(Date birthday) {
 this.birthday = birthday;
 }

 @OneToMany
 @JoinColumn(name="PERSONID")
 public List<Menu> getMenu() {
 return menu;
 }

 public void setMenu(List<Menu> menu) {
 this.menu = menu;
 }


}

Dao层方法

public List<PersonEx> getListPersonEx2(){
 String sql="select a.id as "id",a.name as "name",to_char(a.birthday,‘yyyy-mm-dd‘) as "birthday" " +
  "from t_person a ";
 return getForListBean(sql, PersonEx.class);
 }

getForListBean方法

public <T> List<T> getForListBean(final String sql,final Map<String,Object> paras,final int page,final int rows,final Class<T> clazz){
 return ht.executeFind(new HibernateCallback<List<HashMap<String,Object>>>() {

  public List<HashMap<String, Object>> doInHibernate(
   Session session) throws HibernateException, SQLException {
  SQLQuery query = session.createSQLQuery(sql);

  if(paras!=null){
   for (String key :paras.keySet()) {
   query.setParameter(key, paras.get(key));
   }
  }
  if(page!=0&&rows!=0){
   int start = page*rows-rows+1;
   query.setFirstResult(start).setMaxResults(rows);
  }

  query.setResultTransformer(Transformers.aliasToBean(clazz));
  return query.list();
  }
 });
 }

这里需要注意的几点
1、构造函数一定要和sql里面的对应
2、oracle中默认把字段都转成大写,这样set方法就会出错,所以要转变成 as “aa” 这种
3、对于PersonEx如果有集合,怎么动态的设置进去,目前我还没找到方法

Hibernate的HQL和原生SQL返回简单对象

标签:

热心网友 时间:2022-05-01 04:09

1、你使用Hibernate的get和load方法可以查询出单个对象。
2、使用HQL语言或者说query语言来查询,你可以通过像以下例子得到一个list:
Query query = session.createQuery("from People as p order by p.username asc");
List<People> list = (List<People>)query.list(); //这里真正执行了查询动作 query.list()返回一个list容器
注意:HQL也可以查询单个对象,根据你的SQL语句来决定。

热心网友 时间:2022-05-01 05:27

你自己封装返回类型啊。追问不是用query的方法直接就能返回一个对象了吗

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
酸醋萝卜怎么做又脆又好吃 账簿启用及交接表填写的步骤 账簿启用及交接表怎样填写 说的是精神分裂症,吃了二年多的药,分别是利培酮片,苯海索片,补脑_百度... 精神分裂症急性期适当的治疗方法 快递三斤荔枝的话要多少钱? 求高手指点一个plc编程问题,计算时间差,还有时间比较后,输出执行... 你好高手 我现在买了个松下fp0的PLC我想写一个步进程序,请问能否... 【plc执行程序步骤】 plc执行程序时 若有一步不能满足条件而执行不了... 电脑屏幕的壁纸怎么更换? 王者荣耀冷却缩减上限是多少 冷却缩减上限介绍 王者荣耀里吕布打蓝霸服有什么用 王者荣耀百分之四十cd上限包括符文吗? 油地板怎么防滑 自然油地板用的是什么油? 王者荣耀蓝BUFF的作用 王者荣耀buff怪的出生时间是开局后多少秒 王者荣耀减CD上限为多少 怎么才能达到CD上限 王者荣耀里红buff和蓝buff是干嘛的?打什么能有红buff和蓝buff? 王者荣耀冷却缩减上限是多少? 《王者荣耀》冷却缩减上限是多少 王者荣耀红蓝buff有没有减CD 为什么网银和支付宝都会被盗,什么原因会被盗的呢?怎么预防被盗? 支付宝账户被盗 支付宝莫名其妙被盗了,怎么被盗的呢? 支付宝申请了疑似被盗是什么意思 qq号是买的现在王者荣耀要人脸认证怎么办 QQ王者荣耀实名认证身份证和号码都是对的为什么上面显示帐号和实名认证不一样 我在市区,我能去哪里买到正宗的东西山的枇杷?? 冬枇杷哪里买的比较好? 油地板的油漆那种比较好,不那么大味道 王者荣耀蓝buff多少 什么是街舞? BREAKING篇 福尔波亚麻油地板多少钱一平米,工人工费多少钱 BREAKING基本要点是什么? 植物油地板怎么去污 街舞BREAKING基础怎么入门 用洗衣粉可以洗工业油地板有毒吗 用什么擦油腻地板最干净 没有开通网银的工行卡 可以作为支付宝绑定吗? 静电吸尘油地板家用可以吗? 街舞Breaking高手进阶 必备基础 亚麻油地板的介绍 全抛油地板怎样能拖干净 装修地板不知道装抛光地板好:还是装抛光油地板好选那一种好 具体解释下街舞中的Breaking 早教机构的亚麻籽油地板用什么蜡保养? 练街舞,breaking有什么基本功要练?? 由于国家机关和国家工作人员侵犯公民权利而受到损失的人有依依照法律规定的什么权利? 地暖可以铺亚麻油地板吗