Hibernate 多表联查

shaoxj8809 贡献于2014-01-06

作者 微软用户  创建于2008-08-30 14:08:00   修改者微软用户  修改于2008-08-30 14:11:00字数3746

文档摘要:要给WEB短信群发系统加一个根据时间统计短信发送条数的功能。以前的系统持久层用的Hibernate。对Hibernate也不是很熟悉。分析后一看要多表联查,郁闷!没有玩过Hibernate的多表联查。上网查了一下,通过试验完成任务。
关键词:

要给WEB短信群发系统加一个根据时间统计短信发送条数的功能。以前的系统持久层用的Hibernate。对Hibernate也不是很熟悉。分析后一看要多表联查,郁闷!没有玩过Hibernate的多表联查。上网查了一下,通过试验完成任务。趁热总结一下: 如果我有两个表一个User,一个MtLog。关系是User<1-----------*->MtLog。 Hibernate 3.2.5 middlegen 1.3.3 mysql 5.0.17 在数据库中建好表之后用middlegen 自动生成***.hbm.xml文件,有两种方法其中一种是不建立两个表的关系联合查询,另外一种是建立两个表的关系联合查询。首先是不建立两个表的关系联合查询: User.hbm.xml文件 Java代码 1.    2.    5.    6.    7.        13.    14.        16.    17.            18.    19.                20.            21. ......   22.    24. ......   25.    26.    ...... ...... MtLog.hbm.xml文件 Java代码 1.    2.    5.    6.    7.        13.    14.        16.    17.            18.    19.                20.            21.    22.    24.    25.        26.    对应的bean文件就不贴了。有三个bean,User.java、MtLog.java、StatMtLog.java HibernateTest.java Java代码 1. public class HibernateTest   2. {   3.    public static void mian(String [] args)   4.    {   5.     .....   6.     ScrollableResults srs = session   7.                     .createQuery(   8.                         "select u.fullname ,sum(ml.count) from User u , MtLog ml where ml.userId = u.id and ml.mtTime > :minRecordTime and ml.mtTime < :maxRecordTime GROUP BY ml.userId")   9.                     .setString("minRecordTime", minRecordTime + "%").setString("maxRecordTime", maxRecordTime + "%")   10.                     .scroll();   11. List totalList = new ArrayList() ;   12.         while(srs.next())   13.         {   14.             totalList.add(new StatMtLog(srs.getString(0),srs.getInteger(1)));    15.             }   16. ....   17.    18.     }   19.    20.    21. }   public class HibernateTest { public static void mian(String [] args) { ..... ScrollableResults srs = session .createQuery( "select u.fullname ,sum(ml.count) from User u , MtLog ml where ml.userId = u.id and ml.mtTime > :minRecordTime and ml.mtTime < :maxRecordTime GROUP BY ml.userId") .setString("minRecordTime", minRecordTime + "%").setString("maxRecordTime", maxRecordTime + "%") .scroll(); List totalList = new ArrayList() ; while(srs.next()) { totalList.add(new StatMtLog(srs.getString(0),srs.getInteger(1))); } .... } } 下面是建立关系后两表联查的做法 User.hbm.xml Java代码 1.    2.    5.    6.    7.        13.    14.        16.    17.            18.    19.                20.            21. ......   22.    24. ......   25. /* user-1--*->mtlog:一对多的关系 */   26.    27.        28.                29.        30.       31.    32.        33.    ...... ...... /* user-1--*->mtlog:一对多的关系 */ MtLog.hbm.xml Java代码 ...... /* mtlog-*--1->user:多对一的关系 */ ...... /* mtlog-*--1->user:多对一的关系 */ 这样建立关联关系后,要修改一下查询语句 select u.fullname ,sum(u.mtLogs.count) from User u GROUP BY u.fullname 注意红色部分。

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 2 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档