Hibernate学习笔记 -- day10 OID、对象导航查询、原生SQL
来源:互联网 发布:java嵌入完整html 编辑:程序博客网 时间:2024/06/05 06:47
一、OID查询
1、什么是OID查询
所谓实体查询即OID查询,就是使用主键作为条件来查询一个实体。其中涉及的方法是Session对象get方法和load方法。
2、get方法:
/** * 根据id查询一个实体 * @param entityType 指的是要查询的实体类字节码对象 * @param id 查询的条件,即主键的值。 * @return 返回的是实体类对象 */<T> T get(Class<T> entityType, Serializable id);
3、load方法:
/** * 根据id查询一个实体 * @param theClass 指的是要查询的实体类字节码 * @param id查询的条件,即主键的值。 * @return 返回的是实体类对象或者是实体类对象的代理对象 */<T> T load(Class<T> theClass, Serializable id);
4、get 和 load 方法的区别
(1)、查询时机不一样
get方法任何时候都是立即加载,即只要一调用get马上发起数据库查询
load方法默认情况下是延迟加载,即真正用到对象的非OID字段数据才发起查询
load方法可以通过配置的方式改为立即加载
由于load方法是hibernate的方法所以只有XML的方式:<class name="Customer" table="cst_customer" lazy="false">
(2)、返回的结果不一样
get方法永远返回查询的实体类对象。
load方法当是延迟加载时,返回的是实体类的代理对象。
(3)、代码演示
/** * 根据id查询一个实体 * * 涉及的方法: * get(Class clazz,Serailizable id); * load(Class clazz,Serailizable id); * 区别: * 1、加载的时机不一样 * get方法永远是立即加载。 * load方法默认是延迟加载。 * 立即加载:不管用不用,只要一调用方法,马上发起查询。 * 延迟加载:什么时候用,什么时候再发起查询。也叫懒加载(惰性加载) * load方法可以通过配置的方式改为立即加载。 * 2、返回的结果不一样 * get返回的实体类对象 * load返回的是实体类对象的代理对象,当我们真正要获取数据时,它会对我们的方法进行增强,去查询。 * */public class HibernateDemo1 {/** * get */@Testpublic void test1(){Session s = HibernateUtil.getCurrentSession();Transaction tx = s.beginTransaction();Customer c = s.get(Customer.class, 1L);//就立即发起查询,不管用不用System.out.println(c.getCustId());System.out.println(c.toString());tx.commit();}/** * load */@Testpublic void test2(){Session s = HibernateUtil.getCurrentSession();Transaction tx = s.beginTransaction();Customer c = s.load(Customer.class, 1L);//不会马上发起查询,什么时候用什么时候发起查询System.out.println(c.getCustId());System.out.println(c.toString());tx.commit();}}
5、涉及的概念
类级别检索策略。检索策略也称为抓取策略。其实就是查询策略。
简单的说就是我们查询一个实体时,发起查询的时机在什么时候。
立即加载:是不管用不用马上查询。
延迟加载:等到用的时候才真正发起查询。
二、对象导航图查询
1、什么是对象导航图查询
使用的都是实体类中的方法。
2、明确:
对象导航查询需要思想的转变。
3、要求:
两个实体必须具有关联关系,没有关联关系的不能用。
4、含义:
实体:
get关联对象的实体
例如:
customer.getLinkMans()
linkman.getCustomer()
5、演示案例
/**在使用ORM持久层框架思想没有转变之前: * 查询我的联系人 * 根据客户ID查询联系人信息 */@Testpublic void test2(){Session s = HibernateUtil.getCurrentSession();Transaction tx = s.beginTransaction();SQLQuery sqlquery = s.createSQLQuery("select * from cst_linkman where lkm_cust_id = ? ");sqlquery.setLong(0, 1L);sqlquery.addEntity(LinkMan.class);//把查询结果封装到联系人的实体类中List list = sqlquery.list();for(Object o : list){System.out.println(o);}tx.commit();}/**在使用ORM持久层框架思想没有转变之后: * 明确:任何一个实体,它都会有findById的方法。 */@Testpublic void test1(){Session s = HibernateUtil.getCurrentSession();Transaction tx = s.beginTransaction();Customer c = s.get(Customer.class,1L);System.out.println(c);System.out.println(c.getLinkmans());tx.commit();}/** * 对象导航查询 */@Testpublic void test3(){Session s = HibernateUtil.getCurrentSession();Transaction tx = s.beginTransaction();LinkMan l = s.get(LinkMan.class,1L);System.out.println(l);System.out.println(l.getCustomer());tx.commit();}
三、原生SQL语句查询
1、什么是SQL查询
使用原始的SQL语句来查询
2、涉及的对象:
第一种方式:session的doWork方法可以使用Connection
第二种方式:SQLQuery对象。它的获取方式是session.createSQLQuery(String sql);
在hibernate中用的不多。
3、案例演示
@Testpublic void test2(){Session s = HibernateUtil.getCurrentSession();Transaction tx = s.beginTransaction();SQLQuery sqlquery = s.createSQLQuery("select * from cst_linkman where lkm_cust_id = ? ");sqlquery.setLong(0, 1L);sqlquery.addEntity(LinkMan.class);//把查询结果封装到联系人的实体类中List list = sqlquery.list();for(Object o : list){System.out.println(o);}tx.commit();}
阅读全文
0 0
- Hibernate学习笔记 -- day10 OID、对象导航查询、原生SQL
- Hibernate的OID和对象导航查询
- Hibernate OID、导航图、HQL、SQL、QBC查询方式示例
- 【Hibernate学习笔记】对象标识符(OID)
- Hibernate的学习之路二十八(唯一OID和对象导航的查询的方式)
- hibernate_day04_02_对象导航查询和oid查询
- Hibernate原生SQL查询
- hibernate 原生sql查询
- Hibernate原生SQL查询
- Hibernate原生SQL查询
- Hibernate原生SQL查询
- Hibernate原生SQL查询
- Hibernate原生SQL查询
- Hibernate原生SQL查询
- 对象导航查询和OID查询(补)
- hibernate--原生SQL查询无法返回对象集合
- Hibernate的原生SQL查询
- hibernate 原生sql 命名查询
- flex布局:常用属性及文字图片对齐试验
- SpringMVC + Mybatis模式 MapperScannerConfigurer 自动扫描Mapper接口
- 软键盘回车设置为搜索+点击后收回
- 面向对象地分析Linux内核设备驱动(2)——Linux内核设备模型与总线
- Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(三)
- Hibernate学习笔记 -- day10 OID、对象导航查询、原生SQL
- SQL语句中的同构与异构
- 西游日记0728
- 闲暇时光-拉黑世界,做回自己
- SpringBoot(五) :spring data jpa 的使用
- Android线程池
- GRPC python编译.proto
- JAVA正则表达式:Pattern类与Matcher类详解(转)
- 表格中插入单张图片