- 浏览: 148590 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
flyingcatjj:
很适合我这种刚接触的
myeclipse xfire 开发webservice实例 -
tangzlboy:
非常好,非常详细,非常中用。
linux入门 -
yzz9i:
楼主说的很是详细。
myeclipse xfire 开发webservice实例 -
zqx888191:
很再理阿!
老程序员的教诲 -
simplecat123:
...
SQLite数据读取
一对一对象的懒加载,对于主的一方,lazy是无效的,它在访问数据的时候,还是会利用左连接,把主从表的数据 全部查询一遍 但是对于从对象,默认的是懒加载 lazy=true 如果你需要从对象的数据,如果你通过子实体和id直接去查询 从实体 get()方法 它只查询从对象的数据,并不会去查询主对象的数据 一对多 懒加载 重点 缺省的是懒加载的 比说说部门与员工 ,一个部门可能有几千员工 比说我我们增加一个部门 同时增加几名员工 我们查询部门的信息 package vo.util.test; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import org.hibernate.Session; import org.hibernate.Transaction; import vo.util.HibernateUtil; import vo.util.bean.Department; import vo.util.bean.Employee; public class OneToMany { /** * @param args */ public static void main(String[] args) { add(); query(1); } static Department add(){ Session session = null; Transaction tx = null; try{ session =HibernateUtil.getSession(); tx = session.beginTransaction(); //…你的代码save,delete,update,get… Department dpart=new Department(); dpart.setName("政企事业部"); Employee em1=new Employee(); em1.setName("员工李小仙"); em1.setDerpartment(dpart); Employee em2=new Employee(); em2.setName("员工张小三"); em2.setDerpartment(dpart); Map<String,Employee> ems=new HashMap<String, Employee>(); ems.put(em1.getName(), em1); ems.put(em2.getName(), em2); dpart.setEms(ems); session.save(dpart); session.save(em1); session.save(em2); tx.commit(); return dpart; }finally{ if(session != null)session.close(); } } static Department query(int id){ Session session=null; try{ session=HibernateUtil.getSession(); //这里只是调用部门的实体类进行查询 Department d=(Department)session.get(Department.class, id); //System.out.println(d.getEms()); return d; }finally{ if(session != null)session.close(); } } } 控制台输出 log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment). log4j:WARN Please initialize the log4j system properly. 打开连接成功!Hibernate: insert into Department (name) values (?) Hibernate: insert into Employee (name, depaer_id) values (?, ?) Hibernate: insert into Employee (name, depaer_id) values (?, ?) Hibernate: update Employee set depaer_id=?, name=? where id=? Hibernate: update Employee set depaer_id=?, name=? where id=? Hibernate: select department0_.id as id0_0_, department0_.name as name0_0_ from Department department0_ where department0_.id=? 发现 只是查询了部门的信息 并没有去查询员工的信息 说明默认的情况下 一对多 一的一方是懒加载的 然后我们看部门的映射文件 <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="vo.util.bean"> <class name="Department"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <!-- 配置一对多的映射关系 --> <!-- <set name="ems"> --> <!-- 关联关系的外键 --> <!-- <key column="depaer_id"/> --> <!-- 关联关系的实体类配置 --> <!-- <one-to-many class="Employee" /> </set> --> <map name="ems"> <key column="depaer_id"/> <map-key type="string" column="name"/> <one-to-many class="Employee"/> </map> </class> </hibernate-mapping> 部门这边的set节点我们没有去配置 当我们去通过部门去访问员工信息的时候 才会去select 给查询的方法加上 System.out.println(d.getEms()); 就会去查询员工信息 了 log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment). log4j:WARN Please initialize the log4j system properly. 打开连接成功!Hibernate: insert into Department (name) values (?) Hibernate: insert into Employee (name, depaer_id) values (?, ?) Hibernate: insert into Employee (name, depaer_id) values (?, ?) Hibernate: update Employee set depaer_id=?, name=? where id=? Hibernate: update Employee set depaer_id=?, name=? where id=? Hibernate: select department0_.id as id0_0_, department0_.name as name0_0_ from Department department0_ where department0_.id=? Hibernate: select ems0_.depaer_id as depaer3_1_, ems0_.id as id1_, ems0_.name as name1_, ems0_.id as id1_0_, ems0_.name as name1_0_, ems0_.depaer_id as depaer3_1_0_ from Employee ems0_ where ems0_.depaer_id=? {} 总结 通过asm和cglib二个包实现;Domain是非final的。 1.session.load懒加载。 2.one-to-one(元素)懒加载: 必需同时满足下面三个条件时才能实现懒加载 (主表不能有constrained=true,所以主表没有懒加载) lazy!=false 2)constrained=true 3)fetch=select 3.one-to-many (元素)懒加载:1)lazy!=false 2)fetch=select 4.many-to-one (元素) :1)lazy!=false 2)fetch=select 5.many-to-many (元素) :1)lazy!=false 2)fetch=select 6.能够懒加载的对象都是被改写过的代理对象,当相关联的session没有关闭时, 访问这些懒加载对象(代理对象)的属性(getId和getClass除外)hibernate会初始化这些代理, 或用Hibernate.initialize(proxy)来初始化代理对象;当相关联的session关闭后,再访问懒加载的对象将出现异常。
发表评论
-
二十六 Hibernate实践
2011-07-04 19:18 723不适合OLAP以查询分析数据为主的系统。适合OLTP联机事务处 ... -
二十五 SQL和命名查询
2011-07-04 19:17 1035SQL和命名查询 SQL查询 //根据sql语句查询 s ... -
二十四 拦截器与监听器
2011-07-04 19:14 948在保存 更新等操作的前 ... -
二十三 iterate查询与N+1次查询的问题
2011-07-04 19:13 774test.java view plaincopy to ... -
二十二 Hibernate映射文件配置
2011-07-04 19:12 877id 主键生成方式 incremen ... -
二十一 串讲Hibernate配置文件中的配置项
2011-07-04 19:11 864数据源配置 ## JNDI Datasource ... -
二十 悲观锁和乐观锁
2011-07-04 19:10 716为了避免对对象同步操作时候产生的数据不一致问题,我们对对象采用 ... -
十九 hibernate3之缓存
2011-07-04 19:09 905什么是缓存?现在我们来看一个模拟的缓存操作 模拟一个缓存例子 ... -
十七 懒加载
2011-07-04 17:58 728十七 懒加载 什么是hibe ... -
十六 继承映射
2011-07-04 17:56 485第一种 一个员工类它有两个子类,利用hibernate我们把 ... -
十五 cascade 级联操作与inverse表是否放弃维护关联关系
2011-07-04 17:54 851cascade 级联操作字段 Casade用来说明当对主对 ... -
十四 在hibernate中使用集合总结
2011-07-04 17:52 876集合映射(set, list, array,bag, map) ... -
十三 array数组形式的映射
2011-07-04 17:51 832数组其实跟List的集合映射没有多大的差别,当然它不可以使用b ... -
十二 集合映射之Map集合
2011-07-04 17:49 795十二 Map集合映射 Map是以键值对的形式存放数据的 ... -
十一 集合映射 List集合
2011-07-04 17:47 1025十一 集合映射 set的 ... -
十 组件关联
2011-07-04 17:45 695组件关联 什么是组件关联呢?比如说一个用户,它的名称,有一 ... -
九 多对多关系 学生<--->老师的关系
2011-07-04 17:44 1228九 多对多关系 学生<--->老师的关系 多对多 ... -
八 一对一 用户与身份证的关系
2011-07-04 17:42 862八 一对一 用户与身份证的关系 设计用户实体 主实体 ... -
七 一对多关系 部门与员工的关系
2011-07-04 17:41 1128一对多 部门与员工的关系 相对于部门来说 一对多 根据先前 ... -
六 员工与部门——》多对以关系
2011-07-04 17:37 1025关联关系 多对一关系 员工与部门的关系 从员工角度 是 ...
相关推荐
#### 一、懒加载技术概述 懒加载(Lazy Loading)是一种按需加载策略,在程序设计中广泛应用于减少内存占用和提高系统性能。在Java开发中,尤其针对数据库操作频繁的应用场景,如Hibernate ORM框架等,通过延迟对象...
- 在一对多关联中,如果配置了懒加载,那么在加载父对象(如部门)时,不会立即加载所有子对象(如员工)。只有当试图遍历或访问子对象时,Hibernate才会执行SQL语句获取子对象数据。 4. **注意事项** - 懒加载...
动态加载(也称为懒加载)是一种优化性能的技术,只在用户需要时才加载数据,而不是一次性加载所有数据,这对于处理大量数据或层级结构尤其有用,可以显著提升页面加载速度和用户体验。 本项目在官方Bootstrap ...
4. **示例应用**:在实际的MyBatis配置中,你可以这样设置一个懒加载的一对一关联: ```xml <!-- 其他字段映射 --> ``` 然后在Mapper接口中,你可以声明一个返回父对象的方法,父对象中包含一个`Child`...
关联映射通常用于一对一的关系,例如一个用户有一个地址。在MyBatis的XML配置文件中,我们可以使用`<association>`标签来定义这种关系。当设置`fetchType="lazy"`时,表示关联的对象将在首次访问时才加载。例如: ...
2. 对需要懒加载的图片,设置一个默认的占位图(如grey.gif),同时设置`data-src`属性来存储真实图片的URL,而非`src`属性。 3. 使用jQuery选择这些图片,并应用`lazyload`方法,例如:`$("img.lazy").lazyload();`...
本话题主要探讨的是Hibernate中的一对一关联映射,这是一种将数据库中的单个表映射到Java对象模型中单个类的关系映射技术。通过注解方式实现一对一关联映射,可以避免传统的XML配置文件,使得代码更加简洁、易读。 ...
以上是对"知识共享-Android之ListView滑动加载、软缓存、懒加载"这一主题的详细解释,希望对你理解Android开发中的这些重要概念有所帮助。在实际开发中,熟练掌握这些技巧能够显著提升应用的性能和用户体验。
在Objective-C中,懒加载是一种优化技术,它推迟了对某些资源或对象的初始化,直到它们真正被使用时才进行。这种策略可以避免在应用启动时不必要的内存消耗,尤其对于大型或者复杂对象,这种优化尤为关键。懒加载...
懒加载(LazyLoad)是一种优化网页性能的技术,它允许我们延迟加载非关键资源,比如图片、视频或 iframe,直到它们即将进入用户可视区域时才进行加载。这种策略可以显著减少页面初始化时的数据量,提高页面的加载...
在Hibernate中,懒加载主要体现在一对多、多对一、多对多等关联关系上。当我们在实体类中使用`@OneToMany`、`@ManyToOne`或`@ManyToMany`注解,并设置`fetch = FetchType.LAZY`时,就会启用懒加载。然而,懒加载的...
以上代码首先创建了`Person`和`Passport`对象,然后设置它们的关联关系,最后通过`entityManager`持久化`Person`对象,Hibernate会自动处理一对一关联的保存。 五、查询和关联加载 在查询时,我们可以使用`...
此外,由于懒加载通常依赖于代理对象,因此必须确保在事务范围内访问这些关系,否则可能会遇到“懒加载异常”。 五、注意事项 1. 懒加载可能导致N+1查询问题,即在获取父实体后,每次遍历子实体都会触发一次额外的...
2. **懒加载的工作机制**:MyBatis通过代理对象实现延迟加载。当我们尝试访问延迟加载的属性时,代理对象会检查该属性是否已经被加载,如果没有,则执行SQL查询并返回结果。 3. **注意事项**:延迟加载只有在会话...
图片懒加载是一种优化网页性能的技术,它通过延迟加载非视口内的图片,直到用户滚动到它们将要出现在屏幕上的位置时才开始加载。这样可以减少页面初始加载时的数据量,提高页面加载速度,改善用户体验。在JavaScript...
在一对一关联中,如果希望关联对象在需要时才加载,可以设置`fetch="lazy"`;否则,关联对象会在主对象加载时一同加载,这称为即时加载。 8. **生命周期管理**: Hibernate提供了对对象状态的管理,包括瞬时态、持久...
jQuery图片懒加载是一种优化网页性能的技术,它允许网页在用户滚动到可视区域时才加载图片,而不是一次性加载所有图片。这种技术尤其适用于大型图片或页面内容丰富的网站,能显著提高页面加载速度,节省用户流量,...
默认情况下,一对一关联是懒加载的,意味着关联的对象不会在初始加载时被加载,而是等到真正需要时才从数据库中获取。如果希望关联对象与主对象一起加载,可以设置`fetch = FetchType.EAGER`。 6. ** orphanRemoval...
在Android开发中,"douBanList(滚动到底部加载新的,软缓存,懒加载)"这个项目可能是一个实现豆瓣图书列表展示的应用示例,它涵盖了几个关键的技术点:无限滚动加载、软缓存策略以及懒加载机制。下面将详细讲解这三...
懒加载是一种优化页面加载速度的方法,它的核心思想是延迟页面中非首屏内容的加载,直到用户需要查看这些内容时再进行加载。这样做的好处是减少了初始页面加载的资源量,加快了页面的响应速度,从而提高了用户体验。...