В этом посте будет показано, как создать приложение для зачисления студентов с использованием базы данных MYSQL с платформой MyBatis в среде Spring. Это простое приложение, которое предназначено для сбора входных данных от пользователя во время регистрации, сохранения данных в базе данных MYSQL и аутентификации при входе.
1. Создание проекта веб-приложения Java с использованием шаблона Maven
Для начала в IDE создайте проект Java Maven с шаблоном maven-archetype-webapp (отфильтруйте каталог на основе строки «webapp»), указав соответствующие значения для GroupId и Artifact Id для проекта. Пример структуры каталогов веб-приложения показан ниже со стандартным дескриптором развертывания web.xml и Maven pom.xml.
2. Обновите pom.xml
Чтобы вышеуказанный проект Maven Java Web Application поддерживал инфраструктуру MyBatis, добавьте следующие зависимости в существующий файл pom.xml:
- mybatis (для поддержки MyBatis)
- mybatis-spring (для поддержки интеграции MyBatis-Spring)
- jstl, spring-webmvc, servlet-api и spring-context-support (для поддержки Spring)
- Spring-Test (может быть необязательным, если требуется поддержка Spring-Test)
- mysql-connector-java (для поддержки MYSQL)
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.1.1</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>3.1.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>3.1.1.RELEASE</version> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.2.4.RELEASE</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> |
3. Изменить web.xml
Измените содержимое файла web.xml, включив в него следующее:
- Сервлет и указать расположение файла конфигурации для того же. В этом примере файл конфигурации с именем springConfig.xml создается в папке WEB-INF / config в макете проекта.
- Отображение сервлета для сопоставления сервлета, созданного на предыдущем шаге, который должен вызываться, когда клиент указывает URL-адрес, соответствующий шаблону URL-адреса.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><servlet> <servlet-name>myBatisServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/config/springConfig.xml</param-value> </init-param></servlet><servlet-mapping> <servlet-name>myBatisServlet</servlet-name> <url-pattern>*.html</url-pattern></servlet-mapping> <display-name>Archetype Created Web Application</display-name></web-app> |
4. Создайте файл конфигурации Spring
Создайте файл конфигурации Spring Bean в папке WEB-INF / config. Если STS (Spring Tool Suite) является IDE, включите пространство имен context, mvc и tx. SpringConfig.xml будет таким, как показано ниже
|
01
02
03
04
05
06
07
08
09
10
11
12
|
<?xml version="1.0" encoding="UTF-8"?> xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"></beans> |
После включения необходимых пространств имен добавьте следующее (между тегами <beans> и </ beans>), чтобы указать, что приложение управляется аннотациями и является базовым пакетом для сканирования компонента контекста.
|
1
2
3
|
<mvc:annotation-driven /><context:component-scan base-package="com.github.elizabetht" /> |
Включите bean-компонент InternalResourceViewResolver для Spring, чтобы найти файлы jsp
|
1
2
3
4
|
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /></bean> |
Включите bean-компонент для источника данных, где можно указать свойства базы данных MYSQL, такие как url, имя пользователя и пароль. Замените <include connection url> фактическим URL-адресом соединения для подключения к базе данных MYSQL. Аналогичным образом замените <include username> и <include password> действительными значениями имени пользователя и пароля.
|
1
2
3
4
5
6
|
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql//<include connection url>:3306/studentEnrollment?autoReconnect=true&createDatabaseIfNotExist=true&" /> <property name="username" value="<include username>" /> <property name="password" value="<include password>" /></bean> |
Включите компонент для диспетчера транзакций для определения объема / управления транзакциями, который принимает источник данных, определенный выше, как справочный (зависимый)
|
1
2
3
4
|
<tx:annotation-driven transaction-manager="transactionManager" /><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /></bean> |
Переходя к конкретным конфигурациям MyBatis, включите компонент для sqlSessionFactory, который является центральной конфигурацией в приложении MyBatis. Этот bean-компонент принимает три свойства — dataSource (уже настроенный выше) — typeAliasesPackage (расположение, в котором находятся классы модели этого приложения) — mapperLocations (расположение, в котором находятся XML-файлы mapper для модели — здесь это не нужно, поскольку конфигурации на основе аннотаций используется вместо)
Более подробную информацию об этом можно прочитать на http://mybatis.github.io/mybatis-3/
|
1
2
3
4
5
|
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="typeAliasesPackage" value="com.github.elizabetht.model"/> <property name="mapperLocations" value="classpath*:com/github/elizabetht/mappers/*.xml" /></bean> |
Включить бин для sqlSession
|
1
2
3
|
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory" /></bean> |
Затем, наконец, включите компонент для MapperScannerConfigurer
|
1
2
3
|
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.github.elizabetht.mappers" /></bean> |
5. Создайте файлы JSP для регистрации / входа ученика
Создайте папку с именем «jsp» в WEB-INF (именно здесь будут созданы файлы jsp, как указано в springConfig.xml для bean-компонента InternalResourceViewResolver).
Создайте файл signup.jsp, чтобы включить форму для получения данных ввода, таких как Имя пользователя, Пароль, Имя, Фамилия, ДатаOfBirth и Адрес электронной почты студента. Снимок страницы регистрации выглядит следующим образом:
Затем создайте файл login.jsp для включения формы с именами пользователей и паролями. Снимок страницы входа в систему выглядит следующим образом:
Также создайте success.jsp, чтобы указать успешный вход в систему, и fail.jsp, чтобы указать сбой входа в систему (это просто страницы, используемые для отображения содержимого — логика обработки не используется).
Это приложение использует Twitter начальной загрузки http://getbootstrap.com/ и http://bootswatch.com/united/ в качестве таблиц стилей. Он также использует таблицу стилей DatePicker, чтобы открыть календарь для поля DateOfBirth на странице регистрации ученика ( http://www.eyecon.ro/bootstrap-datepicker/ ).
Ссылочную ссылку на файлы в папке webapp этого приложения можно найти по адресу https://github.com/elizabetht/StudentEnrollmentWithMyBatis/tree/master/src/main/webapp.
6. Создайте пакеты для контроллера, модели, сервиса и картографов
Создайте пакеты для классов Spring Controller, Model и Service в папке src / main / java. Также создайте пакет для класса MyBatis Mapper в той же папке src / main / java.
Пример снимка проекта после создания пакета показан ниже:
7. Создайте классы для уровня модели
Создайте класс POJO с именем Student.java внутри пакета com.github.elizabetht.model, чтобы включить детали сущности модели Student во время регистрации. Создайте еще один класс POJO с именем StudentLogin.java внутри того же пакета com.github.elizabetht.model, чтобы включить данные для входа в систему.
Ссылочную ссылку на файлы для классов модели можно найти по адресу https://github.com/elizabetht/StudentEnrollmentWithMyBatis/tree/master/src/main/java/com/github/elizabetht/model.
8. Создайте классы для MyBatis Mapper
Mapper в инфраструктуре MyBatis аналогичен уровню репозитория в среде Spring. Грубые SQL-запросы занимают здесь свое место. Создайте интерфейсный класс с именем StudentMapper.java внутри пакета com.github.elizabetht.mapper для поддержки операций базы данных.
Для целей приложения необходимы два метода интерфейса.
- Чтобы вставить данные регистрации ученика в базу данных
- Чтобы проверить регистрационные данные студента из базы данных
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
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);} |
9. Создайте классы для уровня обслуживания
Создайте интерфейсный класс с именем StudentService.java внутри пакета com.github.elizabetht.service для поддержки операций уровня обслуживания.
|
1
2
3
4
5
|
public interface StudentService { void insertStudent(Student student); boolean getStudentByLogin(String userName, String password); boolean getStudentByUserName(String userName);} |
Создайте класс реализации уровня сервиса (действительно POJO) с именем StudentServiceImpl.java внутри пакета com.github.elizabetht.service. Именно в этом заключается логика приложения — либо для сохранения сведений об ученике в базе данных, либо для проверки (уже сохраненных) сведений об ученике из базы данных.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
@Service("studentService")public class StudentServiceImpl implements StudentService { @Autowired private StudentMapper studentMapper; @Transactional public void insertStudent(Student student) { studentMapper.insertStudent(student); } public boolean getStudentByLogin(String userName, String password) { Student student = studentMapper.getStudentByUserName(userName); if(student != null && student.getPassword().equals(password)) { return true; } return false; } public boolean getStudentByUserName(String userName) { Student student = studentMapper.getStudentByUserName(userName); if(student != null) { return true; } return false; }} |
При использовании MyBatis с Spring, картограф может быть непосредственно введен в уровень сервиса. Это, наверное, самая сильная сторона весенней интеграции MyBatis. Это единственный известный мне инструмент, который позволяет создавать приложение без импорта в него.
@EduardoMacarron twitter.com/EduardoMacarron/…
10. Создайте класс для уровня контроллера
Создайте класс POJO уровня контроллера с именем StudentController.java внутри пакета com.github.elizabetht.controller. Именно здесь идет логика маршрутизации приложения — вызывается ли действие регистрации или входа в систему.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
@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(@ModelAttribute("student") Student student, Model 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) { boolean found = studentService.getStudentByLogin(studentLogin.getUserName(), studentLogin.getPassword()); if (found) { return "success"; } else { return "failure"; } }} |
11. Создайте схему БД в базе данных MYSQL.
Подключитесь к базе данных MySQL, которая будет использоваться для этого приложения, и создайте новую схему базы данных с именем studentEnrollment с помощью MySQL Workbench. Это необходимо, поскольку имя схемы БД studentEnrollment указывается в bean-компоненте dataSource в springConfig.xml.
После создания схемы DB studentEnrollment создайте таблицу с именем student внутри схемы DB, используя инструкцию CREATE TABLE следующим образом:
|
01
02
03
04
05
06
07
08
09
10
|
CREATE TABLE `student` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `dateOfBirth` datetime NOT NULL, `emailAddress` varchar(255) NOT NULL, `firstName` varchar(255) NOT NULL, `lastName` varchar(255) NOT NULL, `password` varchar(8) NOT NULL, `userName` varchar(20) NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=latin1; |
12. Развертывание приложения на сервере Tomcat
После выполнения вышеуказанных шагов и успешного создания проекта веб-приложение Java готово к развертыванию на сервере Tomcat 7.
Веб-приложение Java можно развернуть локально, щелкнув правой кнопкой мыши по проекту и выбрав опцию «Запуск от имени -> Запуск на сервере».
То же самое можно развернуть удаленно на любом собственном сервере, который поддерживает Tomcat, скопировав файл WAR (щелкните правой кнопкой мыши по проекту и выберите «Экспортировать как файл WAR») в папку / var / lib / tomcat7 (или соответствующий каталог tomcat) и перезапустите tomcat. сервер.
Это приложение доступно для демонстрации здесь: http://ec2-23-20-137-135.compute-1.amazonaws.com:8080/StudentEnrollmentWithMyBatis/
13. Клонировать или скачать код
Если вы используете git, клонируйте копию этого проекта здесь: https://github.com/elizabetht/StudentEnrollmentWithMyBatis.git
Если вы не используете git, загрузите проект в виде файла ZIP или tar.gz здесь: https://github.com/elizabetht/StudentEnrollmentWithMyBatis/releases/tag/1.7



