hibernate笔记1】的更多相关文章

标题:框架Hibernate笔记 资料地址: 1. www.icoolxue.com 孔浩 1.背景简介 Hibenate是JBoss公司的产品.它是数据持久化的框架.Usually,我们使用JDBC来access DB,我们要先连接数据库,然后与数据库交互,然后关闭连接.使用了Hibernate之后,它实现了对JDBC的封装.跟数据库建立连接和关闭连接都由Hibernate来管理,我们只要写交互代码就可以了. 使用Hibernate,甚至不需要写SQL语句,它会自动帮你生成表 生成SQL语句,…
cascade : 不管是单向多对一还是一对多,或者是双向的一对多关系,在一的一端映射文件中有一个set标签,在多的一端有many-to-one标签,拿前几篇笔记里讲的Grade和Student举例,此标签下都有一个cascade属性: Grade.hbm.xml中: <set name="students" cascade="save-update"> <key column="gradeId" ></key>…
在hibernate中进行多表查询,每个表中各取几个字段,也就是说查询出来的结果集并没有一个实体类与之对应,如何解决这个问题? 解决方案一,按照Object[]数据取出数据,然后自己组bean 解决方案二,对每个表的bean写构造函数,比如表一要查出field1,field2两个字段,那么有一个构造函数就是Bean(type1 filed1,type2 field2) ,然后在hql里面就可以直接生成这个bean了.具体怎么用请看相关文档. 本笔记继续使用dept部门表,emp员工表,一对多.多…
背景 jdbc的优缺点 A:直接操作底层,提供了简单,便捷的访问数据库方法,跨平台比较强,灵活,可以写很多赋值的SQL语句:是最底层的数据库操作,所以效率比较高,Sql语句可以自己选择写,采用效率最高的 B:因为Java是面向对象的,JDBC没有做到使数据能够面向对象的编程,使程序员的思考仍然停留在SQL语句上面,操作繁琐,  很多代码需要重复写好多次,如果遇到批量操作,繁琐与数据库的交互,容易造成效率的下降  代码结构比较繁琐,面向纯sql语句的编程,面向过程的编程,对于查询而言,只要查询数据…
二级缓存(sessionFactory): Hibernate的二级缓存由SessionFactory对象管理,是应用级别的缓存.它可以缓存整个应用的持久化对象,所以又称为“SessionFactory缓存”. hibernate二级缓存中的缓存对象可以被整个应用的Session对象共享,即使关闭当前Session对象,新建的Session对象仍可使用.使用Hibernate的二级缓存之后查询数据,Session对象会首先在以及缓存中查找有无缓存数据被命中.如果没有,则查找二级缓存.如果有,则直…
一级缓存: 又称为session缓存,它和session生命周期相同,周期非常短.是事务级别的缓存: 还是以Book和Category这两个表为例,我们用代码观察一个缓存的存在: 假设现在我要去查询id=1的Book信息: List<Book> list =(List) session.createQuery("from Book").list(); System.).getName()); Book book = (Book)session.); System.out.p…
前面几篇都是介绍的用配置文件来实现实体类到数据库表的映射,这种方式是比较麻烦的,每一个pojo类都需要写一个相应的*.hbm.xml,无疑增加了很多代码量,不过也有优点就是利于维护,为了方便开发,Hibernate还提供了注解方式配置映射文件,非常灵活,减少了配置文件的冗余,虽然维护起来相对比较麻烦,但是的确很方便开发.现在开发中(据说)也越来越流行使用注解,这里贴一个使用注解开发的小例子. 假设有两张表,一张书籍表Book,一张书籍分类表Category,很明显Book和Category是多对…
单表继承映射(一张表): 假设我们现在有三个类,关系如下: Person类有两个子类Student和Teacher,并且子类都具有自己独有的属性.这种实体关系在hibernate中可以使用单表的继承映射来建表,最后生成的表是这样的: 可以看到我们只需要建立一张表就可以维护这个关系,这种方式就是单表继承映射,下面介绍配置方法: 新建实体类Person ,Student,和Teacher : public class Person { private int id; private String n…
在讲单向的多对多的映射关系的案例时,我们假设我们有两张表,一张角色表Role,一张权限表Function,我们知道一个角色或者说一个用户,可能有多个操作权限,而一种操作权限同时被多个用户所拥有,假如我们我们的需求是能通过角色获取到其所拥有的操作权限,这就构成了单项的多对多的映射关系,为了管理这个关系,已经不能再通过添加外键列,必须在建立一张关系表,专门负责角色和权限之间的关系映射,如下: 这里假设有两个用户一个是管理员admin,一个是普通用户user,管理员拥有全部四个权限,而普通用户只拥有用…
上一节介绍的基于外键的一对一映射关系中,在Person表中有一个外键列idCard_id,对应的idCard表的主键id,至于基于主键的一对一映射关系,就是指Person表中抛弃了idcard_id这个外键列,而与idCard表共用一个主键,或者说是其外键为主键的表结构,这种基于主键的双向一对一映射关系应该这样配置: 新建一个IdCard实体类: public class IdCard { private int id; private String code; private Person p…
假设我们有两张表,人员信息表Person,和身份信息表IdCard,我们知道每个人只有一个身份证号,所以这里的Person和IdCard表是一一对应的,也就是一对一的映射关系,基于外键的单向一对一映射关系,只需要在单向多对一的映射关系的多的一端的配置文件的<many-to-one>标签中添加一个unique="true",这里介绍双向一对一映射关系的配置方法: 新建一个Person实体类: public class Person { private int id; priv…
前两节写了两个例子,分别是单向多对一的映射和单向一对多的映射,这一节继续以这个例子讲一下双向一对多的映射方法,如下图所示: 很多时候,我们既想从一对端获取多对端的信息,又想从多对端获取一对端的数据,这就是需要双向一对多的映射关系,这也是最常见的表与表的映射关系,在hibernate中应当这样配置: 新建Studnet实体类: public class Student { private int id; private String name; private String sex; privat…
上一篇讲的是单向多对一的表关系,与单向一对多的关系正好相反,如下图所示关系: ,可以看出年级表和学生表是一对多的关系,一条年级信息对应多条学生信息,在hibernate中成为单向的一对多的映射关系,应该这些操作: 新建Student实体类: public class Student { private int id; private String name; private String sex; //get/set方法省略 } 新建Grade实体类: public class Grade {…
假设我们要建两张表,学生信息表(student)和年级信息表(grade),关系是这样的: 我们可以看出学生表和=年级表是多对一的关系,多个学生会隶属于一个班级,这种关系在hibernate中成为单边的多对一的关系,需要这样配置: 新建实体类Grade: public class Grade { private int id; private String name; private String teacher; //get/set方法省略 } 新建实体类Student: public cla…
假设我们需要保存学生student的信息,student中有一个address属性,我们知道像这种信息其值可能会有多个,就像一个人会有两个以上的手机号,这种情况在hibernate中应该这样配置: 新建一个Address类,我们假设每个学生最多能保存3个地址: public class Address { private String addr1; private String addr2; private String addr3; //get/set方法省略 } 新建student实体类:…
一个数据库表中其主键有可能不止一个属性,同样映射到实体类中,可能有两个或多个属性共同配置成为一个主键,假设一个实体类Score,其主键有两个属性stuId(学生编号)和subjectId(科目编号),在hibernate环境下应该这样配置: 新建一个实体类ScoreId,属性为stuId,和subjectId,该类需要实现serializable接口(最好重写equals方法和hashcode方法): public class ScoreId implements Serializable {…
方法比较简单,项目中只需要两个java类(一个实体类,如User,一个工具类),两个配置文件(hibernate必须的两个配置文件hibernate.cfg.xml,与User.hbm.xml),即可都是常规的书写和配置方法,这时数据库中是没有建表的,在工具测试类CreateDB中,添加代码也很简单,如下,就可以生成数据库表了: public void testCreateDB(){ Configuration cfg = new Configuration().configure(); Sch…
实体类就是指普通的POJO,Hibernate并不知道那个实体类对应数据库的哪一张表,所以还需要配置一下,常用的方式就是*.hbm.xml文件[配置与@注解配置,这里介绍前者的详细属性: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org…
原文:http://www.cnblogs.com/otomedaybreak/archive/2012/01/20/2327695.html ============================================== 第一种关联关系:一对多(多对一) "一对多"是最普遍的映射关系,简单来讲就如消费者与订单的关系. 一对多:从消费者角的度来说一个消费者可以有多个订单,即为一对多. 多对一:从订单的角度来说多个订单可以对应一个消费者,即为多对一. 一对多关系在hbm文件…
原文:http://www.cnblogs.com/xiaoluo501395377/p/3377604.html ============================================ 在本篇随笔里将会分析一下hibernate的缓存机制,包括一级缓存(session级别).二级缓存(sessionFactory级别)以及查询缓存,当然还要讨论下我们的N+1的问题. 随笔虽长,但我相信看完的朋友绝对能对hibernate的 N+1问题以及缓存有更深的了解. 一.N+1问题 首…
Hibernate作为持久层(ORM)框架,操作数据库,自然也就离不开数据库连接池了.其支持多种连接池,这里就用最熟悉的C3P0连接池. C3P0连接池前面已经介绍了并使用很多次了就不再详细说明了. 一共就两个步骤,首先导入C3P0架包(当然还要有hibernate框架包和mysql驱动包),然后在Hibernate配置文件写配置信息 第一步-导包 要注意,导入的c3p0架包中需含有hibernate-c3p0.xxx.jar,为方便可直接复制 Hibernate框架/lib/optional/…
原文:http://www.cnblogs.com/xiaoluo501395377/p/3376256.html --------------------------------------------------------------------- 在这里通过定义了三个类,Special.Classroom.Student来做测试,Special与Classroom是一对多,Classroom与Student是一对多的关系,这里仅仅贴出这三个bean的属性代码: Special类: pub…
原文:http://justsee.iteye.com/blog/1070588 ===================================== 一.继承关系_整个继承树映射到一张表 对象模型(Java类结构) 一个类继承体系一张表(subclass)(表结构) Employee.java package com.taobao.hibernate.domain; public class Employee { private int id; private String name;…
转自:http://ryxxlong.iteye.com/blog/622652 ================= 一对一(one-to-one)实例(Person-IdCard) 一对一的关系在数据库中表示为主外关系.例如.人和身份证的关系.每个人都对应一个身份证号.我们应该两个表.一个是关于人信息的表(Person).别外一个是身份证相关信息的表(id_card).id_card表的主键对应该Person表的主键id,也是Person表的外键.有人才能有身份证.所以此例中Person是主表…
 1. 首先进行框架配置 导包 hibernate配置xml文件 ======================= 2. 创建并配置POJO类 Hibernate是操作持久化层的框架,和数据库打交道,其自身提供方法方便项目进行管理数据库和增删查改操作.首先这里要引入一个概念类,POJO类: * POJO类和其他普通类并无太大区别,只是为了和其他普通类进行区分.该类同样含有属性,get.set方法,无参有参构造器... * POJO类的属性对应数据库的表的列,因此其可以看作一个表的一行记录的模板 *…
Hibernate简介 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任. --------------------------- Hibernate核心…
hibernate 一. hibernate介绍 hibernate事实上就是ormapping框架,此框架的作用就是简单话数据库的操作. hibernate就是将用户提交的代码.參照持久化类配置文件,转换成sql语句. 1. JDBC的优/缺点: 1. 缺点: 1. 查询代码特别繁琐. 2. 反复性代码多.频繁的try,catch. 3. 没有对数据的缓存(就是将先将数据放入内存中,当dao层再向数据库要数据时.直接到内存中去取.速度会快非常多,也避免了频繁的和数据库交互). 4. 对sql代…
Hibernate表generator标签的作用,如下图,…
一.主配置文件hibernate.cfg.xml 位置:放在src目录下. 主要包含信息: 一.数据库信息    数据库方言(类的全名) 及 数据库链接信息 1.      数据库方言 2.      数据库连接字符串 3.      数据库驱动类名 4.      数据库名 5.      数据库密码 二.其他配置 比如: 1. <property name="show_sql">true</property><!-- 是否显示 sql语句-->…
1. Spring 指定datasource a) 参考文档,找dbcp.BasicDataSource i. c3p0 ii. dbcp <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value=&qu…