Check Out Our Amazing ROADMAPS
<?xml version =" 1.0" encoding =" UTF-8" ?>
<project xmlns =" http://maven.apache.org/POM/4.0.0" xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
xsi : schemaLocation =" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" >
<modelVersion >4.0.0</modelVersion >
<parent >
<groupId >org.springframework.boot</groupId >
<artifactId >spring-boot-starter-parent</artifactId >
<version >3.0.2</version >
<relativePath /> <!-- lookup parent from repository -->
</parent >
<groupId >com.in28minutes.springboot.rest.example</groupId >
<artifactId >spring-boot-2-jdbc-with-h2</artifactId >
<version >0.0.1-SNAPSHOT</version >
<packaging >jar</packaging >
<name >spring-boot-2-jdbc-with-h2</name >
<description >Spring Boot 2, JDBC and H2 - Example Project</description >
<properties >
<java .version>17</java .version>
</properties >
<dependencies >
<dependency >
<groupId >org.springframework.boot</groupId >
<artifactId >spring-boot-starter-jdbc</artifactId >
</dependency >
<dependency >
<groupId >org.springframework.boot</groupId >
<artifactId >spring-boot-starter-web</artifactId >
</dependency >
<dependency >
<groupId >org.springframework.boot</groupId >
<artifactId >spring-boot-devtools</artifactId >
<scope >runtime</scope >
</dependency >
<dependency >
<groupId >com.h2database</groupId >
<artifactId >h2</artifactId >
<scope >runtime</scope >
</dependency >
<dependency >
<groupId >org.springframework.boot</groupId >
<artifactId >spring-boot-starter-test</artifactId >
<scope >test</scope >
</dependency >
</dependencies >
<build >
<plugins >
<plugin >
<groupId >org.springframework.boot</groupId >
<artifactId >spring-boot-maven-plugin</artifactId >
</plugin >
</plugins >
</build >
<repositories >
<repository >
<id >spring-milestones</id >
<name >Spring Milestones</name >
<url >https://repo.spring.io/milestone</url >
<snapshots >
<enabled >false</enabled >
</snapshots >
</repository >
</repositories >
<pluginRepositories >
<pluginRepository >
<id >spring-milestones</id >
<name >Spring Milestones</name >
<url >https://repo.spring.io/milestone</url >
<snapshots >
<enabled >false</enabled >
</snapshots >
</pluginRepository >
</pluginRepositories >
</project >
/src/main/java/com/in28minutes/springboot/jdbc/h2/example/SpringBoot2JdbcWithH2Application.java
package com .in28minutes .springboot .jdbc .h2 .example ;
import org .slf4j .Logger ;
import org .slf4j .LoggerFactory ;
import org .springframework .beans .factory .annotation .Autowired ;
import org .springframework .boot .CommandLineRunner ;
import org .springframework .boot .SpringApplication ;
import org .springframework .boot .autoconfigure .SpringBootApplication ;
import com .in28minutes .springboot .jdbc .h2 .example .student .Student ;
import com .in28minutes .springboot .jdbc .h2 .example .student .StudentJdbcRepository ;
@ SpringBootApplication
public class SpringBoot2JdbcWithH2Application implements CommandLineRunner {
private final Logger logger = LoggerFactory .getLogger (this .getClass ());
@ Autowired
StudentJdbcRepository repository ;
public static void main (String [] args ) {
SpringApplication .run (SpringBoot2JdbcWithH2Application .class , args );
}
@ Override
public void run (String ... args ) {
logger .info ("Student id 10001 -> {}" , repository .findById (10001L ));
logger .info ("Inserting -> {}" , repository .insert (new Student (10010L , "John" , "A1234657" )));
logger .info ("Update 10003 -> {}" , repository .update (new Student (10001L , "Name-Updated" , "New-Passport" )));
repository .deleteById (10002L );
logger .info ("All users -> {}" , repository .findAll ());
}
}
/src/main/java/com/in28minutes/springboot/jdbc/h2/example/student/Student.java
package com .in28minutes .springboot .jdbc .h2 .example .student ;
public class Student {
private Long id ;
private String name ;
private String passportNumber ;
public Student () {
super ();
}
public Student (Long id , String name , String passportNumber ) {
super ();
this .id = id ;
this .name = name ;
this .passportNumber = passportNumber ;
}
public Student (String name , String passportNumber ) {
super ();
this .name = name ;
this .passportNumber = passportNumber ;
}
public Long getId () {
return id ;
}
public void setId (Long id ) {
this .id = id ;
}
public String getName () {
return name ;
}
public void setName (String name ) {
this .name = name ;
}
public String getPassportNumber () {
return passportNumber ;
}
public void setPassportNumber (String passportNumber ) {
this .passportNumber = passportNumber ;
}
@ Override
public String toString () {
return String .format ("Student [id=%s, name=%s, passportNumber=%s]" , id , name , passportNumber );
}
}
/src/main/java/com/in28minutes/springboot/jdbc/h2/example/student/StudentJdbcRepository.java
package com .in28minutes .springboot .jdbc .h2 .example .student ;
import java .sql .ResultSet ;
import java .sql .SQLException ;
import java .util .List ;
import org .springframework .beans .factory .annotation .Autowired ;
import org .springframework .jdbc .core .BeanPropertyRowMapper ;
import org .springframework .jdbc .core .JdbcTemplate ;
import org .springframework .jdbc .core .RowMapper ;
import org .springframework .stereotype .Repository ;
@ Repository
public class StudentJdbcRepository {
@ Autowired
JdbcTemplate jdbcTemplate ;
static class StudentRowMapper implements RowMapper <Student > {
@ Override
public Student mapRow (ResultSet rs , int rowNum ) throws SQLException {
Student student = new Student ();
student .setId (rs .getLong ("id" ));
student .setName (rs .getString ("name" ));
student .setPassportNumber (rs .getString ("passport_number" ));
return student ;
}
}
public List <Student > findAll () {
return jdbcTemplate .query ("select * from student" , new StudentRowMapper ());
}
public Student findById (long id ) {
return jdbcTemplate .queryForObject ("select * from student where id=?" , new Object []{id },
new BeanPropertyRowMapper <Student >(Student .class ));
}
public void deleteById (long id ) {
jdbcTemplate .update ("delete from student where id=?" , id );
}
public int insert (Student student ) {
return jdbcTemplate .update ("insert into student (id, name, passport_number) " + "values(?, ?, ?)" ,
student .getId (), student .getName (), student .getPassportNumber ());
}
public int update (Student student ) {
return jdbcTemplate .update ("update student " + " set name = ?, passport_number = ? " + " where id = ?" ,
student .getName (), student .getPassportNumber (), student .getId ());
}
}
/src/main/resources/application.properties
# Enabling H2 Console
spring.h2.console.enabled =true
# Turn Statistics on
spring.jpa.properties.hibernate.generate_statistics =true
logging.level.org.hibernate.stat =debug
# Show all queries
spring.jpa.show-sql =true
spring.jpa.properties.hibernate.format_sql =true
logging.level.org.hibernate.type =trace
spring.datasource.url =jdbc:h2:mem:testdb
spring.data.jpa.repositories.bootstrap-mode =default
/src/main/resources/data.sql
insert into student values(10001,'Ranga', 'E1234567');
insert into student values(10002,'Ravi', 'A1234568');
/src/main/resources/schema.sql
create table student
(
id integer not null,
name varchar(255) not null,
passport_number varchar(255) not null,
primary key(id)
);
/src/test/java/com/in28minutes/springboot/jdbc/h2/example/SpringBoot2JdbcWithH2ApplicationTests.java
package com .in28minutes .springboot .jdbc .h2 .example ;
import org .junit .jupiter .api .Test ;
import org .junit .jupiter .api .extension .ExtendWith ;
import org .springframework .boot .test .context .SpringBootTest ;
import org .springframework .test .context .junit .jupiter .SpringExtension ;
@ SpringBootTest
@ ExtendWith (SpringExtension .class )
public class SpringBoot2JdbcWithH2ApplicationTests {
@ Test
public void contextLoads () {
}
}