Witam,
aktualnie zastanawiam sie nad wydajnoscią JDBC vs JDBCTemplate, wiem ze uzywajac springtemplatow zaoszczedzam na kodzie ale czy i na czasie pracy?? Macie moze jakies doswiadczenie w tym temacie?? Jezeli tak to pytanie brzmi ile? jezeli nie to po co stosowac spring do polaczen z BD.
Ze swojej strony zrobilem maly test, za pomoca 2 metod tworze tabele i uzupelniam ja 5000 wpisami. Ponizej zamieszczam moje czasy:
- Czyste JDBC: 1min15sec.
- Spring JDBCTemplate: 3min57sec.
Na koniec umieszczam moj kod:
- Czyste JDBC
public class jdbcConnection {
public static void main(String[] args) {
System.out.println(new Date().getMinutes() + ":" + new Date().getSeconds());
Connection conn;
PreparedStatement stmt;
try {
Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
conn = DriverManager.getConnection(
"jdbc:postgresql://127.0.0.1:5432/postgres", "login",
"haslo");
stmt = conn.prepareStatement("create table jdbc (imie varchar, nazwisko varchar, id varchar);");
stmt.execute();
for (int i = 0; i < 5000; i++) {
stmt = conn.prepareStatement("insert into jdbc values('" + i
+ "', '" + i + "','" + i + "');");
stmt.execute();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(new Date().getMinutes() + ":" + new Date().getSeconds());
}
}
- Spring JDBC
public class mainClass {
public static void main(String[] args) {
System.out.println(new Date().getMinutes()+":"+ new Date().getSeconds());
ApplicationContext ctx = new ClassPathXmlApplicationContext(
new String[] { "JDBCSpring/bean.xml" });
JdbcSpitterDAO bean = (JdbcSpitterDAO) ctx.getBean("spitterDao");
SimpleJdbcTemplate template = bean.getSimpleJdbcTemplate();
template.getJdbcOperations().execute("create table springTemplate (imie varchar, nazwisko varchar, id varchar);");
for(int i=0; i<5000; i++){
template.getJdbcOperations().execute("insert into springTemplate values('"+i+"', '"+i+"','"+i+"');");
}
System.out.println(new Date().getMinutes()+":"+ new Date().getSeconds());
}
}
public class JdbcSpitterDAO {
private SimpleJdbcTemplate jdbcTemplate;
public void setJdbcTemplate(SimpleJdbcTemplate jdbcTemplate){
this.jdbcTemplate = jdbcTemplate;
}
public SimpleJdbcTemplate getSimpleJdbcTemplate(){
return jdbcTemplate;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="dataSource" class='org.springframework.jdbc.datasource.DriverManagerDataSource'>
<property name='driverClassName' value='org.postgresql.Driver'/>
<property name='url' value='jdbc:postgresql://127.0.0.1:5432/postgres'/>
<property name='username' value='login'/>
<property name='password' value='haslo'/>
</bean>
<bean id='jdbcTemplate' class='org.springframework.jdbc.core.simple.SimpleJdbcTemplate'>
<constructor-arg ref='dataSource'/>
</bean>
<bean id='spitterDao' class='JDBCSpring.JdbcSpitterDAO'>
<property name="jdbcTemplate" ref='jdbcTemplate'/>
</bean>
</beans>
Dlaczego dostep do BD za pomoca springa jest duzo dluzszy??