Hibernate
pfpfpfpfpf
这个作者很懒,什么都没留下…
展开
-
传智播客Hibernate视频教程学习笔记56
Hibernate最佳实践 不适合OLAP以查询分析数据为主的系统。适合OLTP联机事务处理系统 不适合关系模型设计不合理的老系统 不适合数据量巨大,性能要求苛刻的系统。 最好使用小对象来封装一个类,大的对象应该有很多小的对象。 使用无意义的自然建作为主键 每个类对应一个映射文件 把查询串放在程序外面 使用命名变量做原创 2009-08-08 21:54:00 · 492 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记40
Hibernate二级缓存的分析与配置:Hibernate采用第三方缓存控制,我们使用oscache来演示首先需要加入oscache2.1.jar这个库文件,在Hibernate3.3.2中lib文件夹下的optional文件夹内。 另外需要加入oscache的配置文件,在Hibernate3.3.2/porject/etc下找到oscache.proprities文件,黏贴到工程s原创 2009-08-07 09:09:00 · 859 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记39
Hibernate中的缓存分析:我们更改HibernateUtil工具类中的get方法public static Object get(Class clazz, Serializable id){ Session s = null; try{ s = HibernateUtil.getSession(); Object obj = (Object)s.get(c原创 2009-08-07 08:46:00 · 531 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记38
缓存原理分析及模拟:希望在前后两次访问同一条记录的时候,不要每次都访问数据库,那么就采用缓存机制,第二次访问同一个对象的时候就从缓存里取而不从数据库中读,下面是一个简单的模拟。public static Users getUser(int id){ String key = Users.class.getName() + id; Users user = (Users)cach原创 2009-08-07 08:41:00 · 467 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记31
鉴别器和内连接结合使用内容和上两篇没有什么大的区别Employee.hbm.xml<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping原创 2009-08-06 14:30:00 · 451 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记29
继承关系:整个继承树映射到一张表Employee两个子类Skiller和Sales代表技术人员和销售人员首先来设计pojoSkiller.javapackage domain;public class Skiller extends Employee { private String skill; public void setSkill(String原创 2009-08-06 13:38:00 · 434 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记28
上次提过的inverse,在list等有序的容器里面,是不能使用的,很简单,都放弃多关系的维护了,还会在乎元素的顺序么。 还有一点,在多的一端,不允许放弃对关系的维护。 多对多关系的维护,双方处于平等地位,那么谁来维护都是可以的,注意多对多关系的维护是在中间表插入一条新的记录,如果双方都维护,那么就不是重复update语句的问题了,就会产生插入异常。 视频上又说,Hibe原创 2009-08-06 13:26:00 · 505 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记46
事务中的悲观锁和乐观锁 为了避免对对象同步操作时候产生的数据不一致问题,我们对对象采用加锁机制 悲观锁:从读取的时候开始加锁,直到修改完成。 缺点:读取完以后,用户修改过程缓慢,造成同步性降低。 乐观锁:给每条记录添加版本号,用来区别。两人同时编辑时候,假设获取的版本号都为1,编辑完提交的时候,版本号为2,第一个提交完以后,数据库版本号为2,第二个提交的时候对比版本原创 2009-08-08 12:04:00 · 494 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记24
关联关系总结:到这里基本的关联关系都差不多了,总体下来的感觉,还是有几个疑惑的首先,做这种关联的查询,和以前我写的代码不一样,以前设计pojo的时候都只设计一个id值,要查关联表信息的时候再去查询,这样频繁的读取数据库的确不好,但是举个例子,比如我是学生,那么通过选课信息表我可以查到我所有的选课内容,教师信息,那么教师信息有可以关联查到教师所属学院的信息,学院由可以通过关联查到所属学校的原创 2009-08-04 21:49:00 · 702 阅读 · 1 评论 -
传智播客Hibernate视频教程学习笔记23
组件关联关系的映射:类似于一对一关系,但是两个对象的属性保存在一张表中,比如:People.javapackage domain;public class People { private int id; private Name name; public int getId() { return id; } public void setId原创 2009-08-04 21:27:00 · 517 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记35 36 37
一对多和多对多懒加载原理其实和一对一从对象的懒加载原理大同小异,没什么大区别 one-to-one1.lazy!=false2.constrained=true3.fetch=select one-to-many1.lazy!=false2.fetch=select many-to-one1.lazy!=false2.fetch=select原创 2009-08-06 16:34:00 · 371 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记41
二级缓存细节扩充 二级缓存是SessionFactory级共享 save(不适合native生成方式的主键) update saveOrUpdate list iterator get load Query Criteria都会填充二级缓存。但之查询缓存时Session的iterator get load会从二级缓存中去数据(iterator可能存在N——1次查询) Qu原创 2009-08-07 10:14:00 · 462 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记42
分布式缓存的探讨与研究 大型的系统往往是一台数据库,多台web服务器,那么如何协调好多台web服务器上的缓存同步就会存在很大的问题。比如u1 u2 两个用户分别访问w1 w2 两台服务器,同时读取了user对象信息,那么两台服务器上的数据就会分别保存在w1 w2的缓存上,如果u1更新了user的信息,那么w2的缓存依然还是没更新前的数据,u2读到的数据不是正确的数据。这种分布式缓原创 2009-08-07 10:33:00 · 519 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记43
事务相关知识 JDBCTransaction单个数据库(一个SessionFactory对应一个数据库),由JDBC实现。最常用的事务 JTATransaction分布式事务,垮数据库,比如说银行转账,就需要这种跨数据库的事务来操作。 事务边界:即事务开启,提交,关闭这些代码的位置。 mvc三层架构的思想上,事务边界的处理应该放在业务逻辑层中,但是Tra原创 2009-08-07 17:50:00 · 419 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记54
拦截器与监听器 在保存 更新等操作的前后可以追加一些操作,我们把这类操作放在时间的监听器里,Hibernate3.0以前使用拦截器来实现的,现在多数使用监听器来实现。 比如我们对保存Users进行监听 SaveListener.javapackage listener;import org.hibernate.HibernateException;impor原创 2009-08-08 20:58:00 · 493 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记53
iterate查询与N+1次查询的问题 test.javaimport hibernate.HibernateUtil;import java.util.Date;import java.util.Iterator;import org.hibernate.Query;import org.hibernate.Session;import domain.原创 2009-08-08 19:42:00 · 467 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记52
hql与criteria查询方式补充 查询多个对象select art,user from Article art,User user where art.author.id = user.id and art.id = :id这种方式返回的是Object[],Objectp[0]:article,Object[1]:user。 查询的时候尽量使用get方法,因为get方法会从缓存原创 2009-08-08 18:57:00 · 492 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记51
session内部缓存管理与批量更新 session.flush()方法强迫一级缓存和数据库进行同步,如果主键生成方式不是native这类数据库生成的,那么Hibernate的sql语句在事务提交或者查询操作之前操作,将与数据库的通信延后,不要频繁的进行操作。如果调用了flush方法,那么就立即进行与数据库的通信。 那么在处理大批量数据插入的时候,会产生内存溢出的情况,因为数据库原创 2009-08-08 13:59:00 · 402 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记48
串讲Hibernate映射文件配置 class标签中 hibernate-mapping标签中 id标签中 generator子标签increment Hibernate内部自己做累加,而不是数据库中做累加。indentity 数据库标示符自增长squence Oracle常用hilo 高低位 数据库保存高位字段,Hibernate原创 2009-08-08 12:47:00 · 783 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记47
串讲Hibernate配置文件中的配置项 数据源配置 ## JNDI Datasource#hibernate.connection.datasource jdbc/test#hibernate.connection.username db2#hibernate.connection.password db2 Hibernate连接池连接数hibernate.conne原创 2009-08-08 12:24:00 · 469 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记44 45
OpenSessionInView模式分析 把session的范围扩大到整个请求的范围内,这样在一方面很好的解决了懒加载session关闭的问题,另一方面一次请求变成了一个事务,那么用户做的更新操作对数据库来说都是一条sql语句了。 但是放大了session范围,如果网速比较慢,那么session就会一直打开,一级缓存的数据得不到释放,还有事务本应当在业务逻辑层开启关闭的,也原创 2009-08-07 20:31:00 · 461 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记55
sql查询与命名查询 sql查询static List sql(){ Session s = HibernateUtil.getSession(); Query q = s.createSQLQuery("select * from Users").addEntity(Users.class); List rs = q.list(); for(U原创 2009-08-08 21:36:00 · 401 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记50
Session与SessionFactory多线程安全问题 Session是非线程安全的,生命周期较短,代表一个和数据库的链接,在bs系统内一般不会超过一个请求,内部维护以及缓存和数据库连接,如果session长时间打开会长时间占用内存和数据库的链接。 SessionFactory是线程安全的,一个数据库对应一个SessionFactory,生命周期长一般在整个系统生命周期内有效原创 2009-08-08 13:51:00 · 517 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记49
Hibernate映射类型 如果只需要日期而不需要时间,可以在配置文件设置type="date"那么数据库中就只有日期了。 所以说Hibernate也有自己的一套类型映射,一般情况下不需要配置,直接和java类型匹配就可以了,有时候java只有一个数据类型,而数据库中有很多数据类型,比如Date和数据库中的date time datetime都可以映射,这个时候需要我们来设置。原创 2009-08-08 13:31:00 · 425 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记34
一对一的懒加载分析:test.java还是使用先前那个Person和IdCard的一对一例子例子import hibernate.HibernateUtil;import java.util.Date;import org.hibernate.Hibernate;import org.hibernate.Session;import domain.IdCa原创 2009-08-06 15:35:00 · 538 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记33
load方法的懒加载原理:来看test.javaimport hibernate.HibernateUtil;import java.util.Date;import org.hibernate.Session;import domain.Users;public class test { /** * @param args *原创 2009-08-06 15:21:00 · 510 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记20
基于外键的一对一关系映射IdCard.hbm.xml<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">原创 2009-08-03 18:41:00 · 488 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记19
test.javaimport java.util.Date;import domain.IdCard;import domain.Person;import hibernate.HibernateUtil;public class test { /** * @param args */ public static void main(原创 2009-08-03 17:03:00 · 387 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记15
多对一关系的检索: 在做查询的时候,Hibernate也会自动的填充Employee中的Department类型属性,部分测试代码如下: test.javaimport java.util.Date;import java.util.List;import org.hibernate.Criteria;import org.hibernate.Quer原创 2009-08-03 15:12:00 · 614 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记10 11 12 13
先贴CRUD实验的代码吧 文件结构图 User.javapackage domain;import java.util.Date;public class User { private int id; private String name; private Date birthday; public int getId() {原创 2009-08-03 10:23:00 · 624 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记9
Criteria查询方式:static void query(String name){ Session s = null; try{ s = HibernateUtil.getSession(); Criteria c = s.createCriteria(Users.class); c.add(Restrictions.eq("name", na原创 2009-08-03 10:00:00 · 424 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记4
根据主键从数据库里取数据:static Users get(int id){ Session s = null; try{ s = HibernateUtil.getSession(); Users user = (Users)s.get(Users.class, id); return user; }finally{ if(s != nul原创 2009-08-02 15:54:00 · 606 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记3
Hibernate加载配置过程比较耗时,所以在程序里初始化配置过程只出现一次即可,设计HibernateUtil工具类 HibernateUtil工具类package hibernate;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Trans原创 2009-08-02 15:43:00 · 480 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记18
一对一关系映射Person.javapackage domain;public class Person { private int id; private String name; private IdCard idCard; public int getId() { return id; } public void setId(int id原创 2009-08-03 16:19:00 · 542 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记14
在关系数据库中,多对一关系一般利用外键表示,例如部门与员工关系,在员工表中设置外键,比如部门编号来建立关联约束,在Hibernate的处理方法中,采用在Employee类中添加Department成员变量来建立关联,这样可以直接搜索上去而不用再根据id访问一次数据库。 Department.javapackage domain;public class Departme原创 2009-08-03 14:59:00 · 615 阅读 · 2 评论 -
传智播客Hibernate视频教程学习笔记5
实体对象的三种状态:瞬时 持久 脱管瞬时:新建user对象时,此时数据库里没有记录,user会被垃圾回收机制回收。持久:事务提交前,此时数据库里有记录,而且user变化会和数据库记录变化同步。脱管:事务提交后,session关闭,此时数据库已有记录,但是user和数据库断开连接,user变化不会影响数据库记录。 这就关系到什么时候调用更新了,在脱管的时候,没办法同步数原创 2009-08-02 16:07:00 · 679 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记1
好不容易找到Eclipse下的Hibernate视频教程,很多都是myeclipse插件自动添加的教程,因为老师说myeclipse开发的代码在linux下可能会有一些小的兼容问题,所以一直使用的是Eclipse,开源,免费,多好。 教程用的是Hibernate3.2.5 我用的是3.3.2,数据库是sql server2005,略有不同,但是影响不大。 添加jar时原创 2009-08-02 15:16:00 · 958 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记8
hql命名参数:static void query(String name){ Session s = null; try{ s = HibernateUtil.getSession(); String hql = "from Users as users where users.name = :name"; Query query = s.crea原创 2009-08-03 09:48:00 · 453 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记16
在上一篇中,如果epy.setDpt(dpt);这行代码注释掉,即不设置对象关系中部门与员工的关系,Hibernate插入数据时还是会插入两条记录,不过员工的部门编号为null,一般来说外键都是有非空约束的,在映射文件中做如下修改:Employee.hbm.xml<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hib原创 2009-08-03 15:37:00 · 472 阅读 · 0 评论 -
传智播客Hibernate视频教程学习笔记30
一个继承树映射到一张表的话,会有很多空字段,不符合关系数据库的设计模式。 每个类映射到一张表: 这时候Employee.hbm.xml配置文件信息如下:<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hib原创 2009-08-06 14:09:00 · 474 阅读 · 0 评论