diff --git a/spring-mybatis/pom.xml b/spring-mybatis/pom.xml
new file mode 100644
index 0000000000..b0eaab5b3a
--- /dev/null
+++ b/spring-mybatis/pom.xml
@@ -0,0 +1,62 @@
+
+ 4.0.0
+ com.baeldung
+ spring-mybatis
+ jar
+ 0.0.1-SNAPSHOT
+ spring-mybatis Maven Webapp
+ http://maven.apache.org
+
+
+ org.mybatis
+ mybatis
+ 3.1.1
+
+
+ org.mybatis
+ mybatis-spring
+ 1.1.1
+
+
+ org.springframework
+ spring-context-support
+ 3.1.1.RELEASE
+
+
+ org.springframework
+ spring-test
+ 3.1.1.RELEASE
+ test
+
+
+ mysql
+ mysql-connector-java
+ 5.1.40
+
+
+ javax.servlet
+ jstl
+ 1.2
+
+
+ org.springframework
+ spring-webmvc
+ 3.2.4.RELEASE
+
+
+ javax.servlet
+ servlet-api
+ 2.5
+
+
+ junit
+ junit
+ 3.8.1
+ test
+
+
+
+ spring-mybatis
+
+
diff --git a/spring-mybatis/src/main/java/com/baeldung/spring/mybatis/application/SpringMyBatisApplication.java b/spring-mybatis/src/main/java/com/baeldung/spring/mybatis/application/SpringMyBatisApplication.java
new file mode 100644
index 0000000000..acfaff2669
--- /dev/null
+++ b/spring-mybatis/src/main/java/com/baeldung/spring/mybatis/application/SpringMyBatisApplication.java
@@ -0,0 +1,48 @@
+package com.baeldung.spring.mybatis.application;
+
+import java.util.Date;
+
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import com.baeldung.spring.mybatis.model.Student;
+import com.baeldung.spring.mybatis.service.StudentService;
+
+public class SpringMyBatisApplication {
+
+ public static void main(String[] args){
+ ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("mybatis-spring.xml");
+
+ StudentService studentService = (StudentService) ctx.getBean("studentService");
+ Student student = new Student();
+ student.setFirstName("Santosh");
+ student.setLastName("B S");
+ student.setEmailAddress("santosh.bse@gmail.com");
+ student.setPassword("Test123");
+ student.setDateOfBirth(new Date());
+ student.setUserName("santoshbs1");
+
+ boolean result = studentService.insertStudent(student);
+ if(result){
+ System.out.println("Student record saved successfully");
+ }
+ else{
+ System.out.println("Encountered an error while saving student data");
+ }
+
+ final String userName = "santosh";
+ Student matchingStudent = studentService.getStudentByUserName(userName);
+ if(matchingStudent == null){
+ System.out.println("No matching student found for User Name - " + userName);
+ }
+ else{
+ System.out.println("Student Details are as follows : ");
+ System.out.println("First Name : " + matchingStudent.getFirstName());
+ System.out.println("Last Name : " + matchingStudent.getLastName());
+ System.out.println("EMail : " + matchingStudent.getEmailAddress());
+ System.out.println("DOB : " + matchingStudent.getDateOfBirth());
+ System.out.println("User Name : " + matchingStudent.getUserName());
+ }
+
+ }
+
+}
diff --git a/spring-mybatis/src/main/java/com/baeldung/spring/mybatis/controller/StudentController.java b/spring-mybatis/src/main/java/com/baeldung/spring/mybatis/controller/StudentController.java
new file mode 100644
index 0000000000..427613f23f
--- /dev/null
+++ b/spring-mybatis/src/main/java/com/baeldung/spring/mybatis/controller/StudentController.java
@@ -0,0 +1,60 @@
+package com.baeldung.spring.mybatis.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.SessionAttributes;
+
+import com.baeldung.spring.mybatis.model.Student;
+import com.baeldung.spring.mybatis.model.StudentLogin;
+import com.baeldung.spring.mybatis.service.StudentService;
+
+@Controller
+@SessionAttributes("student")
+public class StudentController {
+
+ @Autowired
+ private StudentService studentService;
+
+ @RequestMapping(value = "/signup", method = RequestMethod.GET)
+ public String signup(Model model) {
+ Student student = new Student();
+ model.addAttribute("student", student);
+ return "signup";
+ }
+
+ @RequestMapping(value = "/signup", method = RequestMethod.POST)
+ public String signup(@Validated @ModelAttribute("student") Student student, BindingResult result, ModelMap model) {
+ if (studentService.getStudentByUserName(student.getUserName())) {
+ model.addAttribute("message", "User Name exists. Try another user name");
+ return "signup";
+ } else {
+ studentService.insertStudent(student);
+ model.addAttribute("message", "Saved student details");
+ return "redirect:login.html";
+ }
+ }
+
+ @RequestMapping(value = "/login", method = RequestMethod.GET)
+ public String login(Model model) {
+ StudentLogin studentLogin = new StudentLogin();
+ model.addAttribute("studentLogin", studentLogin);
+ return "login";
+ }
+
+ @RequestMapping(value = "/login", method = RequestMethod.POST)
+ public String login(@ModelAttribute("studentLogin") StudentLogin studentLogin, BindingResult result, ModelMap model) {
+ boolean found = studentService.getStudentByLogin(studentLogin.getUserName(), studentLogin.getPassword());
+ if (found) {
+ return "success";
+ } else {
+ return "failure";
+ }
+ }
+}
\ No newline at end of file
diff --git a/spring-mybatis/src/main/java/com/baeldung/spring/mybatis/mappers/StudentMapper.java b/spring-mybatis/src/main/java/com/baeldung/spring/mybatis/mappers/StudentMapper.java
new file mode 100644
index 0000000000..cf3584f7b1
--- /dev/null
+++ b/spring-mybatis/src/main/java/com/baeldung/spring/mybatis/mappers/StudentMapper.java
@@ -0,0 +1,19 @@
+package com.baeldung.spring.mybatis.mappers;
+
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Options;
+import org.apache.ibatis.annotations.Select;
+
+import com.baeldung.spring.mybatis.model.Student;
+
+public interface StudentMapper {
+ @Insert("INSERT INTO student(userName, password, firstName,lastName, dateOfBirth, emailAddress) VALUES"
+ + "(#{userName},#{password}, #{firstName}, #{lastName}, #{dateOfBirth}, #{emailAddress})")
+ @Options(useGeneratedKeys = true, keyProperty = "id", flushCache = true, keyColumn = "id")
+ public void insertStudent(Student student);
+
+ @Select("SELECT USERNAME as userName, PASSWORD as password, FIRSTNAME as firstName, LASTNAME as lastName, "
+ + "DATEOFBIRTH as dateOfBirth, EMAILADDRESS as emailAddress " + "FROM student WHERE userName = #{userName}")
+ public Student getStudentByUserName(String userName);
+
+}
\ No newline at end of file
diff --git a/spring-mybatis/src/main/java/com/baeldung/spring/mybatis/model/Student.java b/spring-mybatis/src/main/java/com/baeldung/spring/mybatis/model/Student.java
new file mode 100644
index 0000000000..f33dd44f72
--- /dev/null
+++ b/spring-mybatis/src/main/java/com/baeldung/spring/mybatis/model/Student.java
@@ -0,0 +1,55 @@
+package com.baeldung.spring.mybatis.model;
+
+import java.util.Date;
+
+public class Student {
+ private Long id;
+ private String userName;
+ private String firstName;
+ private String lastName;
+ private String password;
+ private String emailAddress;
+ private Date dateOfBirth;
+ public Long getId() {
+ return id;
+ }
+ public void setId(Long id) {
+ this.id = id;
+ }
+ public String getUserName() {
+ return userName;
+ }
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+ 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 String getPassword() {
+ return password;
+ }
+ public void setPassword(String password) {
+ this.password = password;
+ }
+ public String getEmailAddress() {
+ return emailAddress;
+ }
+ public void setEmailAddress(String emailAddress) {
+ this.emailAddress = emailAddress;
+ }
+ public Date getDateOfBirth() {
+ return dateOfBirth;
+ }
+ public void setDateOfBirth(Date dateOfBirth) {
+ this.dateOfBirth = dateOfBirth;
+ }
+}
diff --git a/spring-mybatis/src/main/java/com/baeldung/spring/mybatis/model/StudentLogin.java b/spring-mybatis/src/main/java/com/baeldung/spring/mybatis/model/StudentLogin.java
new file mode 100644
index 0000000000..867857b510
--- /dev/null
+++ b/spring-mybatis/src/main/java/com/baeldung/spring/mybatis/model/StudentLogin.java
@@ -0,0 +1,18 @@
+package com.baeldung.spring.mybatis.model;
+
+public class StudentLogin {
+ private String userName;
+ private String password;
+ public String getUserName() {
+ return userName;
+ }
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+ public String getPassword() {
+ return password;
+ }
+ public void setPassword(String password) {
+ this.password = password;
+ }
+}
diff --git a/spring-mybatis/src/main/java/com/baeldung/spring/mybatis/service/StudentService.java b/spring-mybatis/src/main/java/com/baeldung/spring/mybatis/service/StudentService.java
new file mode 100644
index 0000000000..d26115beee
--- /dev/null
+++ b/spring-mybatis/src/main/java/com/baeldung/spring/mybatis/service/StudentService.java
@@ -0,0 +1,9 @@
+package com.baeldung.spring.mybatis.service;
+
+import com.baeldung.spring.mybatis.model.Student;
+
+public interface StudentService {
+ public boolean insertStudent(Student student);
+ public Student getStudentByLogin(String userName, String password);
+ public Student getStudentByUserName(String userName);
+}
\ No newline at end of file
diff --git a/spring-mybatis/src/main/java/com/baeldung/spring/mybatis/service/StudentServiceImpl.java b/spring-mybatis/src/main/java/com/baeldung/spring/mybatis/service/StudentServiceImpl.java
new file mode 100644
index 0000000000..538e650482
--- /dev/null
+++ b/spring-mybatis/src/main/java/com/baeldung/spring/mybatis/service/StudentServiceImpl.java
@@ -0,0 +1,40 @@
+package com.baeldung.spring.mybatis.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.baeldung.spring.mybatis.mappers.StudentMapper;
+import com.baeldung.spring.mybatis.model.Student;
+
+@Service("studentService")
+public class StudentServiceImpl implements StudentService {
+
+ @Autowired
+ private StudentMapper studentMapper;
+
+ @Transactional
+ public boolean insertStudent(Student student) {
+ boolean result=false;
+ try{
+ studentMapper.insertStudent(student);
+ result = true;
+ }
+ catch(Exception ex){
+ ex.printStackTrace();
+ result = false;
+ }
+ return result;
+ }
+
+ public Student getStudentByLogin(String userName, String password) {
+ Student student = studentMapper.getStudentByUserName(userName);
+ return student;
+ }
+
+ public Student getStudentByUserName(String userName) {
+ Student student = studentMapper.getStudentByUserName(userName);
+ return student;
+ }
+
+}
diff --git a/spring-mybatis/src/main/resources/mybatis-spring.xml b/spring-mybatis/src/main/resources/mybatis-spring.xml
new file mode 100644
index 0000000000..9f5bab3247
--- /dev/null
+++ b/spring-mybatis/src/main/resources/mybatis-spring.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-mybatis/src/main/webapp/WEB-INF/conf/mybatis-spring.xml b/spring-mybatis/src/main/webapp/WEB-INF/conf/mybatis-spring.xml
new file mode 100644
index 0000000000..c8b686358c
--- /dev/null
+++ b/spring-mybatis/src/main/webapp/WEB-INF/conf/mybatis-spring.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-mybatis/src/main/webapp/WEB-INF/jsp/failure.jsp b/spring-mybatis/src/main/webapp/WEB-INF/jsp/failure.jsp
new file mode 100644
index 0000000000..66f16d4e09
--- /dev/null
+++ b/spring-mybatis/src/main/webapp/WEB-INF/jsp/failure.jsp
@@ -0,0 +1,36 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+
+
+
+
+
+Login Failure
+
+
+
+
+
+
+
+
Student Enrollment Login failure
+
+
+
+
+ Oh snap! Something is wrong. Change a few things up
+ and try submitting again.
+
+
+
+
+
+
+ ">Try
+ again?
+
+
\ No newline at end of file
diff --git a/spring-mybatis/src/main/webapp/WEB-INF/jsp/login.jsp b/spring-mybatis/src/main/webapp/WEB-INF/jsp/login.jsp
new file mode 100644
index 0000000000..5a895bb348
--- /dev/null
+++ b/spring-mybatis/src/main/webapp/WEB-INF/jsp/login.jsp
@@ -0,0 +1,81 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
+
+
+
+
+
+
+
+Student Login
+
+
+
+
+
+
+
+
Welcome to Online Student Enrollment Application
+
Login to explore the complete features!
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-mybatis/src/main/webapp/WEB-INF/jsp/signup.jsp b/spring-mybatis/src/main/webapp/WEB-INF/jsp/signup.jsp
new file mode 100644
index 0000000000..bc628862f3
--- /dev/null
+++ b/spring-mybatis/src/main/webapp/WEB-INF/jsp/signup.jsp
@@ -0,0 +1,130 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+
+
+
+
+
+Student Signup
+
+
+
+
+
+
+
+
+
+
+
Welcome to Online Student Enrollment Application
+
Login to explore the complete features!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-mybatis/src/main/webapp/WEB-INF/jsp/success.jsp b/spring-mybatis/src/main/webapp/WEB-INF/jsp/success.jsp
new file mode 100644
index 0000000000..7ae37bc241
--- /dev/null
+++ b/spring-mybatis/src/main/webapp/WEB-INF/jsp/success.jsp
@@ -0,0 +1,35 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+
+
+
+
+Login Success
+
+
+
+
+
+
+
+
+
Student Enrollment Login success
+
+
+
+
+ Well done! You successfully logged-into the system.
+ Now you can explore the complete features!
+
+
+
+
+
+ ">Login
+ as different user?
+
+
\ No newline at end of file
diff --git a/spring-mybatis/src/main/webapp/WEB-INF/lib/mysql-connector-java-5.1.40-bin.jar b/spring-mybatis/src/main/webapp/WEB-INF/lib/mysql-connector-java-5.1.40-bin.jar
new file mode 100644
index 0000000000..60bef5cfbf
Binary files /dev/null and b/spring-mybatis/src/main/webapp/WEB-INF/lib/mysql-connector-java-5.1.40-bin.jar differ
diff --git a/spring-mybatis/src/main/webapp/WEB-INF/web.xml b/spring-mybatis/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000000..569b5ef9b1
--- /dev/null
+++ b/spring-mybatis/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,21 @@
+
+
+
+
+ myBatisSpringServlet
+ org.springframework.web.servlet.DispatcherServlet
+
+ contextConfigLocation
+ /WEB-INF/conf/mybatis-spring.xml
+
+
+
+
+ myBatisSpringServlet
+ *.html
+
+
+ MyBatis-Spring Integration
+
\ No newline at end of file
diff --git a/spring-mybatis/src/main/webapp/index.jsp b/spring-mybatis/src/main/webapp/index.jsp
new file mode 100644
index 0000000000..b60222e7de
--- /dev/null
+++ b/spring-mybatis/src/main/webapp/index.jsp
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
Welcome to Online Student Enrollment Application
+
Login to explore the complete features!
+
+
+
+
+
+
+
+
\ No newline at end of file