{"id":4,"date":"2005-12-17T18:26:00","date_gmt":"2005-12-17T18:26:00","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=4"},"modified":"2005-12-17T18:26:00","modified_gmt":"2005-12-17T18:26:00","slug":"mit-spring-und-dem-jdbctemplate-auf-eine-hibernate-datenbank","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2005\/12\/mit-spring-und-dem-jdbctemplate-auf-eine-hibernate-datenbank\/","title":{"rendered":"Mit Spring und dem JdbcTemplate auf eine Hibernate-Datenbank"},"content":{"rendered":"<p>Das folgende Beispiel soll zeigen, wie man mit Spring arbeitet und Daten in einer relationalen Datenbank persistent macht. Um das Bespiel zum Laufen zu bringen m\u00fcssen im Klassenpfad sein: <i>hsqldb.jar<\/i>, <i>spring.jar<\/i>, <i>log4j-1.2.9.jar<\/i> und <i>common-logging.jar<\/i>. F\u00fcr die  Log-Meldungen setzen wir in den Klassenpfad die Datei <i>log4j.properties<\/i>:<\/p>\n<pre>log4j.rootCategory=WARN, A1<br \/><br \/>log4j.appender.A1=org.apache.log4j.ConsoleAppender<br \/>log4j.appender.A1.layout=org.apache.log4j.PatternLayout<br \/>log4j.appender.A1.layout.ConversionPattern=%m%n<\/pre>\n<p>Beginnen wir mit unserem Gesch\u00e4ftsobjekt, einem Kunden:<\/p>\n<pre>package com.javatutor.domain;<br \/><br \/>public class Customer<br \/>{<br \/>private int    id;<br \/><br \/>private String name;<br \/><br \/>public int getId()<br \/>{<br \/>  return id;<br \/>}<br \/><br \/>public void setId( int id )<br \/>{<br \/>  this.id = id;<br \/>}<br \/><br \/>public String getName()<br \/>{<br \/>  return name;<br \/>}<br \/><br \/>public void setName( String name )<br \/>{<br \/>  this.name = name;<br \/>}<br \/><br \/>@Override<br \/>public String toString()<br \/>{<br \/>  return String.format( \"Customer[id=%d, name=%s]\", id, name );<br \/>}<br \/>}<br \/><\/pre>\n<p>F\u00fcr diesen Kunden definieren wir eine DAO-Schnittstelle, die uns sp\u00e4ter Exemplare der Gesch\u00e4ftsobjekte gibt und die Speicherung erm\u00f6glichen.<\/p>\n<pre>package com.javatutor.dao;<br \/><br \/>import java.util.Collection;<br \/><br \/>import com.javatutor.domain.Customer;<br \/><br \/>public interface CustomerDao<br \/>{<br \/>Collection&lt;Customer&gt; getCustomers();<br \/><br \/>Customer findCustomerById( int id );<br \/><br \/>void save( Customer customer );<br \/>}<\/pre>\n<p>Zum Testen der Applikation beginnen wir mit einer einfach DAO-Implementierung, die Kunden in einer HashMap speichert.<\/p>\n<pre><br \/>package com.javatutor.dao.map;<br \/><br \/>import java.util.Collection;<br \/>import java.util.HashMap;<br \/>import java.util.Map;<br \/><br \/>import com.javatutor.dao.CustomerDao;<br \/>import com.javatutor.domain.Customer;<br \/><br \/>public class CustomerDaoMapImpl implements CustomerDao<br \/>{<br \/> private Map&lt;Integer, Customer&gt; map = new HashMap&lt;Integer, Customer&gt;();<br \/><br \/> public Collection&lt;Customer&gt; getCustomers()<br \/> {<br \/>   return map.values();<br \/> }<br \/><br \/> public Customer findCustomerById( int id )<br \/> {<br \/>   return map.get( id );<br \/> }<br \/><br \/> public void save( Customer customer )<br \/> {<br \/>   map.put( customer.getId(), customer );<br \/> }<br \/>}<br \/><\/pre>\n<p>Eine Applikation wird \u00fcber die Spring-Konfigurationsdatei sp\u00e4ter mit einem konkreten CustomerDao gespritzt. Die Methode haveFun() legt einige Business-Objekte an und speichert sie \u00fcber das DAO.<\/p>\n<pre><br \/>package com.javatutor;<br \/><br \/>import org.springframework.context.support.ClassPathXmlApplicationContext;<br \/>import org.springframework.jdbc.core.JdbcTemplate;<br \/><br \/>import com.javatutor.dao.CustomerDao;<br \/>import com.javatutor.domain.Customer;<br \/><br \/>public class Application<br \/>{<br \/> private CustomerDao customerDao;<br \/><br \/> public void setCustomerDao( CustomerDao customerDao )<br \/> {<br \/>   this.customerDao = customerDao;<br \/> }<br \/><br \/> private void haveFun()<br \/> {<br \/>   System.out.println( customerDao.getCustomers() );<br \/><br \/>   Customer c1 = new Customer();<br \/>   c1.setId( 0 );<br \/>   c1.setName( \"Christian Ullenboom\" );<br \/>   customerDao.save( c1 );<br \/><br \/>   System.out.println( customerDao.findCustomerById( 0 ) );<br \/>  <br \/>   System.out.println( customerDao.getCustomers() );<br \/><br \/>   Customer c2 = new Customer();<br \/>   c2.setId( 1 );<br \/>   c2.setName( \"Tantiana Roujitcher\" );<br \/>   customerDao.save( c2 );<br \/><br \/>   System.out.println( customerDao.getCustomers() );<br \/> }<br \/><br \/> \/\/<br \/><br \/> public static void main( String[] args )<br \/> {<br \/>   ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( \"spring.xml\" );<br \/>   Application bean = (Application) context.getBean( \"Application\" );<br \/>   bean.haveFun();<br \/> }<br \/>}<br \/><\/pre>\n<p>Jetzt fehlt nur noch die XML-Datei f\u00fcr Spring:<\/p>\n<pre><br \/>&lt;?xml version=\"1.0\"?&gt;<br \/>&lt;!DOCTYPE beans PUBLIC \"-\/\/SPRING\/\/DTD BEAN\/\/EN\"<br \/>\"http:\/\/www.springframework.org\/dtd\/spring-beans.dtd\"&gt;<br \/><br \/>&lt;beans&gt;<br \/>&lt;bean id=\"Application\" class=\"com.javatutor.Application\"&gt;<br \/> &lt;property name=\"customerDao\"&gt;<br \/>  &lt;ref local=\"CustomerDao\" \/&gt;<br \/> &lt;\/property&gt;<br \/>&lt;\/bean&gt;<br \/>&lt;bean id=\"CustomerDao\" class=\"com.javatutor.dao.map.CustomerDaoMapImpl\" \/&gt;<br \/>&lt;\/beans&gt;<br \/><\/pre>\n<p>Startet man das Programm, ist die Ausgabe<\/p>\n<pre><br \/>[]<br \/>Customer[id=0, name=Christian Ullenboom]<br \/>[Customer[id=0, name=Christian Ullenboom]]<br \/>[Customer[id=1, name=Tantiana Roujitcher], Customer[id=0, name=Christian Ullenboom]]<br \/><\/pre>\n<p>Prima. Es klappt. Jetzt kommt eine DAO-Implementierung f\u00fcr JDBC. Zun\u00e4chst die Klasse.<\/p>\n<pre><br \/>package com.javatutor.dao.jdbc;<br \/><br \/>import java.sql.ResultSet;<br \/>import java.sql.SQLException;<br \/>import java.util.Collection;<br \/><br \/>import org.springframework.dao.IncorrectResultSizeDataAccessException;<br \/>import org.springframework.jdbc.core.JdbcTemplate;<br \/>import org.springframework.jdbc.core.RowMapper;<br \/><br \/>import com.javatutor.dao.CustomerDao;<br \/>import com.javatutor.domain.Customer;<br \/><br \/>public class CustomerDaoJdbcImpl extends JdbcTemplate implements CustomerDao<br \/>{<br \/>@SuppressWarnings(\"unchecked\")<br \/>public Collection&lt;Customer&gt; getCustomers()<br \/>{<br \/>  return query( \"SELECT Id, Name FROM Customers\", new CustomerRowMapper() );<br \/>}<br \/><br \/>public Customer findCustomerById( int id )<br \/>{<br \/>  String sql = \"SELECT Id, Name FROM Customers WHERE Id = ?\";<br \/><br \/>  try<br \/>  {<br \/>    return (Customer) queryForObject( sql,<br \/>                     new Object[] { id },<br \/>                     new CustomerRowMapper());<br \/>  }<br \/>  catch ( IncorrectResultSizeDataAccessException e ) { }<br \/><br \/>  return null;<br \/>}<br \/><br \/>public void save( Customer customer )<br \/>{<br \/>  if ( findCustomerById( customer.getId() ) == null )<br \/>  {<br \/>    Object[] args = { customer.getId(), customer.getName() };<br \/>    update( \"INSERT INTO Customers (Id, Name) VALUES (?,?)\", args );<br \/>  }<br \/>  else<br \/>  {<br \/>    Object[] args = { customer.getName(), customer.getId() };<br \/>    update( \"UPDATE Customers SET Name = ? WHERE Id = ?\", args );<br \/>  }<br \/>}<br \/>}<br \/><br \/>class CustomerRowMapper implements RowMapper<br \/>{<br \/>public Object mapRow( ResultSet rs, int rowNum ) throws SQLException<br \/>{<br \/>  Customer c = new Customer();<br \/>  c.setId( rs.getInt( \"Id\" ) );<br \/>  c.setName( rs.getString( \"Name\" ) );<br \/>  return c;<br \/>}<br \/>}<br \/><\/pre>\n<p>Und in der XML-Datei erg\u00e4nzen wir f\u00fcr den JDBC-DAO:<\/p>\n<pre>&lt;bean id=\"CustomerDaoJdbc\" class=\"com.javatutor.dao.jdbc.CustomerDaoJdbcImpl\"&gt;<br \/>&lt;property name=\"dataSource\"&gt;&lt;ref local=\"DataSource\" \/&gt;&lt;\/property&gt;<br \/>&lt;\/bean&gt;<br \/><br \/>&lt;bean id=\"DataSource\" class=\"org.springframework.jdbc.datasource.DriverManagerDataSource\"&gt;<br \/>&lt;property name=\"driverClassName\"&gt;<br \/> &lt;value&gt;org.hsqldb.jdbcDriver&lt;\/value&gt;<br \/>&lt;\/property&gt;<br \/>&lt;property name=\"url\"&gt;<br \/> &lt;value&gt;jdbc:hsqldb:mem:customers&lt;\/value&gt;<br \/>&lt;\/property&gt;<br \/>&lt;property name=\"username\"&gt;<br \/> &lt;value&gt;sa&lt;\/value&gt;<br \/>&lt;\/property&gt;<br \/>&lt;property name=\"password\"&gt;<br \/> &lt;value&gt;&lt;\/value&gt;<br \/>&lt;\/property&gt;<br \/>&lt;\/bean&gt;<\/pre>\n<p>Damit unsere Applikation mit dem neuen JDBC-DAO gespritzt wird setzt man.<\/p>\n<pre> &lt;bean id=\"Application\" class=\"com.javatutor.Application\"&gt;<br \/> &lt;property name=\"customerDao\"&gt;<br \/>  &lt;ref local=\"CustomerDaoJdbc\" \/&gt;<br \/> &lt;\/property&gt;<br \/> &lt;property name=\"dataSource\"&gt;<br \/>  &lt;ref local=\"DataSource\" \/&gt;<br \/> &lt;\/property&gt;<br \/>&lt;\/bean&gt;<\/pre>\n<p>Gleichzeitig geben wir der Applikation eine DataSource, damit sie die Tabelle f\u00fcr die Datenbank anlegen kann.<\/p>\n<pre><br \/>public void setDataSource( DataSource dataSource )<br \/>{<br \/> new JdbcTemplate( dataSource ).execute( \"CREATE TABLE Customers( Id INTEGER, Name VARCHAR(128) ) \" );<br \/>}<br \/><\/pre>\n<p>Das gestartet Programm gibt nun die gleiche Ausgabe.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das folgende Beispiel soll zeigen, wie man mit Spring arbeitet und Daten in einer relationalen Datenbank persistent macht. Um das Bespiel zum Laufen zu bringen m\u00fcssen im Klassenpfad sein: hsqldb.jar, spring.jar, log4j-1.2.9.jar und common-logging.jar. F\u00fcr die Log-Meldungen setzen wir in den Klassenpfad die Datei log4j.properties: log4j.rootCategory=WARN, A1log4j.appender.A1=org.apache.log4j.ConsoleAppenderlog4j.appender.A1.layout=org.apache.log4j.PatternLayoutlog4j.appender.A1.layout.ConversionPattern=%m%n Beginnen wir mit unserem Gesch\u00e4ftsobjekt, einem Kunden: package [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[3],"tags":[],"class_list":["post-4","post","type-post","status-publish","format-standard","hentry","category-spring"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=4"}],"version-history":[{"count":0,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=4"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=4"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=4"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}