`

Hibernate query 学习笔记

阅读更多
Hibernate学习笔记
HQL 注意事项:
1.请把以前sql中的表名换成类名,把字段名换成属性名。注意我不是说HQL里的类名都是表名。类名>表名
2.这里就看一个select 类的例子,一便说明一下多态
person是man和woman的父类吧,在HQL中可以这样写:
from Person p
这就表示查出所有人了。
3.当然sql中的select from where group by having order by这些,HQL也是支持的了。
4.取一条记录query.uniqueResult()
5.取多个记录query.list()
6.分页。在执行查询之前
query.setFirstResult(0)
query.setMaxResult(2)
注意在这里的0是开始下标。2是从开始下标的一页的记录数
7.绑定参数
?---------------------query.setString(1)
:name---------------query.setString(name,"jiaxiao")
:entity---------------query.setEntity(entity,jnew Person())
8.内连接
from Company c inner join c.employees e;
相当于select c.*,e.* from company c, c.employees e where c.id=e.compid(+)
返回的是一个object[]
还可以级联
from A a left join a.b b leftc join b.c c
隐式查询:
from Province p where p.City.name="guanyuan";
此外还有子查询,组函数等
from Company c where 1< ( select count(*) from c.employees e);
投影查询:
select new 包名.类名(e.name,c.name) from company c left join c.employee e
这个类为一个普通的POJO只有 e.name,c.name两个属性
集合过滤
select c from Company c left join Employee e
sess.createFilter(c.getEmployee(),"where e.name='xx'");

条件查询
Java代码 
1. //条件查询,参数索引值从0开始,索引位置。通过setString,setParameter设置参数      
2.         String hql = "from Users where name=? and passwd=?";      
3.         Query query = session.createQuery(hql);      
4.         //第1种方式      
5. //      query.setString(0, "name1");      
6. //      query.setString(1, "password1");      
7.         //第2种方式      
8.         query.setParameter(0, "name1",Hibernate.STRING);      
9.         query.setParameter(1, "password1",Hibernate.STRING);      
10.         List<Users> list = query.list();      
11.         for(Users users : list){      
12.             System.out.println(users.getId());      
13.         }     
         
Java代码 
1. //条件查询,自定义索引名(参数名):username,:password.通过setString,setParameter设置参数      
2.         String hql = "from Users where name=:username and passwd=:password";      
3.         Query query = session.createQuery(hql);      
4.         //第1种方式      
5. //      query.setString("username", "name1");      
6. //      query.setString("password", "password1");      
7.         //第2种方式,第3个参数确定类型      
8.         query.setParameter("username", "name1",Hibernate.STRING);      
9.         query.setParameter("password", "password1",Hibernate.STRING);      
10.         List<Users> list = query.list();      
11.         for(Users users : list){      
12.             System.out.println(users.getId());      
13.         }    



Java代码 
1. //条件查询,通过setProperties设置参数      
2.         String hql = "from Users where name=:username and passwd=:password";      
3.         Query query = session.createQuery(hql);      
4.         //MyUser类的2个属性必须和:username和:password对应      
5.         MyUser myUser = new MyUser("name1","password1");      
6.         query.setProperties(myUser);      
7.         List<Users> list = query.list();      
8.         for(Users users : list){      
9.             System.out.println(users.getId());      
10.         }    

  Code

Hibernate中持久化类的对象可以划分为三种状态,分别是瞬态,持久态,脱管态。

1.       瞬态(Transient),也叫临时态。处于这种状态的对象具备的特征如下:
a)         不在Session的缓存中,不与任何的Session实例相关联。
b)        在数据库中没有与之相对应的记录。
2.       持久态(Persistent),处于这种状态的对象具备的特征如下:
a)         在Session的缓存中,与Session实例相关联。
b)        在数据库中存在与之相对应的记录。
3.       脱管态(Detached),也叫游离态。处于这种状态的对象具备的特征如下:
a)         不在Session的缓存中,不与任何的Session实例相关联。
b)        在数据库中存在与之相对应的记录。(前提条件是没有其他Session实例删除该条记录)。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics