Spring JDBCTemplate vs plain JDBC

0

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
<?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??

0

zle cos napisalem w kodzie ?? czy nikt nie korzysta ze springa w ten sposob ?? :)

0

A czemu czas miałby nie być dluższy? Przecież "pod spodem" jdbc template ma właśnie gołe jdbc, więc szybciej działać nie będzie.
A że jdbctemplate dodaje trochę własnego kodu, to logiczne że będzie wolniej. Tutaj akurat stawiałbym na to, że transakcje są inaczej ustawione albo że jdbctemplate zamyka połączenia co jakiś czas.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0