版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Hibernate框架1.hibernate的下载: /orm/downloads/2.引入hibernate的jar包。 引入lib的中的required里的jar包:3.引入数据库访问的jar包。4.编写hibernate的配置文件。一般配置文件以hibernate.cfg.xml命名。将文件放在src目录下。5.先编写数据库的映射类,然后编写数据库的映射文件。一般以 类名.hbm.xml。 如果有UserInfo的表,那么会编写UserInfo的映射类。而一般映射类都会去继承 Serializable。 编写的UserInfo.hbm.xml6.编写
2、hibernate.cfg.xml配置文件里包含的实体映射关系。7.通过Hibernate编写对于数据库的访问的操作。 Configuration:主要就是获取配置文件的相关信息。 操作代码:(针对Hibernate的版本:) Configuration config = new Configuration().configure();ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(config.getProperties().build(); Session对象:主要就是
3、用于和数据交互的对象。/产生SessionFactory的方法,初始化一些配置 SessionFactory factory = config.buildSessionFactory(serviceRegistry); /每个Session产生,专门用于处理Hibernate的数据的对象 Session session = factory.openSession();Hibernate中的对象的三种状态1.瞬时状态 普通的java对象,往往是通过new一个对象所产生的。这个时候的java对象和数据库一点关系都没有。如果一个持久状态通过session.delete方法之后那么就会变成一个瞬时状态
4、。2.持久状态 如果一个对象和session产生了关联,并且这个session还未关闭(处于有效期内)。3.游离状态 从持久状态转换到游离状态,一般都是session关闭之后。第二天Hibernate的重要配置1.基本配置数据库方言的配置:2.为了提升连接效率,加入连接池的第三方jar包,这里采用的是c3p0。 1)加入c3p0的jar包。在hibernate包下面有个optional文件夹下找到c3p0的文件夹,将里面的内容全部拷贝到项目下。 2)配置c3p0 <!- C3P0连接池的配置 -><property name="vider
5、_class">org.hibernate.connection.C3P0ConnectionProvider</property><!- 最小连接数 -><property name="c3p0.min_size">5</property><!- 最大连接数 -><property name="c3p0.max_size">20</property><!- 连接的最大空闲时间,时间为秒 -><property name="c3
6、p0.timeout">3600</property><!- 最大的statement数 -><property name="c3p0.max_statements">50</property><!- 每隔多少时间检查连接池的空闲连接,时间为秒 -><property name="c3p0.idle_test_period">120</property><!- 连接池用完之后新建的连接数量 -><property name="c
7、3p0.acquire_increment">2</property>3.其它配置4.映射文件的配置。 <property>元素为类定义了一个持久化的,JavaBean风格的属性。<property name=“userIfDelete” column=“userIfDelete“ type=“java.lang.String”></property>(1) name: 属性的名字,以小写字母开头。 (2) column (可选 - 默认为属性名字): 对应的数据库字段名。 也可以通过嵌套的<column>元素指定。
8、(3) type (可选): 一个Hibernate类型的名字。第三天Hibernate映射1.单向关联。 只能从单向的一段访问另外一段(只能从一个实体访问另外一个实体)。A.多对一的单向关联。 只能够从多的实体访问一的实体。在产品表创建实体属性。 private Cate cate;/分类的实体对象 public Cate getCate() return cate;public void setCate(Cate cate) this.cate = cate;在产品的映射配置文件中:<many-to-one name="cate" fetch="join
9、" class="Cate" column="cate_id"></many-to-one>分类表(一)产品表(多)B.一对多的单向关联。产品表(多)分类表(一) 从一的实体访问多的实体(集合)。在分类表的对象中添加多的实体属性集合,也就在Cate实体中加入以下代码:public Set<Product> getProducts() return products;public void setProducts(Set<Product> products) ducts = product
10、s;private Set<Product> products;再修改cate的实体映射文件:<set name="products" table="Product" > <key column="cate_id"></key><!- 外键关联的名字 -> <one-to-many class="Product"/> </set>2.双向关联: 两端都能相互访问。在实际开发中均采用的是双向关联。3.级联关系。 cascade:级联关
11、系,就是如果说两端中的一段数据更新了,是否更新另外另外一端的数据。 cascade:save-update.当其中一端的数据更新了,那么就会影响到另外一端的数据。比如我更新了产品分类表的数据,那么就会自动更新产品表的数据。4. inverse:控制反转的属性 inverse:true。将控制权交予对方。 inverse:false。将控制权保留起来。5.fetch: 如果不设定该属性值,默认情况下,如果有关联表,那么关联表会分批次查询。比如查询分类表,以及分类所对应的产品表。那么会进行两次查询。先查询分类的信息,然后得到分类ID,将分类ID传入产品表里进行查询。 fetch:join.就会通过
12、left out join 进行表与表之间的关联,最终会是一条sql语句。第四天 Hibernate查询1.HQL查询。 主要功能:实现查询(通过查询实体的方式),所有的查询全部是在实体对象里查询的。 1)只要实现的查询,那么都是从Query接口中去实现的。首先就应该创建一个Query接口。在创建Query接口的时候传入的是HQL查询语句。HQL查询语句的语法:select/update/delete from Entity where group by having order by 操作示例:/ 首先创建一个Query接口,一定通过session创建的。Session session =
13、HibernateSessionFactory.getSession();String hsql = "From Cate"/ HQL的语句Query query = session.createQuery(hsql);/ 得到查询之后的结果集List<Cate> list = query.list();for (Cate c : list) System.out.println("分类的名称:" + c.getName();2)HQL查询的介绍。 A.查询某一些实体对象的属性。查询之后的结果是存取到Object数组里。示例: String
14、hsql = "Select c.id, From Cate c"/ HQL的语句 List<Object> list = session.createQuery(hsql).list(); for(Object objs : list) System.out.println("分类ID:"+objs0+",分类名称:"+objs1); B.Hibernate分页的实现。 Query接口里的重要方法: 1) setFirstResult:表示从哪一条数据的索引开始。 2)setMaxResults:表示每页的最
15、大数据量: 示例:String hsql = "from Cate "List<Cate> list = session.createQuery(hsql) .setFirstResult(pageStart) /查询结果集从哪开始 .setMaxResults(pagesize)/获取的最大数据.list();C.获取查询结果的实体对象数据。 String hsql = "from Cate "Cate c =(Cate)session.createQuery(hsql).setMaxResults(1).uniqueResult();D.
16、动态参数绑定 1)第一种方法,参数前加:符号。 String hsql = "from Cate c Where 1=1 "if(id > 0)hsql += " and id =:id"if(!name.equals("")hsql +=" and name =:name"Query query = session.createQuery(hsql);if(id > 0)query.setParameter("id", id);if(!name.equals(""
17、;)query.setParameter("name", name);List<Cate> list =query.list();2)第二种参数绑定方法,通过?作为占位符。然后后面通过占位符的索引去设置参数值(这里的参数索引是从0开始)。示例:String hsql = "from Cate c Where 1=1 and id=? and name like ? "Query query = session.createQuery(hsql);query.setParameter(0, id); query.setParameter(1,
18、"%"+name+"%");E.更新和删除的操作示例:1.使update Entity Query query = session.createQuery("updateEntity set name='jack' where id=1"); int rowCount = query.executeUpdate();2.使用delete
19、160; Query query = session.createQuery("delete Entity where id < 1000"); int rowCount = query.executeUpdate();F:分组统计查询。语法格式。比如统计某个分类下的产品数量:String hsql = "Select ,count(p.id) "+" From Product p left join p.cate c &
20、quot;+" Group by c.id "/ HQL的语句3)QBC查询 1)需要引入的接口Criteria。 操作示例:Criteria crt = session.createCriteria(Cate.class);/如果需要加入条件crt.add(Restrictions.eq("", "家电"); List<Cate> list = crt.list();4)Native查询。 查阅的语句就是本身的数据库的查询语句。 通过SQLQuery的接口实现的。SQLQuery sqlQuery =
21、session.createSQLQuery("Select * From Product");List<Product> list = sqlQuery.addEntity(Product.class).list();第五天Hibernate优化1.关于缓存的理解。 缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。2.Hibernate的缓存。一级缓存:针对的是session的缓
22、存,关于对session的处理方案: clear() :Completely clear the session.清空session,该清空操作只对于要保存的、删除的和修改的数据起作用,不涉及查询的结果。close() :End the session by releasing the JDBC connection and cleaning up.释放并清空JDBC连接。但是不一定非得关闭session。flush(): Force this session to flush.强制刷新流的缓冲。flush必须在一个操作单元结束之后且在提交事务和关闭连接之前被调用。例如插入一条数据。二级缓存:
23、二级缓存也称为进程级的缓存或SessionFactory级的缓存,二级缓存可以被所有的session共享二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存。二级缓存的配置。1. 将ehcache.xml文件拷贝到src下,修改为以下内容:配置代码参考:<?xml version="1.0" encoding="UTF-8"?> <ehcache> <diskStore path="java.io.tmpdir"/> <defaultCa
24、che maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" /> <cache name="com.gxa.bj.model.Cate" eternal="false" maxElementsInMemory="100" timeToIdleSecon
25、ds="1200" timeToLiveSeconds="1200" overflowToDisk="false"> </cache> </ehcache>2.将缓存产品的jar包加入到项目中。如采用的是ehcache的是这个二级缓存。那么将hibernate-release-4.3.10.Finalliboptionalehcache下面的所有jar包拷贝到项目中注意:如果此时的slf4j的jar包提示版本过低(运行的时候),需要将jre的版本升级为1.7以上的。3.配置hibernate.cfg.xml文件。<!- 启用二级缓存,这也是它的默认配置 -><property name="hibernate.cache.use_second_level_cache">true</property><property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFacto
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 仙娜营销方案(3篇)
- 2026年陕西交通职业技术学院单招综合素质考试题库及答案详解(全优)
- 铝箔生产制造工艺研究报告
- 2026年闽西职业技术学院单招职业倾向性考试题库带答案详解(模拟题)
- 2026年陕西省宝鸡市单招职业适应性考试题库含答案详解(巩固)
- 2026年黎明职业大学单招职业技能测试题库含答案详解(黄金题型)
- 2026年鹤壁汽车工程职业学院单招职业技能测试题库含答案详解(精练)
- 2026年青海农牧科技职业学院单招综合素质考试题库含答案详解(b卷)
- 2026年闽南理工学院单招职业适应性考试题库附答案详解(a卷)
- 2026年黑龙江交通职业技术学院单招职业适应性考试题库带答案详解(综合卷)
- 讲好法院故事:消息写作与新闻摄影实战指南
- 《宫颈癌预防与治疗》课件
- 2025年黑龙江商业职业学院高职单招语文2019-2024历年真题考点试卷含答案解析
- (省统测)贵州省2025年4月高三年级适应性考试(选择性考试科目)生物试卷(含答案)
- 个人近三年的工作业绩报告模板
- 2025年江西陶瓷工艺美术职业技术学院单招职业技能测试题库1套
- 常州信息单招数学试卷
- DB32∕T 2170-2012 低收缩低徐变桥梁高性能混凝土技术规程
- SCMP复习试题含答案
- 【MOOC】大学体育-华中科技大学 中国大学慕课MOOC答案
- 《氢科学技术应用》课件-3-1 氢气的储存
评论
0/150
提交评论