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. }

//条件查询,参数索引值从0开始,索引位置。通过setString,setParameter设置参数
String hql = "from Users where name=? and passwd=?";
Query query = session.createQuery(hql);
//第1种方式
// query.setString(0, "name1");
// query.setString(1, "password1");
//第2种方式
query.setParameter(0, "name1",Hibernate.STRING);
query.setParameter(1, "password1",Hibernate.STRING);
List<Users> list = query.list();
for(Users users : list){
System.out.println(users.getId());
}


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. }

//条件查询,自定义索引名(参数名):username,:password.通过setString,setParameter设置参数
String hql = "from Users where name=:username and passwd=:password";
Query query = session.createQuery(hql);
//第1种方式
// query.setString("username", "name1");
// query.setString("password", "password1");
//第2种方式,第3个参数确定类型
query.setParameter("username", "name1",Hibernate.STRING);
query.setParameter("password", "password1",Hibernate.STRING);
List<Users> list = query.list();
for(Users users : list){
System.out.println(users.getId());
}



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
List list=session.createQuery(“select new User(user.name,user.age) from User user ”).list();
for(int i=0;i
User user=(User)list.get(i);
user.setName(“gam”);
session.saveOrUpdate(user);//



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



1. 瞬态(Transient),也叫临时态。处于这种状态的对象具备的特征如下:

a) 不在Session的缓存中,不与任何的Session实例相关联。

b) 在数据库中没有与之相对应的记录。

2. 持久态(Persistent),处于这种状态的对象具备的特征如下:

a) 在Session的缓存中,与Session实例相关联。

b) 在数据库中存在与之相对应的记录。

3. 脱管态(Detached),也叫游离态。处于这种状态的对象具备的特征如下:

a) 不在Session的缓存中,不与任何的Session实例相关联。

b) 在数据库中存在与之相对应的记录。(前提条件是没有其他Session实例删除该条记录)。


[img]http://dl.iteye.com/upload/attachment/415178/52cc4791-0dbc-3df4-8c8d-9c78699b32b6.gif[/img]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值