hibernate入门课程--编程练习

上传人:tian****1990 文档编号:74804141 上传时间:2019-01-29 格式:PPT 页数:16 大小:282.95KB
返回 下载 相关 举报
hibernate入门课程--编程练习_第1页
第1页 / 共16页
hibernate入门课程--编程练习_第2页
第2页 / 共16页
hibernate入门课程--编程练习_第3页
第3页 / 共16页
hibernate入门课程--编程练习_第4页
第4页 / 共16页
hibernate入门课程--编程练习_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《hibernate入门课程--编程练习》由会员分享,可在线阅读,更多相关《hibernate入门课程--编程练习(16页珍藏版)》请在金锄头文库上搜索。

1、Hibernate实践(2),Java EE分布式开发,实践内容,使用PowerDesigner进行数据库设计 Hibernate的数据库连接池配置(C3P0) Hibernate的二级缓存配置 (EhCache) Hibernate使用大二进制字段(BLOB/CLOB) 补充: 软件配置管理(SCM)与版本管理软件Subversion,PowerDesigner的数据库设计,创建概念数据模型(CDM) 创建物理数据模型(PDM) 由PDM生成SQL语句 通过JDBC连接进行MySql数据库反向工程 要设置JAVA_HOME, PATH 可以只选择指定的表,数据库连接池的Hibernate配置

2、概述,Hibernate自带的连接池算法相当不成熟。它只是为了让你快些上手,并不适合用于产品系统或性能测试中。出于最佳性能和稳定性考虑你应该使用第三方的连接池。只需要用特定连接池的设置替换 hibernate.connection.pool_size即可。这将关闭Hibernate自带的连接池。 C3P0是一个随Hibernate一同分发的开源的JDBC连接池,它位于lib目录下。如果你设置了hibernate.c3p0.*相关的属性, Hibernate将使用 C3P0ConnectionProvider来缓存JDBC连接。,使用数据库连接池前后的测试性能对比,关闭Hibernate默认连接

3、池: hibernate.connection.pool_size 0 使用Hibernate的C3P0数据库连接池: hibernate.c3p0.max_size 30 hibernate.c3p0.min_size 5 hibernate.c3p0.timeout 300 hibernate.c3p0.max_statements 50 hibernate.c3p0.idle_test_period 3000,数据库连接池测试用Java代码(demo),Configuration cf = new Configuration().configure(); SessionFactory s

4、f = cf.buildSessionFactory(); Session session=sf.openSession(); long t1=System.currentTimeMillis(); for (int i=0; i1000; i+) Transaction tx=session.beginTransaction(); session.createQuery(“from Book where id=1“); Book b1=new Book(); b1.setName(“test3“); b1.setPublisher(“publisher1“); session.save(b1

5、); session.delete(b1); mit(); long t2=System.currentTimeMillis(); System.out.println(“Total time=“+(t2-t1)+“ms“);,EhCache简介,1.EhCache是什么 EhCache是Hibernate的二级缓存技术之一,可以把查询出来的数据存储在内存或者磁盘,节省下次同样查询语句再次查询数据库,大幅减轻数据库压力; 2.EhCache的使用注意点 当用Hibernate的方式修改表数据(save,update,delete等等),这时EhCache会自动把缓存中关于此表的所有缓存全部删除

6、掉(这样能达到同步)。但对于数据经常修改的表来说,可能就失去缓存的意义了(不能减轻数据库压力); 3.EhCache使用的场合 3.1比较少更新表数据 EhCache一般要使用在比较少执行write操作的表(包括update,insert,delete等)Hibernate的二级缓存也都是这样; 3.2对并发要求不是很严格的情况 两台机子中的缓存是不能实时同步的,Hibernate.cfg.xml配置 Book.hbm.xml配置 创建EhCache.xml,EhCache的配置,EhCache.xml实例,Java代码(EhCache的查询缓存),Session session = Hibe

7、rnateSessionFactory.getSession(); Transaction tx =null; long t1=System.currentTimeMillis(); for (int ii=0; ii10000; ii+) try tx = session.beginTransaction(); Query query = session.createQuery(“from Book“); /激活查询缓存 query.setCacheable(true); /使用自定义的查询缓存区域,若不设置,则使用标准查询缓存区域 query.setCacheRegion(“longTim

8、e“); List list = query.list(); for(int i = 0 ; i list.size(); i+) Book b1 = (Book)list.get(i); mit(); catch(HibernateException e) e.printStackTrace(); long t2=System.currentTimeMillis(); System.out.println(“Total time=“+(t2-t1)+“ms“);,Hibernate对大字段的处理(Blob/Clob),在.hbm.xml和Java pojo类中做好映射,类型为java.sql

9、.Blob 写入Blob字段示例 为保证字符集一致,注意mysql 连接url应该修改为jdbc:mysql:/localhost:3306/mytest?useUnicode=true&characterEncoding=utf-8 读出Blob字段示例,向数据库写入Blob字段代码示例,FileInputStream fileInputStream = new FileInputStream(“d:001.jpg“); Blob photo = Hibernate.createBlob(fileInputStream); try Configuration cfg=new Configur

10、ation().configure(); SessionFactory sf =cfg.buildSessionFactory(); Session session = sf.openSession(); Transaction tx = session.beginTransaction(); Newbook b=new Newbook(); b.setName(“Java2“); b.setCoverimage(photo); session.save(b); mit(); session.close(); sf.close(); catch (HibernateException e) /

11、 TODO Auto-generated catch block e.printStackTrace(); ,从数据库读出Blob字段代码示例,Configuration cfg=new Configuration().configure(); SessionFactory sf =cfg.buildSessionFactory(); Session session = sf.openSession(); Transaction tx = session.beginTransaction(); Query qr = session.createQuery(“from Newbook where

12、 name=Java2“); List list=qr.list(); Newbook b=list.get(0); InputStream inputStream = b.getCoverimage().getBinaryStream(); FileOutputStream fileOutputStream = new FileOutputStream(getServletContext().getRealPath(“photo1.jpg“),true); byte buf = new byte1; int len = 0; while(len = inputStream.read(buf)

13、 != -1) fileOutputStream.write(buf, 0, len); inputStream.close(); fileOutputStream.close(); mit(); session.close(); sf.close();,版本管理软件Subversion,Subversion,简称SVN,是一个开放源代码的版本控制系统,相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS。互联网上越来越多的控制服务从CVS转移到Subversion。 版本控制之于程序员,就好比安全网之于高空秋千表演者。知道安全网就在那里,万一自己摔落它能够提供保护,高空秋千

14、表演者才能放心大胆地在空中飞跃。同样,版本控制使您有能力去冒以往想都不敢想的风险。如果哪儿出了错,您总是可以使自己的代码回复到一个已知的、工作正常的版本。 Subversion一般分为服务器和客户端两部分。 Subversion服务器一般在官方网站上下载 TortoiseSVN在windows下非常受到欢迎的客户端,可与资源管理器集成 Subclipse是eclipse/myeclipse上的一个客户端插件,Subversion服务器安装配置,建立版本库(Repository) svnadmin create E:svndemorepository 配置用户和权限 运行服务: svnserve d r E:svndemo 安装成windows服务,Subversion客户端(subclipse),Subclipse是 elipse的一个插件 安装方法 Initial Import 日常操作:Check outUpdateCheck in 版本比较,恢复等常用操作示例,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号