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