这篇文章将展示如何在Spring环境中使用带有MyBatis框架的MYSQL DB创建学生注册应用程序。 这是一个简单的应用程序,旨在在注册期间从用户收集输入详细信息,将详细信息保存在MYSQL DB中,并在登录期间对它们进行身份验证。
1.使用Maven模板创建Java Web应用程序项目
首先,在IDE中,通过为项目的GroupId和Artifact Id提供适当的值,使用maven-archetype-webapp模板创建Java Maven项目(基于字符串“ webapp”过滤目录)。 下面显示了示例Web应用程序目录结构,其中包含标准部署描述符web.xml和Maven pom.xml。
2.更新pom.xml
为了使上述Maven Java Web应用程序项目支持MyBatis框架,请将以下依赖项添加到现有pom.xml中:
- mybatis(用于MyBatis支持)
- mybatis-spring(用于MyBatis-Spring集成支持)
- jstl,spring-webmvc,servlet-api和spring-context-support(用于Spring支持)
- Spring测试(如果需要Spring测试支持,则可以是可选的)
- mysql-connector-java(用于MYSQL支持)
<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的内容以包括以下内容:
- 一个servlet,并为其指定配置文件的位置。 在此示例中,在项目布局的WEB-INF / config文件夹下创建了一个名为springConfig.xml的配置文件。
- Servlet映射,以映射在上一步中创建的servlet,当客户端指定与url模式匹配的url时应调用该servlet。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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配置文件
在文件夹WEB-INF / config下创建一个Spring Bean配置文件。 如果STS(Spring Tool Suite)是IDE,请继续启用context,mvc和tx命名空间。 springConfig.xml将如下所示
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
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/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
</beans>
启用所需的名称空间后,包括以下内容(在<beans>和</ beans>标记之间),以指示该应用程序是注释驱动的,并且是上下文组件扫描的基本包。
<mvc:annotation-driven />
<context:component-scan base-package="com.github.elizabetht" />
包括Spring的bean InternalResourceViewResolver以查找jsp文件
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
包括用于数据源的bean,可以在其中指定MYSQL DB的属性,例如url,用户名和密码。 将<include connection url>替换为用于连接到MYSQL DB的实际连接URL。 同样,将<include username>和<include password>替换为实际的用户名和密码值。
<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>
包括用于事务管理器的Bean,以进行范围界定/控制事务,它将上面定义的数据源作为参考(从属)
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
谈到MyBatis的特定配置,包括sqlSessionFactory的bean,它是MyBatis应用程序中的中央配置。 该bean具有三个属性– dataSource(已在上面配置)– typeAliasesPackage(此应用程序的模型类所在的位置)– mapperLocations(该模型的映射器xml文件所在的位置)–在此不需要,因为基于注释的配置是代替使用)
有关更多详细信息,请参见http://mybatis.github.io/mybatis-3/
<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的bean
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
接下来,最后,包含用于MapperScannerConfigurer的bean
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.github.elizabetht.mappers" />
</bean>
5.创建用于学生注册/登录的JSP文件
在WEB-INF下创建一个名为“ jsp”的文件夹(在该文件夹中,如用于InternalResourceViewResolver bean的springConfig.xml中所示创建jsp文件)。
创建一个文件signup.jsp以包含一个表单,以获取输入详细信息,例如学生的UserName,Password,FirstName,LastName,DateOfBirth和EmailAddress。 注册页面的快照如下:
接下来,创建一个文件login.jsp以包含带有用户名和密码的表单。 登录页面的快照如下:
还要创建success.jsp来指示登录成功,并创建failure.jsp来指示登录失败(这些只是用于显示内容的页面-不涉及处理逻辑)。
此应用程序使用twitter bootstrap http://getbootstrap.com/和http://bootswatch.com/united/作为样式表。 它还使用日期选择器样式表在“学生注册”页面( http://www.eyecon.ro/bootstrap-datepicker/ )中为DateOfBirth字段弹出日历。
可以在https://github.com/elizabetht/StudentEnrollmentWithMyBatis/tree/master/src/main/webapp中找到此应用程序的webapp文件夹下的文件的参考链接。
6.为Controller,Model,Service和Mappers创建程序包
在src / main / java文件夹下为Spring Controller,Model和Service类分别创建软件包。 还要在同一src / main / java文件夹下为MyBatis Mapper类创建一个包。
包创建后的项目示例快照如下所示:
7.为模型层创建类
在包com.github.elizabetht.model内创建一个名为Student.java的POJO类,以在注册过程中包含Student模型实体的详细信息。 在同一个包com.github.elizabetht.model中创建另一个名为StudentLogin.java的POJO类,以包含Student Login详细信息。
可以在https://github.com/elizabetht/StudentEnrollmentWithMyBatis/tree/master/src/main/java/com/github/elizabetht/model中找到指向Model类文件的参考链接。
8.为MyBatis Mapper创建类
MyBatis框架中的Mapper与Spring环境中的Repository层相似。 原始SQL查询在此取代。 在包com.github.elizabetht.mapper中创建一个名为StudentMapper.java的接口类,以支持数据库操作。
为了应用程序的目的,需要两种接口方法。
- 将学生注册详细信息插入数据库
- 从数据库验证学生登录详细信息
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.创建服务层的类
在包com.github.elizabetht.service中创建一个名为StudentService.java的接口类,以支持服务层操作。
public interface StudentService {
void insertStudent(Student student);
boolean getStudentByLogin(String userName, String password);
boolean getStudentByUserName(String userName);
}
在包com.github.elizabetht.service中创建一个名为StudentServiceImpl.java的服务层实现类(实际上是POJO)。 这就是应用程序逻辑的用途–将学生的详细信息保存到数据库中,或者从数据库中验证学生的(已保存)详细信息。
@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的Spring集成的最强之处。 据我所知,这是唯一使您无需导入即可构建应用程序的工具。
@EduardoMacarron twitter.com/EduardoMacarron/...
10.创建控制器层的类
在包com.github.elizabetht.controller中创建一个名为StudentController.java的控制器层POJO类。 这就是应用程序的路由逻辑的去向–无论是调用注册还是登录操作。
@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数据库,并使用MySQL Workbench创建一个名为StudentEnrollment的新数据库架构。 这是必需的,因为在springConfig.xml的dataSource bean中指定了StudentEnrollment的数据库模式名称。
一旦创建了StudentEnrollment DB Schema,就可以使用CREATE TABLE语句在DB Schema中创建一个名为Student的表,如下所示:
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 Web应用程序部署在Tomcat Server 7上。
右键单击项目,然后选择“运行方式->在服务器上运行”选项,可以将Java Web应用程序本地部署。
通过将WAR文件(右键单击项目并选择“导出为WAR文件”选项)复制到/ var / lib / tomcat7文件夹(或适当的tomcat目录),然后重新启动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
翻译自: https://www.javacodegeeks.com/2014/02/building-java-web-application-using-mybatis-with-spring.html