hibernate常用API详解++HQL++SQL

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 members;

//省略 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 lstM = query.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 lstM = sql.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。

相关文档
最新文档