Hibernate的四种查询操作实现

一、主键查询的两种方法:

User u=(User)session.get(User.class,1);

User u=(User)session.load(User.class,1);支持懒加载

源码如下所示:

package com.bie.test;

 

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;

import org.junit.Test;

 

import com.bie.po.User;

 

public class SelectTest {

 

    //全局静态session工厂

    private static SessionFactory sf;

    static{

        //1:创建sesson工厂

        sf=new Configuration().configure().buildSessionFactory();

    }

 

    @Test

    public void select(){

        User user=new User();

 

        //2:根据session工厂创建session

        Session session=sf.openSession();

        //3:开启事务

        Transaction tx=session.beginTransaction();

        //4:主键查询,执行查询操作,方法一:get方法,方法2:load方法

        //User u=(User)session.get(User.class, 1);

        User u=(User)session.load(User.class, 1);

 

        //主键查询测试结果

        System.out.println(u);

        //5:提交事务

        tx.commit();

        //6:关闭事务和session

        session.close();

        sf.close();

    }

}

二、HQL查询,特别注意的是查询语句必须是实体类的方法名,不能是表名称,必须和sql语句查询区别:

1.sql查询是表以及字段,不区分大小写,也叫做结构化的查询语句;

2.HQL查询是Hibernate提供的面向对象的查询语句,查询的是对象以及对象的属性,区分大小写的。

源码如下所示:

package com.bie.test;

 

import java.util.List;

 

import org.hibernate.Query;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;

import org.junit.Test;

 

import com.bie.po.User;

 

public class SelectTest2 {

 

    //全局静态session工厂

    private static SessionFactory sf;

    static{

        //1:创建sesson工厂

        sf=new Configuration().configure().buildSessionFactory();

    }

 

    @Test

    public void select(){

        User user=new User();

 

        //2:根据session工厂创建session

        Session session=sf.openSession();

        //3:开启事务

        Transaction tx=session.beginTransaction();

 

        //HRL查询,查询全部信息,注意HRL查询的是实体类的名称,不是数据表的名称,特别注意这一点

        //Query q=session.createQuery("from User");

        Query q=session.createQuery("from User user where user.id=1 or user.id=2 ");

 

        List<User> list=q.list();

        System.out.println(list);

 

        //5:提交事务

        tx.commit();

        //6:关闭事务和session

        session.close();

        sf.close();

 

    }

 

}

三、完全面向对象的查询,Criteria查询也叫做QBC查询,query  by criteria,核心代码:

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

criteria.add(Restrictions.eq(“id”,1));

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

System.out.println(list);

源码如下所示:

package com.bie.test;

 

import java.util.List;

 

import org.hibernate.Criteria;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;

import org.hibernate.criterion.Restrictions;

import org.junit.Test;

 

import com.bie.po.User;

 

public class SelectTest3 {

 

    //全局静态session工厂

    private static SessionFactory sf;

    static{

        //1:创建sesson工厂

        sf=new Configuration().configure().buildSessionFactory();

    }

 

    @Test

    public void select(){

        User user=new User();

 

        //2:根据session工厂创建session

        Session session=sf.openSession();

        //3:开启事务

        Transaction tx=session.beginTransaction();

 

        //Criteria查询也叫做 QBC查询   query by criteria

        //完全的面向对象的查询

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

        //添加条件

        criteria.add(Restrictions.eq("id", 1));

 

        //查询全部,没有sql语句

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

 

        System.out.println(list);

 

        //5:提交事务

        tx.commit();

        //6:关闭事务和session

        session.close();

        sf.close();

 

    }

 

}

四、本地查询sql语句,适合使用复杂的查询,或者不想使用HQL或者criteria查询,可以使用本地sql查询,缺点,不能跨越数据库,一般不适用,除非遇到复杂的sql语句才使用:

核心代码:

//sql语句

//SQLQuery sql = session.createSQLQuery(“select*from user”);

SQLQuery sql = session.createSQLQuery(“select*from user where id = 1”);

sql.addEntity(User.class);

List<User>list = sql.list();

System.out.println(list);源码如下所示:

package com.bie.test;

 

import java.util.List;

 

import org.hibernate.SQLQuery;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;

import org.junit.Test;

 

import com.bie.po.User;

 

public class SelectTest4 {

 

    //全局静态session工厂

    private static SessionFactory sf;

    static{

        //1:创建sesson工厂

        sf=new Configuration().configure().buildSessionFactory();

    }

 

    @Test

    public void select(){

        User user=new User();

 

        //2:根据session工厂创建session

        Session session=sf.openSession();

        //3:开启事务

        Transaction tx=session.beginTransaction();

 

        //sql语句

        //把每一行记录封装为对象数组,再添加到list集合中

        //SQLQuery sql= session.createSQLQuery("select * from user ");

        //把每一行记录封装为指定的对象类型

        SQLQuery sql=session.createSQLQuery("select * from user where id=1 ").addEntity(User.class);

        List<User> list=sql.list();

        System.out.println(list);

 

        //5:提交事务

        tx.commit();

        //6:关闭事务和session

        session.close();

        sf.close();

 

    }

 

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值