使用MyBatis和Spring构建Java Web应用程序

这篇文章将展示如何在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。

mybatislayout

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.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsdhttp://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类创建一个包。

包创建后的项目示例快照如下所示:

mybatis包装

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 {@Autowiredprivate StudentMapper studentMapper;@Transactionalpublic 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 {@Autowiredprivate 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

参考:我的JCG合作伙伴 Elizabeth Thomas在My Experiments with Technology博客上使用MyBatis With Spring构建Java Web应用程序 。

翻译自: https://www.javacodegeeks.com/2014/02/building-java-web-application-using-mybatis-with-spring.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

codeforces 1136E-Nastya Hasn't Written a Legend

传送门&#xff1a;QAQQAQ 题意&#xff1a;有一个数组a和一个数组k&#xff0c;数组a一直保持一个性质&#xff1a;a[i 1] > a[i] k[i]。有两种操作&#xff1a;1&#xff0c;给某个元素加上x&#xff0c;但是加上之后要保持数组a的性质。比如a[i]加上x之后&#xff0c;a…

将Spring MVC RESTful Web服务迁移到Spring 4

1引言 Spring 4为MVC应用程序带来了一些改进 。 在这篇文章中&#xff0c;我将重点介绍宁静的Web服务&#xff0c;并通过采用Spring 3.2实现的项目并将其升级到Spring 4来尝试这些改进。以下几点总结了本文的内容&#xff1a; 从Spring 3.2迁移到Spring 4.0 变化中的Response…

java scrollpane 设置透明_java swing 之 JScrollPane(滚动面板)的使用

/*** java swing 之JScrollPane面板* 在设置界面时&#xff0c;可能会遇到在一个较小的容器窗体中显示一个较大部分的内容&#xff0c;这时可以使用* JScrollPane面板&#xff0c;JscrollPane面板是带滚动条的面板&#xff0c;也是一种容器&#xff0c;但是常用于布置单个* 控件…

软件工程(2019)第三次个人作业

目录 软件工程第三次作业问题描述分析并设计程序程序流程图选择覆盖标准并设计测试样例软件工程第三次作业 项目地址 问题描述 题目(1)&#xff1a;最大连续子数组和&#xff08;最大子段和&#xff09; 背景 问题&#xff1a; 给定n个整数&#xff08;可能为负数&#xff09;组…

Flutter - 创建侧滑菜单

侧滑菜单在安卓App里面非常常见&#xff0c;比如Gmail&#xff0c;Google Play&#xff0c;Twitter等。看下图 网上也有很多创建侧滑菜单的教程&#xff0c;我也来记录一下&#xff0c;自己学习创建Drawer的过程。 1. 创建一个空的App import package:flutter/material.dart;cl…

java框架白话_Java NIO框架Netty教程(二) 白话概念

"Hello World"的代码固然简单&#xff0c;不过其中的几个重要概念(类)和 Netty的工作原理还是需要简单明确一下&#xff0c;至少知道其是负责什。方便自己以后更灵活的使用和扩展。声明&#xff0c;笔者一介码农&#xff0c;不会那么多专业的词汇和缩写&#xff0c;只…

luogu4770 [NOI2018]你的名字 后缀自动机 + 线段树合并

其实很水的一道题吧.... 题意是&#xff1a;每次给定一个串\(T\)以及\(l, r\)&#xff0c;询问有多少个字符串\(s\)满足&#xff0c;\(s\)是\(T\)的子串&#xff0c;但不是\(S[l .. r]\)的子串 统计\(T\)本质不同的串&#xff0c;建个后缀自动机 然后自然的可以想到&#xff0c…

团队计划会议

跟航哥想了挺多要做什么&#xff0c;要完成什么&#xff0c;以什么为主要功能 提出了几个想法&#xff0c;并做了投票 最后决定一起做一个跑腿软件 最初的任务量&#xff1a; 跟航哥商量两个人一人负责两个模块 航哥负责管理员和下单 我负责接单跟其他琐碎的小功能 呐&#xff…

vue.js java php_准吗?Java程序员喜欢AngularJS,PHP程序员喜欢Vue.js!

编程语言与框架或者库之间有联系是很正常的事情&#xff0c;如果我们告诉你&#xff0c;使用某一种编程语言或技术的开发人员可能更喜欢某个框架&#xff0c;你会作何反应呢&#xff1f;Stack Overflow根据网站内最常访问的标签将开发人员分为多个组&#xff0c;并检查了每组每…

结构化日志:出错时你最想要的好朋友

目录 介绍什么是日志&#xff1f;Grab中日志的状况为什么改变&#xff1f;结构化日志支持不同格式的多写开发中类似生产环境的日志因果顺序但为什么要结构化记日志&#xff1f;原文&#xff1a;Structured Logging: The Best Friend You’ll Want When Things Go Wrong 介绍 在…

在vue项目中添加特殊字体

这里的特殊字体&#xff0c;指的是一般用户电脑未安装到本地的字体&#xff0c;要引入这样的字体&#xff0c;首先需要把字体文件下载下来。 就像上图这样的&#xff0c;ttf格式的&#xff0c;然后在项目里添加它。 然后我们在font.css里用font-face规则引入这个字体文件并命名…

使用Spring WS创建合同优先的Web服务

1引言 本文介绍了如何使用来实现和测试SOAP Web服务 Spring Web Services项目 。 本示例使用JAXB2进行&#xff08;取消&#xff09;编组。 为了开发服务&#xff0c;我将使用合同优先的方法&#xff0c;该方法首先定义服务合同&#xff0c;然后基于该合同实施服务。 本文分为…

转载 Net多线程编程—System.Threading.Tasks.Parallel

.Net多线程编程—System.Threading.Tasks.Parallel System.Threading.Tasks.Parallel类提供了Parallel.Invoke&#xff0c;Parallel.For&#xff0c;Parallel.ForEach这三个静态方法。 1 Parallel.Invoke 尽可能并行执行所提供的每个操作&#xff0c;除非用户取消了操作。 方法…

Fiddler教程--简介

1、开发环境host配置自己修改系统的host来回挺麻烦的 2、前后的接口调试 3、线上bugfix 4、性能分析和优化 5.等等... 工作原理 一个代理服务器地址改为 127.0.0.1:8888流模式边走边返回缓冲模式http请求完成所有的数据之后&#xff0c;才返回 界面功能介绍 1.工具栏 从下图红色…

跟面向对象卯上了,看看ES6的“类”

上回我们说到ES5的面向对象&#xff0c;以及被大家公认的最佳的寄生组合式继承。时代在进步&#xff0c;在ES6中对于面向对象这个大boss理所应当地进行了一次大改&#xff0c;从原先那种比较长的写法转变为“小清新”写法。我们一起来看一下。 在ES6中是有类这个概念&#xff0…

Java 8中的5个功能将改变您的编码方式

Java 8在JVM和语言级别都包含了一些非常令人兴奋的功能。 虽然最初为该发行版设想的某些功能已扩大范围或已推出到第9版&#xff0c;但实际上有数十个新功能。 许多新添加的内容在编译器&#xff0c;JVM或帮助系统级别都进行了后台改进。 这样&#xff0c;虽然我们可能会从中受…

Java相关资料分享(视频+电子书籍)

关注微信公众号【Java典籍】&#xff0c;获取百度网盘提取码 ▼微信扫一扫下图↓↓↓二维码关注 转载于:https://www.cnblogs.com/bingyimeiling/p/10279049.html

vue项目 一行js代码搞定点击图片放大缩小

一行js代码搞定xue项目需要点击图片放大缩小&#xff0c;其实主要用的是用到了vue:class的动态切换&#xff0c;内容比较简单。一开始我把维护的需求想得太复杂了&#xff0c;和测试小姐姐聊了一下才反应过来。 两个月不到跟了四个项目&#xff0c;现在是维护改bug阶段&#x…

指针系统学习8-小结

1.有关指针的数据类型的小结 2.指针运算小结 一、指针变量加&#xff08;减&#xff09;一个整数,会指向上&#xff08;下&#xff09;1&#xff08;i&#xff09;个元素  例如&#xff1a;&#xff50;&#xff0b;&#xff0b;、&#xff50;&#xff0d;&#xff0d;、&am…

Spring集成–使用RMI通道适配器

1.引言 本文介绍了如何使用Spring Integration RMI通道适配器通过RMI发送和接收消息。 它由以下部分组成&#xff1a; 实施服务&#xff1a;第一部分着重于创建和公开服务。 实现客户端&#xff1a;显示如何使用MessagingTemplate类调用服务。 抽象SI逻辑&#xff1a;最后&a…