spring-guide之spring-jdbc
创建一个关系数据的spring-jdbc
其中将使用jdk 8新特性来撸代码。mark一下java 8的IBM的新特性描述
https://www.ibm.com/developerworks/cn/java/j-lo-jdk8newfeature/
http://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html
gradle的配置
创建gradle的配置文件build.gradle、
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.0.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'
jar {
baseName = 'spring-guide'
version = '0.1.0'
}
springBoot {
mainClass = "gs.relational.data.access.Application"
}
repositories {
mavenCentral()
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
dependencies {
compile(
"org.springframework.boot:spring-boot-starter-web",
"org.springframework.boot:spring-boot-starter",
"org.springframework:spring-web",
"com.fasterxml.jackson.core:jackson-databind",
//gs.relational.data.access鍔犲叆
"org.springframework:spring-jdbc",
"com.h2database:h2",
"junit:junit"
)
testCompile('org.springframework.boot:spring-boot-starter-test')
}
代码实现
目标根据first_name查出该数据的last_name。其中数据库是h2database内存test版本。
创建gs.relational.data.access目录。
创建跟数据库的对应实体类,Customer.java
public class Customer {
private Long id;
private String firstName, lastName;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Customer(Long id, String firstName, String lastName) {
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
}
}
定义一个spring-boot启动类
@SpringBootApplication
public class Application implements CommandLineRunner {
private static final Logger log = LoggerFactory.getLogger(Application.class);
@Autowired
JdbcTemplate jdbcTemplate;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
public void run(String... args) throws Exception {
log.info("create tables");
jdbcTemplate.execute("drop table customers if exists");
jdbcTemplate.execute("create table customers(id serial, first_name varchar(265), last_name varchar(265))");
List<Object[]> splitUpNames = Arrays.asList("John Woo", "Jeff Dean", "Josh Long")
.stream().map(name -> name.split(" "))
.collect(Collectors.toList());
log.info(String.format("splitUpNames: %s", splitUpNames.get(0)));
splitUpNames.forEach(name -> log.info(String.format("insert customer record fo %s %s", name[0], name[1])));
// splitUpNames.forEach(name -> log.info(String.format("Inserting customer record for %s %s", name[0], name[1])));
jdbcTemplate.batchUpdate("insert into customers(first_name, last_name) values (?,?)", splitUpNames);
log.info("query for customer records where first_name is Josh");
jdbcTemplate.query("select id, first_name, last_name from customers where first_name = ?",
new Object[] {"Josh"}, (rs, rowNum) -> new Customer(rs.getLong("id"), rs.getString("first_name"), rs.getString("last_name"))
).forEach(customer -> log.info(customer.toString()));
}
}
其中用到的java8的新特性,参考IBM的描述
https://www.ibm.com/developerworks/cn/java/j-lo-jdk8newfeature/
http://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html
编译并运行
gradlew build;
java -jar build/libs/spring-guide-0.1.0.jar
2016-09-24 00:18:58.189 INFO 10300 --- [ main] gs.relational.data.access.Application : create tables
2016-09-24 00:18:58.258 INFO 10300 --- [ main] gs.relational.data.access.Application : splitUpNames: John
2016-09-24 00:18:58.273 INFO 10300 --- [ main] gs.relational.data.access.Application : insert customer record fo John Woo
2016-09-24 00:18:58.300 INFO 10300 --- [ main] gs.relational.data.access.Application : insert customer record fo Jeff Dean
2016-09-24 00:18:58.305 INFO 10300 --- [ main] gs.relational.data.access.Application : insert customer record fo Josh Long
2016-09-24 00:18:58.379 INFO 10300 --- [ main] gs.relational.data.access.Application : query for customer records where first_name is Josh
2016-09-24 00:18:58.388 INFO 10300 --- [ main] gs.relational.data.access.Application : gs.relational.data.access.Customer@3a079870