hibernate两表级联查询语句

本文介绍了一个使用Hibernate进行数据库查询的具体例子,展示了如何从两个关联表中提取数据并封装为JavaBean对象,最后在JSP页面上展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.两个表: 
person 
1 id 
2 name(人名) 
3 roomid 

room 
1 roomid 
2 room(房间号) 

说明:一个room有多个person,通过roomid取出name和room封装到list 

二.两个类: 
person类 

private int id; 
private String name; 
private int roomid; 

public Person() 




public Person(int id,String name,int roomid) 

     this.id=id; 
     this.name=name; 
     this.roomid=roomid; 


public int getId() 

     return this.id; 


public void setId(int id) 

     this.id = id; 


public String getName() 

     return this.name; 


public void setName(String name) 

     this.name = name; 


public int getRoomid() 

     return roomid; 


public void setRoomid(int roomid) 

     this.roomid = roomid; 



room类 

private int roomid; 
private String room; 

public Room() 




public Room(int roomid,String room) 

this.roomid=roomid; 
this.room = room; 
}

public String getRoom() 

return this.room; 


public void setRoom(String room) 

this.room = room; 


public int getRoomid() 

return roomid; 


public void setRoomid(int roomid) 

this.roomid = roomid; 




三.Person.hbm.xml和Room.hbm.xml正常配置,此处就不写了. 



四.Hibernate语句 

String queryString="select p.name , r.room from Person p , Room r 
where p.roomId = r.roomId"; 

return getHibernateTemplate().find(queryString); 

此处返回一个list 

五.获取list的值 

设返回值是list 
写一个JavaBean: 
NrUtil 
private String name; 
private String room; 

List<NrUtil> nrUtilList; 

取list中的数据放入JavaBean中 

Iterator it=list.iterator(); 
while(it.hasNext()) 

     Object[] ob=(Object[])it.next(); 
     String name=(String)ob[0]; 
     String room=(String)ob[1]; 
     NrUtil nr=new NrUtil(name,room); 
     nrUtilList.add(nr); 


六.在JSP页面显示 
利用<s:iterator>显示 

这是我在网上找到的一篇,感觉不错,摘了下来。
以下是我在项目中所写:

/* +++++++++++查找新闻,用根据新闻所属系部查找已经通过验证的新闻++++++++++++++ */
@SuppressWarnings("unchecked")
public List<News> findNewsBydepartId(BigDecimal departId, int currentPage,
int lineSize) {
// TODO Auto-generated method stub
System.out.println("************test************"+departId);
String hql = "FROM News AS n WHERE n.department.departId = ? AND n.newsIsvalidate = 1 order by n.newsId desc";
Query q = this.getSession().createQuery(hql);
q.setBigDecimal(0, departId);
q.setFirstResult((currentPage - 1) * lineSize);
q.setMaxResults(lineSize);
List list = q.list();
return list;
}

/* ++++++++++++++++++得到查询的系部新闻的总数++++++++++++++++++++++++++ */
@SuppressWarnings("unchecked")
public int getBydepartIdCount(BigDecimal departId) {
System.out.println("************testcount************"+departId);
session = this.getSession();
Number num = null;
String hql = "SELECT COUNT(*) from News AS n WHERE n.newsIsvalidate = 1 AND n.department.departId = ? ";
Query q = this.session.createQuery(hql);
q.setBigDecimal(0, departId);
List all = q.list();
if (all.size() > 0) {
num = (Number) all.get(0);
System.out.println("查询的系部新闻的总数" + num);
}
return num.intValue();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值