Please go through the first part of this tutorial to set up your dropwizard project. For this project, we will assume you have a working dropwizard project.
Add dependency to your pom.xml
Please add dependency of hibernate and mySQL-connector to your pom.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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> | |
<groupId>com.wordpress.nullpointerexception1</groupId> | |
<artifactId>myRestProject</artifactId> | |
<version>1.0-SNAPSHOT</version> | |
<properties> | |
<dropwizard.version>1.3.5</dropwizard.version> | |
</properties> | |
<dependencies> | |
<dependency> | |
<groupId>io.dropwizard</groupId> | |
<artifactId>dropwizard-core</artifactId> | |
<version>${dropwizard.version}</version> | |
</dependency> | |
<dependency> | |
<groupId>mysql</groupId> | |
<artifactId>mysql-connector-java</artifactId> | |
<version>5.1.36</version> | |
</dependency> | |
<dependency> | |
<groupId>io.dropwizard</groupId> | |
<artifactId>dropwizard-hibernate</artifactId> | |
<version>${dropwizard.version}</version> | |
</dependency> | |
</dependencies> | |
</project> |
Create Info Table in MySql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CREATE TABLE `info` ( | |
`name` varchar(50) NOT NULL DEFAULT '', | |
`empid` varchar(50) NOT NULL DEFAULT '', | |
PRIMARY KEY (`empid`) | |
) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
Add some content to your table. In my case, table content should look like:
Add Info Model
Add Info.java in src/main/java. Your info.java should look like:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package models; | |
import lombok.Data; | |
import javax.persistence.*; | |
/** | |
* Created by harshvardhan on 10/07/18. | |
*/ | |
@Entity | |
@Table(name = "info") | |
@NamedQueries({ | |
@NamedQuery(name = "com.wordpress.nullpointerexception1.info.findAll", | |
query = "select e from Info e") | |
}) | |
public class Info { | |
@Column(name = "name") | |
private String name; | |
@Id | |
@Column(name = "empid") | |
private String empid; | |
public String getName() { | |
return name; | |
} | |
public void setName(String name) { | |
this.name = name; | |
} | |
public String getEmpid() { | |
return empid; | |
} | |
public void setEmpid(String empid) { | |
this.empid = empid; | |
} | |
} |
Add InfoDao
Add InfoDao.java in src/main/java. Your info.java should look like:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import io.dropwizard.hibernate.AbstractDAO; | |
import org.hibernate.SessionFactory; | |
import java.util.List; | |
/** | |
* Created by harshvardhan on 10/07/18. | |
*/ | |
public class InfoDao extends AbstractDAO<Info> { | |
public InfoDao(SessionFactory factory) { | |
super(factory); | |
} | |
public List<Info> findAll() { | |
return list(namedQuery("com.wordpress.nullpointerexception1.info.findAll")); | |
} | |
} |
Add Database Configuration
Update Configuration.java and dev.yml, it should look like the files below:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.fasterxml.jackson.annotation.JsonProperty; | |
import io.dropwizard.Configuration; | |
import io.dropwizard.db.DataSourceFactory; | |
/** | |
* Created by harshvardhan on 12/07/18. | |
*/ | |
public class MyConfiguration extends Configuration { | |
private String url; | |
private DataSourceFactory database = new DataSourceFactory(); | |
public String getUrl() { | |
return url; | |
} | |
public void setUrl(String url) { | |
this.url = url; | |
} | |
@JsonProperty("database") | |
public DataSourceFactory getDataSourceFactory() { | |
return database; | |
} | |
} |
Add following properties to dev.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
url: https://nullpointerexception1.wordpress.com/ | |
database: | |
# the name of the JDBC driver, mysql in our case | |
driverClass: com.mysql.jdbc.Driver | |
# the username | |
user: root | |
#user: root | |
# the password | |
password: welcome | |
#password: | |
# the JDBC URL; the database is called DWGettingStarted | |
url: jdbc:mysql://localhost:3306/<YOUR_DB_NAME> | |
properties: | |
charSet: UTF-8 |
Add API to display all the Employees
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.codahale.metrics.annotation.Timed; | |
import io.dropwizard.hibernate.UnitOfWork; | |
import javax.ws.rs.GET; | |
import javax.ws.rs.POST; | |
import javax.ws.rs.Path; | |
import java.util.List; | |
/** | |
* Created by harshvardhan on 12/07/18. | |
*/ | |
@Path("/resource") | |
@Produces(MediaType.APPLICATION_JSON) | |
public class MyResource { | |
private InfoDao infoDao; | |
public MyResource(InfoDao infoDao) { | |
this.infoDao = infoDao; | |
} | |
@GET | |
@Timed | |
@Path("/getName") | |
public String getName() { | |
return "Harsh"; | |
} | |
@POST | |
@Timed | |
@Path("/postName") | |
public String postName(String name) { | |
System.out.println("Name given by : "+name); | |
return "Ok"; | |
} | |
@GET | |
@Timed | |
@UnitOfWork | |
@Path("/findAllEmp") | |
public List<Info> findAllEmp() { | |
System.out.println("All Emp : "+infoDao.findAll()); | |
return infoDao.findAll(); | |
} | |
} |
Update MyApplication.java to register hibernate
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import io.dropwizard.Application; | |
import io.dropwizard.db.DataSourceFactory; | |
import io.dropwizard.hibernate.HibernateBundle; | |
import io.dropwizard.setup.Bootstrap; | |
import io.dropwizard.setup.Environment; | |
/** | |
* Created by harshvardhan on 12/07/18. | |
*/ | |
public class MyApplication extends Application<MyConfiguration> { | |
public static void main(String[] args) throws Exception { | |
new MyApplication().run(args); | |
} | |
public void run(MyConfiguration myConfiguration, Environment environment) throws Exception { | |
System.out.println("Value from dev.yml is "+myConfiguration.getDataSourceFactory().getUser()); | |
InfoDao infoDao = new InfoDao(hibernate.getSessionFactory()); | |
final MyResource resource = new MyResource(infoDao); | |
environment.jersey().register(resource); | |
} | |
private HibernateBundle<MyConfiguration> hibernate = new HibernateBundle<MyConfiguration>(Info.class) { | |
@Override | |
public DataSourceFactory getDataSourceFactory(MyConfiguration configuration) { | |
return configuration.getDataSourceFactory(); | |
} | |
}; | |
@Override | |
public String getName() { | |
return "dropwizard-hibernate"; | |
} | |
@Override | |
public void initialize(Bootstrap<MyConfiguration> bootstrap) { | |
bootstrap.addBundle(hibernate); | |
} | |
} |