Java Hibernate有什么用?太慢了?开发人员缺少什么?
我正在从事一个需要与数据库交互的web应用程序项目(本例中为Oracle 12c): 为了更好地理解和测试Hibernate的功能(因为我是第一次使用Hibernate):我编写了一个调用web服务的小型web应用程序。该web服务的后端反过来使用hibernate从Oracle数据库获取数据(它执行一个只读查询(通过CreateSQLQuery的存储过程)) 它给出了以下结果(其中web服务在本地(tomcat 8)上运行,数据库在远程(aws)上运行): 520条记录提取时间:21020毫秒(提取时间约为21秒) 要获取的3846条记录:172383毫秒(172秒~3分钟) 我有几个问题: 1.我想知道Hibernate有什么用 2.我的第一个练习太慢了,我在网上搜索了很多遍,但没有找到任何直接的答案或方向 3.如果您是使用hibernate的人,请告诉我您为什么要使用此hibernate,以及它解决了什么业务问题(例如,它是否适合只运行基本web应用程序的初学者?) 4.您能告诉我Hibernate开发人员缺少什么吗 参考资料: 下面是我简单的Hibernate工作的背景: 查询:Java Hibernate有什么用?太慢了?开发人员缺少什么?,java,spring,hibernate,oracle12c,Java,Spring,Hibernate,Oracle12c,我正在从事一个需要与数据库交互的web应用程序项目(本例中为Oracle 12c): 为了更好地理解和测试Hibernate的功能(因为我是第一次使用Hibernate):我编写了一个调用web服务的小型web应用程序。该web服务的后端反过来使用hibernate从Oracle数据库获取数据(它执行一个只读查询(通过CreateSQLQuery的存储过程)) 它给出了以下结果(其中web服务在本地(tomcat 8)上运行,数据库在远程(aws)上运行): 520条记录提取时间:21020毫秒
List<Model> modelList = session.createSQLQuery("SELECT * FROM TABLE)
.addEntity(modelList.class).list();
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@X.X.X.X:1521:orcl</property>
<property name="hibernate.connection.password">*****</property>
<property name="hibernate.connection.username">******</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto"></property>
<mapping class="x.x.x.x.xsModel" />
<mapping class="x.x.x.x.dModel" />
</session-factory> </hibernate-configuration>
}对于您的.project来说,OR/M是一种过分的手段。它们最适合用于事务性数据(加载、修改、存储)。另外,一个主要的好处是不需要编写SQL,但无论如何您都在这样做 性能不佳的主要原因是每条记录中的所有数据都存储在会话缓存中 我建议使用本机Oracle客户端并直接写入对象 1.我想知道Hibernate的用途是什么 如果你不知道,那么你就不应该开始使用它。Hibernate是一个ORM:对象关系映射器。它允许以对象(称为实体)的互连图的形式“查看”数据库各种表中的行。Hibernate处理将行转换为对象、延迟加载关联、跟踪每个对象的状态并使其透明持久化等问题 主要的好处是能够编写代码,以更自然、面向对象的方式获取数据并将数据写入数据库,从而让Hibernate完成查询数据库的繁琐工作
- 它使用单个表,因此对关联和延迟加载的支持是无用的
- 当您有这样一个简单的用例时,额外的复杂性是不值得的
- 在处理大量实体时,Hibernate确实比较慢,除非您遵循。这不是它的目的
参见1。我使用过JDBC,并且所用的时间与Hibernate ORM差不多——520条记录获取时间:21020毫秒(大约21秒),3846条记录获取时间:172383毫秒(172秒~3分钟)(在JDBC中,第一条记录仅增加1-2秒,第二条记录增加20秒)。您所说的本机Oracle客户端是什么意思?
private static final Logger logger = LoggerFactory.getLogger(HibernateUtil.class);
private static SessionFactory buildSessionFactory()
{
try
{
if (sessionFactory == null) {
// loads configuration and mappings
Configuration configuration = new Configuration().configure()
.setProperty("hibernate.connection.driver_class", "oracle.jdbc.OracleDriver")
.setProperty("hibernate.connection.url", "jdbc:oracle:thin:@X.X.X.X:orcl")
.setProperty("hibernate.connection.password","aaaaa")
.setProperty("hibernate.connection.username","aaaaa")
.setProperty("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect")
.setProperty("show_sql","true")
//.setProperty("hibernate.hbm2ddl.auto", "")
// .setProperty("hibernate.temp.use_jdbc_metadata_defaults","false")
// .setProperty("hibernate.jdbc.lob.non_contextual_creation","true")
.addAnnotatedClass(dModel.class)
.addAnnotatedClass(sModel.class);
ServiceRegistry serviceRegistry
= new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties()).build();
// builds a session factory from the service registry
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
return sessionFactory;
}
catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
logger.error("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void shutdown() {
// Close caches and connection pools
getSessionFactory().close();
}