Hibernate学习总结二

四.Hibernate中对象的状态之间的转换

    有三种状态:                                                                                                                                                                                          1.瞬时状态:对象刚被创建,没有与Session 关联。                                                                                                                              2.持久化状态:与Session建立关联,对象放入Session缓存中                                                                                                              3.游离状态:已经被持久化,但不再处于Session的缓存中

    hibernate中对象三种状态之间的转换 

六.Hibernate中的对数据库的复杂操作

    1.批量查询

        (1)HQL查询(hibernate query language)

            步骤:1书写HQL语句——>根据HQL语句创建查询对象——>根据查询对象获取查询结果                                                   

//书写HQL语言(条件查询)
String hql="from 对象的完整类名 where 对象中的属性名=属性值";//相当于select *
//书写HQL语言(非条件查询)
String hql="select * from 对象的完整类名;//这里不是写表名,而是写数据库表所对应的对象的完整类名,这里的where 后面的条件名只能是对象中的属性名,不能是数据库的列名

//根据HQL语句创建查询对象
Query query=session.createQuery(hql);

//根据查询对象获取查询结果(查询出来结果为多个)
List list=query.list();//返回list结果
//根据查询对象获取查询结果(查询出来的结果只有一个或为空)
Customer c=(Customer)query.uniqueResult();

      另一种方式(通过使用占位符):         

//书写HQL语言(第一种占位符 “?” )
String hql="select * from 对象的完整类名 where 对象中的属性名=?";//这里?是占位位符
//书写HQL语言(第二种占位符 “:变量名” )
String hql="select * from 对象的完整类名 where 对象中的属性名=:cust_id";//变量名(可以随便起)

//根据HQL语句创建查询对象
Query query=session.createQuery(hql);

//设置参数,也是设置上面 “ ?” 的值
query.setParameter(0,1l);//这里的0代表第一个问号,1l:该问号代表的值
//设置参数,也是设置上面 " :变量名 " 的值
query.setParameter(“cust_id”,1l);//这里的“abc”和上面的abc对应,1l为占位符代表的值

//根据查询对象获取查询结果
List list=query.list();//返回list结果

     设置分页信息


//书写HQL语言(非条件查询)
String hql="select * from 

//根据HQL语句创建查询对象
Query query=session.createQuery(hql);

//设置分页
query.setFirstResult(1);//表示从记录的第几条开始
query.setMaxResult(3);//表示最大偏移量

//根据查询对象获取查询结果(查询出来多个对象)
List list=query.list();//返回list结果

  (2)Criteria查询(无语句面向对象查询)

     1.基本查询 

    这里是查询出所有Customer对象

//创建criteria查询对象
Criteria criteria=session.createCriteria(Customer.class);//查询所有的Cusotmer对象,参数为实 
                                                            体类对象

//获取到查询到的对象的集合                                                            
List<Customer> list=criteria.list();//获取到查询到的对象的集合

    2.条件查询

     这里举出查询cust_id为1的Customer对象

Criteria criteria=session.createCriteria(Customer.class);

/*添加查询条件,参数为Restrictions类中的方法
表示         方法名
>          : gt
>=         :ge
<          : lt
<=         : le
==         : eq
!=         : ne
in         : in
like       : be
is not null: isNotNull
is null    : isNull
or         : or
and        : and
*/
between and
criteria.add(Restrictions.eq("cust_id",1l));

Customer c=criteria.uniqueResult();

3分页查询

//创建criteria查询对象
Criteria criteria=session.createCriteria(Custoemr.class);

criteria.setFirstResult(1);//表示从记录的第几条开始
criteria.setMaxResults(3);//表示最大偏移量

List<Customer> list=criteria.list();

(3)原生sql查询   

  步骤:1书写sql语句——》创建sql查询对象——》获取查询对象   

1.基本查询(注:需要将结果集绑定到所对应的类对象中)

//书写sql语句
String sql="select * from cst_customer";

//创建sql查询对象
SQLQuery query=session.createSQLQuery(sql);

//指定将结果集封装到所对应的类对象中(为了下面获取结果任然为Cusotmer)
query.addEntity(Customer.class);

//获取查询结果对象
List<Customer> list=query.list();//结果为多个
Customer customer=(Customer)query.uniqueResult();//查询结果为一个或为空

   2.条件查询 

//书写sql语句(这里使用占位符)
String sql="select * from cst_customer where cust_id=?";

//创建sql查询对象
SQLQuery query=session.createSQLQuery(sql);

//设置占位符的值
query.setParameter(0,1l);//0代表索引,1l代表值

//指定将结果集封装到所对应的类对象中(为了下面获取结果任然为Cusotmer)
query.addEntity(Customer.class);

//获取查询结果对象
List<Customer> list=query.list();//结果为多个
Customer customer=(Customer)query.uniqueResult();//查询结果为一个或为空

    3.分页查询

//书写sql语句(使用占位符)
String sql="select * from cst_customer limit ?,?";

//创建sql查询对象
SQLQuery query=session.createSQLQuery(sql);

//设置占位符的值
query.setParameter(0,0);//0代表问号的索引,0代表第一条位置
query.setParameter(1,1);//1代表问号的索引,1代表偏移量

//指定将结果集封装到所对应的类对象中(为了下面获取结果任然为Cusotmer)
query.addEntity(Customer.class);

//获取查询结果对象
List<Customer> list=query.list();//结果为多个
Customer customer=(Customer)query.uniqueResult();//查询结果为一个或为空

 

                                                                                                                                  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值