hibernate常用API详解++HQL++SQL
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
)hibernate常用API详解
分类:Hibernate2013-05-25 18:55 1251人阅读评论(0) 收藏举报转自:/blog/1327883
hibernate常用API详解
以下示例均以两张表为例:member和userinfo,member帐号信息表外键关联userinfo用户基本信息表,主键自动生成即可
然后映射出的POJO如下:
public class Userinfo implements Serializable{
// primary key
private ng.Integer id;
// fields
private ng.String name;
private ng.String code;
private ng.String birthday;
private ng.String address;
private java.util.Date createTime;
private ng.Integer deleteFlag;
// collections
private java.util.Set
//省略 getter setter
}
public class Member implements Serializable{
// primary key
private ng.Integer id;
// fields
private ng.String loginCode;
private ng.String password;
private ng.Integer deleteFlag;
// many to one
private erinfo fkUserinfo;
//省略getter setter
}
1、Hibernate提供多种方法查询数据库数据
下面以一个最简单的查询为例:SELECT * FROM TABLE为例
1-1简单HQL语句查询
Hibernate提供了HQL查询,HQL是Hibernate推荐语句,它屏蔽了不同数据库SQL不兼容的问题,使用HQL写的查询语句在主流数据库上都能执行。
执行HQL需要创建Query对象:getSession().createQuery(hql语句);
简单HQL格式:FROM POJO 对应SQL语句:SELECT * FROM POJO对应的表名
千万注意:HQL语句中的表名和字段名不是数据库的表名和字段名,而是对应ORM映射POJO的类名和属性名!
Java代码
1. Query query = baseDao.getQuery("FROM Member");
2. List
3. for (Member member : lstM) {
4. System.out.println("id:"+member.getId()+" fk_id:"+member.getFkUserinfo().getId
());
5. }
结果:一句SQL将所有结果查询出来
如果修改一下for循环的代码,查询FK的name:
Java代码
1. for (Member member : lstM) {
2. System.out.println("id:"+member.getId()+" fk_id:"+member.getFkUserinfo().getN
ame());
3. }
结果:一句SQL查询Member表,每一次for循环又发一句SQL查询Userinfo表
总结:被查询表中如果有外键关联,在执行查询时能将外键关联字段的值查询出来,但如果想查询关联表的其它字段会另外发SQL,这个特别要注意!
1-2简单SQL语句查询
Hibernate同样支持写SQL,对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口
Java代码
1. SQLQuery sql = baseDao.getSQLQuery("SELECT * FROM member");
2. //查询出的结果放到指定POJO中
3. sql.addEntity(Member.class);
4. List
5. for (Member member : lstM) {
6. System.out.println("id:"+member.getId()+" fk_id:"+member.getFkUserinfo().ge
tId());
7. }
结果:一句SQL将所有结果查询出来
如果修改一下for循环的代码,查询FK的name,结果与前面使用HQL查询一样:一句SQL查询Member表,随后每一次for循环又发一句SQL查询Userinfo表
1-3Hibernate条件查询(Criteria)
HQL极为强大,但是有些人希望能够动态的使用一种面向对象API创建查询,而非在他们的Java代码中嵌入字符串。对于那部分人来说,Hibernate提供了直观的Criteria查询API。