hibernate常用API详解
?
?
?
?结果:一句SQL将所有结果查询出来
?
如果修改一下for循环的代码,查询FK的name:
?
?
?结果:一句SQL查询Member表,每一次for循环又发一句SQL查询Userinfo表
总结:被查询表中如果有外键关联,在执行查询时能将外键关联字段的值查询出来,但如果想查询关联表的其它字段会另外发SQL,这个特别要注意!
?
?
?结果:一句SQL将所有结果查询出来
?
如果修改一下for循环的代码,查询FK的name,结果与前面使用HQL查询一样:一句SQL查询Member表,随后每一次for循环又发一句SQL查询Userinfo表
?
1-3Hibernate条件查询(Criteria)
?
?其实上面这种方式就是发了一句SQL:SELECT * FROM member
?
?
?
2-2使用SQL
?
?
?
2-3使用Criteria
?
?
?
?
?
?
?通过query.setParameter(int,Obejct)方法即可给每个?赋值,注意第一个参数是从下标0开始!
?
?
?
?上面例子关键代码是Query调用setParameter(String,Object)和setParameterList两个方法,前者是赋单一值,后者是赋多个值(特别适合in查询赋值)。这两种赋值方法都需要传两参数:第一个参数是key值,对应HQL语句中的“:xxx”;第二个参数是value值,就对应key的实际值。这种传值比3-1-1更准确方便:一来不用担心下标错位的问题,二来如果存在”xx,xx,xx”这种格式的参数可以使用setParameterList方法,屡试不爽!
?
3-2-1使用SQL“WHERE 字段=?”的形式给参数赋值
?猜想上面这段代码会发几句SQL?根据控制台调试发现总共发了两句SQL:一句是SELECT语句查询Member表,另一句是UPDATE语句更新Member表字段,最终查询数据库时发现logincode和password的值都变成了上面设置的值。?上面这段代码与3-1-2的代码极其相似,但是有以下几点区别:①使用SQLQuery的形式查询;②SQL语句m.login_code和m.delete_flag与前面的HQL里面不对应,前面说了HQL里面对应的是POJO(也就是Member类)的属性,而SQL语句是直接对应数据库的字段名!
?
?
?Criteria对象通过add方法添加查询条件,Restrictions提供了各种各样的查询条件API:like、in、eq、between、or等等。这里要注意一点:像Restrictions.like(key,value)这些方法的key就是POJO中的属性,而不是数据库中的字段!
?
?
?
?上面这段代码有几个功能点:
Member member = (Member) getSession().get(Member.class, id);member.setLoginCode("akaka");member.setPassword("654321");
这是一种非常好使的UPDATE方法,不用写SQL语句,直接先get后set即可自动发送SQL。
?
以上介绍的是非常通用的Hibernate API,当然Hibernate还提供了很多其它优秀的功能,比如缓存、复杂映射等等,这些技术需要大家在学会通用API之后再深入了解。
1 楼 yanshien 2011-12-28 总结的不错,受益 2 楼 白糖_ 2011-12-28 yanshien 写道总结的不错,受益
总结地不详细,欢迎指正、补充,共同提高