Overview
In this tutorial, we show you how to create a Hibernate CRUD Restful WebService using Spring MVC 4 and Mysql DatabaseVideo Tutorials
Follow the steps mentioned below to develop this application.
Create Database
CREATE DATABASE `springrestful`;
Create Database Table
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(45) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
Project Structure
Create Maven Project
- Launch Eclipse IDE.
- Go to File-> New-> Others... Select Maven Project under Maven category then click Next.
- In New Maven Project wizard, select "Create a simpel project(skip archetype selection)" and click on Next
- In next wizard, type "springmvc_example" in the "Group ID:" field
- Type "SpringRestfulWebserviceHibernate" in the "Artifact Id:" field
- Packaging -> War
- Click Finish.
Update pom.xml to include required dependencies
Open pom.xml file and add the following dependencies in it.Configure WebApp and Hibernate
- Right click to the src folder, select New -> Package
- Enter "springmvc_example.config" in Name: field
- Click Finish
Create a WebConfig class under springmvc_example.config package and write the following code in it
package springmvc_example.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; @Configuration @EnableWebMvc @ComponentScan({"springmvc_example"}) public class WebConfig { }
Create a WebInitializer class under springmvc_example.config package and write the following code in it
package springmvc_example.config; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class[] getRootConfigClasses() { return new Class[]{ WebConfig.class }; } @Override protected Class[] getServletConfigClasses() { return null; } @Override protected String[] getServletMappings() { return new String[]{ "/" }; } }
Configure Hibernate
Create a HibernateConfig class under springmvc_example.config package and write the following code in it
package springmvc_example.config; import java.util.Properties; import javax.sql.DataSource; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.orm.hibernate4.HibernateTransactionManager; import org.springframework.orm.hibernate4.LocalSessionFactoryBean; import org.springframework.transaction.annotation.EnableTransactionManagement; @Configuration @EnableTransactionManagement @ComponentScan({ "springmvc_example.config" }) public class HibernateConfig { @Bean public LocalSessionFactoryBean sessionFactoryBean(){ LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean(); sessionFactoryBean.setDataSource(dataSource()); sessionFactoryBean.setPackagesToScan(new String[] { "springmvc_example.model" }); sessionFactoryBean.setHibernateProperties(hibernateProperties()); return sessionFactoryBean; } @Bean public DataSource dataSource(){ DriverManagerDataSource ds = new DriverManagerDataSource(); ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setUrl("jdbc:mysql://localhost:3306/springrestful"); ds.setUsername("root"); ds.setPassword("root"); return ds; } private Properties hibernateProperties(){ Properties properties = new Properties(); properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect"); properties.put("hibernate.show_sql", "true"); properties.put("hibernate.format_sql", "false"); return properties; } @Bean @Autowired public HibernateTransactionManager transactionManager(SessionFactory s){ HibernateTransactionManager txManager = new HibernateTransactionManager(); txManager.setSessionFactory(s); return txManager; } }
MySQL Database Name: springrestful
Password for MySQL: root
Username for MySQL: root
Creating Persistence Layer
Create a User class under springmvc_example.model package and write the following code in itpackage springmvc_example.model; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="user") public class User { @Id @GeneratedValue(strategy= GenerationType.IDENTITY) private int id; @Column(name="name", nullable=true) private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Creating DAO Layer
Create a UserDao Interface under springmvc_example.dao package and write the following code in itpackage springmvc_example.dao; import java.util.List; import springmvc_example.model.User; public interface UserDao { public ListgetListUser(); public void saveOrUpdate(User user); public void deleteUser(int id); public User findUserById(int id); }
Create a UserDaoImpl class implements UserDao Interface under springmvc_example.dao package and write the following code in it
package springmvc_example.dao; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import springmvc_example.model.User; @Repository public class UserDaoImpl implements UserDao { @Autowired private SessionFactory sessionFactory; protected Session getSession(){ return sessionFactory.getCurrentSession(); } @SuppressWarnings("unchecked") public ListgetListUser() { Criteria criteria = getSession().createCriteria(User.class); return (List ) criteria.list(); } public void saveOrUpdate(User user) { getSession().saveOrUpdate(user); } public void deleteUser(int id) { User user = (User) getSession().get(User.class, id); getSession().delete(user); } public User findUserById(int id) { return (User) getSession().get(User.class, id); } }
Creating Service Layer
Create a UserService Interface under package springmvc_example.service package and write the following code in itpackage springmvc_example.service; import java.util.List; import springmvc_example.model.User; public interface UserService { public ListgetListUser(); public void saveOrUpdate(User user); public void deleteUser(int id); public User findUserById(int id); }
Create a UserServiceImpl class implements UserService Interface under springmvc_example.service package and write the following code in it
import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import springmvc_example.dao.UserDao; import springmvc_example.model.User; @Service @Transactional public class UserServiceImpl implements UserService { UserDao userDao; @Autowired public void setUserDao(UserDao userDao) { this.userDao = userDao; } public ListgetListUser() { return userDao.getListUser(); } public void saveOrUpdate(User user) { userDao.saveOrUpdate(user); } public void deleteUser(int id) { userDao.deleteUser(id); } public User findUserById(int id) { return userDao.findUserById(id); } }
Creating Controller Layer
Create a UserController class under package springmvc_example.controller package and write the following code in itpackage springmvc_example.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import springmvc_example.model.User; import springmvc_example.service.UserService; @RestController public class UserController { @Autowired UserService userService; @RequestMapping(value="/user/", method=RequestMethod.GET, headers="Accept=application/json") public @ResponseBody ListgetListUser(){ List users = userService.getListUser(); return users; } @RequestMapping(value="/add/", method=RequestMethod.POST) public @ResponseBody User add(@RequestBody User user){ userService.saveOrUpdate(user); return user; } @RequestMapping(value="/update/{id}", method=RequestMethod.PUT) public @ResponseBody User update(@PathVariable("id") int id, @RequestBody User user){ user.setId(id); userService.saveOrUpdate(user); return user; } @RequestMapping(value="/delete/{id}", method=RequestMethod.DELETE) public @ResponseBody User delete(@PathVariable("id") int id){ User user = userService.findUserById(id); userService.deleteUser(id); return user; } }
Building
- Right click this project
- Select Run As -> Maven clean
- Right click this project
- Select Run As -> Maven install
Configuring Apache Tomcat
- Under Servers tab, click link "No servers are available. Click this link to create a new server ...", select Apache tomcat 7
- Click Finish
- Right click "Tomcat v7.0 Server at localhost [Stopped, Republish]", select "Add and Remove ..."
- Add SpringRestfulWebServiceHibernate project, then Click Finish
- Open server.xml file under Servers Folder
- Find line
<Context docBase="SpringRestfulWebServiceHibernate" path="/SpringRestfulWebServiceHibernate" reloadable="true" source="org.eclipse.jst.jee.server:SpringRestfulWebServiceHibernate" />
Update its as below:
<Context docBase="<Project Folder Location>\SpringRestfulWebServiceHibernate\SpringRestfulWebServiceHibernate\target\SpringRestfulWebServiceHibernate-0.0.1-SNAPSHOT\" path="/SpringRestfulWebServiceHibernate" reloadable="true" />
- Copy mysql-connector-java-5.1.45-bin.jar file to <Apache Tomcat Folder Location>\apache-tomcat-7.0.68\lib\
Watch video add Apache Tomcat Server in Eclipse IDE
Run & Check result
- Start Apache Tomcat from Eclipse IDE.
- Open Postman tool (Postman is the complete toolchain for API developers)
Add User API
Request Method: POST
URL: http://localhost:8080/SpringRestfulWebServiceHibernate/add/
Body: Type application/json
{ "name": "Test1" }
Update User API
Request Method: PUT
URL: http://localhost:8080/SpringRestfulWebServiceHibernate/update/1
Body: Type application/json
{ "name": "Test1 Updated" }
Get User API
Request Method: GET
URL: http://localhost:8080/SpringRestfulWebServiceHibernate/user/
Delete User API
Request Method: DELETE
URL: http://localhost:8080/SpringRestfulWebServiceHibernate/delete/1