访问:
http://localhost:8080/sprJDBC/ping/piu
http://localhost:8080/sprJDBC/pings
输出:
Ping{ID=1, TAG=piu, TS=2013-10-23 13:35:03.915} Ping{ID=2, TAG=too, TS=2013-10-23 13:35:19.147}
package springweb;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import javax.sql.DataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
public class WebApp extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
//return new Class<?>[0];
/*
SEVERE: Servlet /sprJDBC threw load() exception
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [springweb.data.PingService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
*/
return new Class<?>[]{ RootConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{ WebAppConfig.class };
}
@Override
protected String[] getServletMappings() {
return new String[]{ "/" };
}
@Configuration
@EnableWebMvc
@ComponentScan("springweb.controller")
public static class WebAppConfig {
}
@Configuration
@ComponentScan("springweb.data")
public static class RootConfig {
@Bean
public DataSource dataSource() {
DataSource bean = new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("classpath:schema.sql")
.build();
return bean;
}
}
}
package springweb.data;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import javax.sql.DataSource;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Repository
public class PingService {
public static Log LOG = LogFactory.getLog(PingService.class);
private JdbcTemplate jdbcTemplate;
@Autowired
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public void insert(String tag) {
LOG.info("Inserting Ping tag: " + tag);
jdbcTemplate.update("INSERT INTO PING(TAG, TS) VALUES(?, ?)", tag, new Date());
}
public List<Map<String, Object>> findAllPings() {
return jdbcTemplate.queryForList("SELECT * FROM PING ORDER BY TS");
}
}
package springweb.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import springweb.data.PingService;
import java.util.List;
import java.util.Map;
@Controller
public class PingController {
@Autowired
private PingService pingService;
@RequestMapping(value="/ping/{tag}", produces="text/plain")
@ResponseBody
public String pingTag(@PathVariable("tag") String tag) {
System.out.println(tag);
pingService.insert(tag);
return "Ping tag '" + tag + "' has been inserted. ";
}
@RequestMapping(value="/pings", produces="text/plain")
@ResponseBody
public String pings() {
List<Map<String, Object>> result = pingService.findAllPings();
if (result.size() == 0)
return "No record found.";
StringBuilder sb = new StringBuilder();
for (Map<String, Object> row : result) {
sb.append("Ping" + row).append("\n");
}
return sb.toString();
}
}
schema.sql
CREATE TABLE PING (
ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
TAG VARCHAR(1024) NOT NULL,
TS DATETIME NOT NULL
);
原文:
http://www.javacodegeeks.com/2013/10/getting-started-with-spring-jdbc-in-a-web-application.html
源代码:http://pan.baidu.com/share/link?shareid=99603506&uk=3878681452