首先,建数据库表,采用MySQL数据库。
CREATE TABLE `t_jobstat` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`jobNo` varchar(45) DEFAULT NULL,
`clickSum` int(10) unsigned DEFAULT NULL,
`showSum` int(10) unsigned DEFAULT NULL,
`mailSum` int(10) unsigned DEFAULT NULL,
`locationid` varchar(10) DEFAULT NULL,
`logdate` char(8) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7320077 DEFAULT CHARSET=gbk MAX_ROWS=500000000;
其次,插入大批量数据,本次测试,插入730万条数据。
一.Jdbc测试
主要方法如下:
1.数据访问层
-
-
-
-
-
-
public List<Jobstat> findAll() throws SQLException {
-
String sql = "select * from t_jobstat where locationid like '%530%' limit 0,1000 ";
-
-
- ps = conn.prepareStatement(sql);
- ResultSet rs = ps.executeQuery();
-
-
-
Jobstat jobstat = null;
-
List<Jobstat> list = new ArrayList<Jobstat>();
-
-
while (rs.next()) {
-
jobstat = new Jobstat();
-
jobstat.setId(rs.getInt("id"));
-
jobstat.setJobNo(rs.getString("jobNo"));
-
jobstat.setClickSum(rs.getInt("clickSum"));
-
jobstat.setShowSum(rs.getInt("showSum"));
-
jobstat.setMailSum(rs.getInt("mailSum"));
-
jobstat.setLocationId(rs.getString("locationId"));
-
jobstat.setLogdate(rs.getString("logdate"));
- list.add(jobstat);
-
jobstat = null;
- }
-
-
return list;
- }
/**
* 检索前1000条记录
* @return
* @throws SQLException
*/
public List<Jobstat> findAll() throws SQLException {
String sql = "select * from t_jobstat where locationid like '%530%' limit 0,1000 ";
// 执行查询
ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
// 将查询结果组装至Asset实体对象
Jobstat jobstat = null;
List<Jobstat> list = new ArrayList<Jobstat>();
while (rs.next()) {
jobstat = new Jobstat();
jobstat.setId(rs.getInt("id"));
jobstat.setJobNo(rs.getString("jobNo"));
jobstat.setClickSum(rs.getInt("clickSum"));
jobstat.setShowSum(rs.getInt("showSum"));
jobstat.setMailSum(rs.getInt("mailSum"));
jobstat.setLocationId(rs.getString("locationId"));
jobstat.setLogdate(rs.getString("logdate"));
list.add(jobstat);
jobstat = null;
}
return list;
}
2.Action层
-
-
-
-
-
-
-
-
-
-
public ActionForward findTop(ActionMapping mapping, ActionForm form,
-
HttpServletRequest request, HttpServletResponse response) throws Exception{
-
-
JobstatDAO dao = new JobstatDAO();
-
long start = System.currentTimeMillis();
- List<Jobstat>list = dao.findAll();
-
request.setAttribute("results", list);
-
long end = System.currentTimeMillis();
-
System.out.println("取出前1000条数据组装为对象,花费时间为"+(end-start)+"ms");
-
return mapping.findForward("top");
- }
/**
* 检索前1000条记录
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward findTop(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception{
JobstatDAO dao = new JobstatDAO();
long start = System.currentTimeMillis();
List<Jobstat>list = dao.findAll();
request.setAttribute("results", list);
long end = System.currentTimeMillis();
System.out.println("取出前1000条数据组装为对象,花费时间为"+(end-start)+"ms");
return mapping.findForward("top");
}
3.我们打开一个测试页面,http://localhost:8080/jdbctest/jobstat.do?p=findTop
然后将默认浏览器设为能打开多Tab页的遨游,狂点测试页,最后数据取出速度稳定在16ms左右。
二.Hibernate Test
1.DAO访问层
- public static void main(String[] args) throws UnsupportedEncodingException{
-
session = HibernateUtil.currentSession();
-
long start = System.currentTimeMillis();
-
String queryString = "from Jobstat as js";
- Query queryObject = session.createQuery(queryString);
-
int pageNo =0;
-
pageNo = new Random().nextInt(10);
-
queryObject.setFirstResult(1000*pageNo);
-
queryObject.setMaxResults(1000*(pageNo+1));
- List list = queryObject.list();
-
long end = System.currentTimeMillis();
-
System.out.println("随机取出前1000条数据组装为对象,花费时间为"+(end-start)+"ms");
- }
public static void main(String[] args) throws UnsupportedEncodingException{
session = HibernateUtil.currentSession(); // 开启连接
long start = System.currentTimeMillis();
String queryString = "from Jobstat as js";
Query queryObject = session.createQuery(queryString);
int pageNo =0;
pageNo = new Random().nextInt(10);
queryObject.setFirstResult(1000*pageNo);
queryObject.setMaxResults(1000*(pageNo+1));
List list = queryObject.list();
long end = System.currentTimeMillis();
System.out.println("随机取出前1000条数据组装为对象,花费时间为"+(end-start)+"ms");
}
2进行数据量测试,当数据库中未建主键测试中,取出1000条数据花费时间为680ms,当主键索引存在后,取出1000条数据花费时间为530ms
综上测试,
Hibernate作为一个O/R Mapping,比JDBC具备的优势有:
1.编程思想上,更加符合人的逻辑思维习惯,面向对象比面向过程更加容易理解,测试和维护
2.开发维护速度上,Hibernate显著的快,代码量显著小
3.通过Annotation进行数据库的字段加密
4.对Sql不熟的菜鸟来说可以自动调优
5.结合Spring,通过声明式事务可以省略事务的控制,事务以横切面形式出现
Jdbc比Hibernate具备的优势有:
1.大数据量访问时,Jdbc的效率显著快
2.直接操作数据库比较灵活
Hibernate比Jdbc慢的地方:
1.将Hql语句转化为标准Sql语句,花费时间可以忽略不急
2.将ResultSet中数据组装为实体对象,如果即所得数据量比较大(比如一次检索1000条数据),这是效率就会降低,在组装实体对象花费时间较长
检索单表的1000条数据,Hibernate与Jdbc均不会超过1S钟.
from: http://www.iteye.com/topic/236784
分享到:
相关推荐
标题中的“本人理解hibernate 与 JDBC 的最本质区别”揭示了我们即将探讨的核心主题:Hibernate 和 JDBC 在处理数据库操作时的不同之处。 Hibernate 是一个对象关系映射(ORM)框架,而 JDBC(Java Database ...
对于性能测试,可以比较使用JDBC和Hibernate执行相同任务的时间消耗,评估哪种方式更高效。同时,要关注内存使用情况,因为ORM框架可能会增加内存开销。 在进行测试时,使用单元测试框架,如JUnit,可以帮助自动化...
总的来说,Spring通过提供对Hibernate和JDBC的深度集成,极大地提升了开发效率和代码质量。它使得数据库操作变得更加安全、简洁,同时也提高了系统的可维护性和可扩展性。在实际开发中,理解并熟练运用这些特性,将...
虽然Hibernate可以简化数据操作,但在某些复杂查询或性能优化时,开发者可能直接使用JDBC编写SQL语句以获取更高的灵活性和效率。在双表查询中,JDBC可以用于编写自定义的JOIN查询,以满足特定的需求。 在实际项目中...
Hibernate与JDBC对于数据库的性能操作对比事例,配置,更多信息资源
### Hibernate与JDBC:概述与对比 #### 一、JDBC简介 JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,它可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC...
比较两者,JDBC适合简单的数据库操作,而Hibernate更适合复杂的业务逻辑和大型项目,因为它的ORM特性减少了大量手动SQL编写的工作量,提高了开发效率和代码的可维护性。在实际项目中,开发者通常根据需求和项目规模...
Hibernate是一个优秀的对象关系映射(ORM)框架,它简化了Java应用程序对数据库的操作,通过将Java对象与数据库表进行映射,开发者可以避免直接编写SQL语句,提高了开发效率。在标题和描述中提到的"kingbaseV8 ...
**标题与描述解析** 标题和描述中提到的关键信息是“hibernate3”、“依赖包”和“JDBC”。这表明我们将讨论关于Hibernate ORM...通过这些库,Hibernate3能够无缝地与数据库进行交互,提高了开发效率和代码可维护性。
1. 配置Hibernate:在`hibernate.cfg.xml`或相应的配置文件中,设置`hibernate.jdbc.batch_size`为你想要测试的值,如50或100。 2. 创建实体类:定义你要保存到数据库的Java对象,确保它们与数据库表有正确的映射。 ...
虽然这不完全等同于Hibernate的全部功能,但确实降低了使用JDBC的复杂度,提高了开发效率。 在压缩包中的"jdbc"文件可能是封装后的JDBC工具类库,包含了实现上述功能的Java源代码或已编译的类文件。你可以通过阅读...
Java开发人员来说,JDBC(Java Database Connectivity)和Hibernate是两个重要的数据库操作工具。它们各自具有独特的优点和适用场景。 JDBC是Java平台的标准接口,用于连接和操作各种类型的数据库。它提供了直接的...
标题 "Jdbc 和hibernate" 提到的两个主要概念是Java数据库连接(JDBC)和Hibernate,它们都是Java开发中用于与关系型数据库交互的重要技术。本文将深入探讨这两个技术,以及它们之间的区别和联系。 JDBC是Java平台...
这是因为Hibernate可以通过缓存机制减少与数据库之间的交互次数,提高效率。 - **内存管理**:Hibernate通过其内部的缓存机制可以有效地管理对象的状态,从而减少不必要的数据库交互,提高整体性能。 #### 四、对象...
这两个文件夹可能分别包含了项目中与JDBC和Hibernate相关的代码。"jdbc"文件夹可能包含了一些自定义的JDBC操作,如连接池配置、数据访问对象(DAO)类,或者是一些在Hibernate未能完全覆盖到的特定数据库操作。而...
两个项目,一个项目是基于spring jdbc实现的分布式事务,一个是基于spring hibernate的分布式事务,hibernate项目里的applicationContext2.xml是基于mysql和mssql, applicationContext3.xml基于两个mssql, ...
Java编程领域中,数据库操作是不可或缺的一部分,而Hibernate和JDBC是两种常用的数据访问技术。本文将深入探讨这两种技术,并对比它们的特点、优缺点以及适用场景。 Hibernate是一种强大的对象关系映射(ORM)框架...
例如,如果设置了`default-cascade="all"`,那么在保存或更新一个实体时,Hibernate会自动更新与该实体相关的所有关联对象的状态。这样不仅可以简化代码,还可以确保数据的一致性。 #### 七、监控并调整Hibernate的...
总的来说,掌握JDBC和Hibernate对于Java开发者来说是至关重要的,它们是连接Java应用程序与数据库的桥梁,能够帮助你构建高效、健壮的数据库应用。学习这两个技术需要理论结合实践,通过编写实际项目来巩固所学知识...