爱站网 关键词挖掘工具,空壳主体接入网站,购物网站建设建站,建立网站的要素这篇文章将展示如何在Spring环境中使用带有Hibernate ORM的MYSQL DB创建学生注册应用程序。 这是一个简单的应用程序#xff0c;旨在在注册过程中从用户收集输入详细信息#xff0c;将这些详细信息保存在MYSQL DB中#xff0c;并在登录期间对其进行身份验证。 1.使用Maven模… 这篇文章将展示如何在Spring环境中使用带有Hibernate ORM的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 Application项目支持Spring框架中的Hibernate ORM请将以下依赖项添加到现有pom.xml中 jstlspring-webmvc和servlet-api用于Spring支持 mysql-connector-java用于MYSQL支持 spring-jdbc用于使用JDBC Spring进行数据访问 spring-orm用于使用Spring进行ORM数据访问 spring-data-jpa用于JPA支持 hibernate-validator和hibernate-entitymanager用于Hibernate支持 jta用于事务支持 dependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion3.2.4.RELEASE/version/dependencydependencygroupIdjavax.servlet/groupIdartifactIdservlet-api/artifactIdversion2.5/versionscopeprovided/scope/dependencydependencygroupIdjavax.servlet/groupIdartifactIdjstl/artifactIdversion1.2/version/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.21/version/dependencydependencygroupIdorg.hibernate/groupIdartifactIdhibernate-validator/artifactIdversion4.2.0.Final/version/dependencydependencygroupIdorg.hibernate/groupIdartifactIdhibernate-entitymanager/artifactIdversion4.1.9.Final/version/dependencydependencygroupIdjavax.transaction/groupIdartifactIdjta/artifactIdversion1.1/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-jdbc/artifactIdversion3.2.0.RELEASE/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-orm/artifactIdversion3.2.0.RELEASE/version/dependencydependencygroupIdorg.springframework.data/groupIdartifactIdspring-data-jpa/artifactIdversion1.3.0.RELEASE/versionexclusionsexclusiongroupIdorg.springframework/groupIdartifactIdspring-aop/artifactId/exclusion/exclusions/dependency3.修改web.xml 修改web.xml的内容以包括以下内容 一个servlet并为其指定配置文件的位置。 在此示例中在项目布局的WEB-INF / config文件夹下创建了一个名为springConfig.xml的配置文件。 Servlet映射以映射在上一步中创建的servlet当客户端指定与url模式匹配的url时应调用该servlet。 一个ContextLoaderListener用于将spring与Web应用程序集成在一起并提供contextConfigLocation用于JPA的上下文文件。 ?xml version1.0 encodingUTF-8?
web-app version2.5
xmlnshttp://java.sun.com/xml/ns/javaee
xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocationhttp://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsdservletservlet-namestudentHibernateServlet/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-classinit-paramparam-namecontextConfigLocation/param-nameparam-value/WEB-INF/config/servletConfig.xml/param-value/init-param
/servletservlet-mappingservlet-namestudentHibernateServlet/servlet-nameurl-pattern*.html/url-pattern
/servlet-mappingcontext-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:/jpaContext.xml/param-value
/context-paramlistenerlistener-classorg.springframework.web.context.ContextLoaderListener/listener-class
/listenerdisplay-nameArchetype Created Web Application/display-name
/web-app4.创建Spring配置文件 在文件夹WEB-INF / config下创建一个Spring Bean配置文件。 如果STSSpring Tool Suite是IDE请继续启用上下文和mvc命名空间。 servletConfig.xml将如下所示 ?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxmlns:mvchttp://www.springframework.org/schema/mvcxsi:schemaLocationhttp://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/context http://www.springframework.org/schema/context/spring-context-3.2.xsd/beans 启用所需的名称空间后包括以下内容在beans和/ beans标记之间以指示该应用程序是注释驱动的并且是上下文组件扫描的基本包。 mvc:annotation-driven /context:component-scan base-packagecom.github.elizabetht / 包括Spring的bean InternalResourceViewResolver以查找jsp文件 bean classorg.springframework.web.servlet.view.InternalResourceViewResolverproperty nameprefix value/WEB-INF/jsp/ /property namesuffix value.jsp /
/bean 包括用于指定属性文件的Bean稍后将对此进行详细介绍该文件将用于存储自定义消息或属性。 通过以下配置可以在项目的src / main / resources文件夹下创建一个名为messages.properties的属性文件。 bean idmessageSource classorg.springframework.context.support.ResourceBundleMessageSourceproperty namebasename valuemessages /
/bean5.创建persistence.xml 在项目的src / main / resources / META-INF文件夹下创建一个名为persistence.xml的文件以定义JPA所需的持久性单元。 将以下内容添加到persistence.xml中以定义名为punit的持久性单元。 persistence xmlnshttp://java.sun.com/xml/ns/persistencexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocation{http://java.sun.com/xml/ns/persistence} {http://java.sun.com/xml/ns/persistence_2_0.xsd}version2.0persistence-unit namepunit/persistence-unit/persistence6.创建jpaContext.xml 按照web.xml中的定义在项目的src / main / resources文件夹下创建一个名为jpaContext.xml的文件以定义JPA和Hibernate相关的配置。 请注意在Maven项目中的src / main / resources文件夹下创建的任何文件都会由Maven自动添加到类路径中。 如果STSSpring Tool Suite是IDE请继续启用contextjpa和tx命名空间。 jpaContext.xml将如下所示 ?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:txhttp://www.springframework.org/schema/txxmlns:contexthttp://www.springframework.org/schema/contextxmlns:jpahttp://www.springframework.org/schema/data/jpaxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsdbeans 启用所需的名称空间后包括以下内容在beans和/ beans标记之间以指示该应用程序是注释驱动的并且是jpa存储库扫描的基本包。 context:annotation-config /jpa:repositories base-packagecom.github.elizabetht.repository / 接下来包括bean PersistenceAnnotationBeanPostProcessor。 这对于处理持久性单元持久性上下文注释和注入JPA相关资源是必需的。 bean classorg.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor / 包括EntityManagerFactory的bean该bean列出了各种与JPA相关的属性/资源。 bean identityManagerFactory classorg.springframework.orm.jpa.LocalContainerEntityManagerFactoryBeanproperty namepersistenceUnitName valuepunit /property namedataSource refdataSource /property namejpaVendorAdapterbean classorg.springframework.orm.jpa.vendor.HibernateJpaVendorAdapterproperty nameshowSql valuetrue //bean/propertyproperty namejpaPropertyMapmapentry keyhibernate.dialect valueorg.hibernate.dialect.MySQL5InnoDBDialect /entry keyhibernate.hbm2ddl.auto valuevalidate /entry keyhibernate.format_sql valuetrue //map/property/bean 包括用于数据源的Bean可在其中指定MYSQL DB的属性例如url用户名和密码。 将include connection url替换为用于连接到MYSQL DB的实际连接URL。 同样将include username和include password替换为实际的用户名和密码值。 bean iddataSource classorg.springframework.jdbc.datasource.DriverManagerDataSourceproperty namedriverClassName valuecom.mysql.jdbc.Driver /property nameurl valuejdbc:mysql//include connection url:3306/studentEnrollment?autoReconnecttruecreateDatabaseIfNotExisttrue /property nameusername valueinclude username /property namepassword valueinclude password /
/bean 包括用于事务管理器的Bean用于范围/控制事务。 bean idtransactionManager classorg.springframework.orm.jpa.JpaTransactionManagerproperty nameentityManagerFactory refentityManagerFactory /
/beantx:annotation-driven transaction-managertransactionManager / 从而结束了jpaContext.xml中的长配置 7.创建用于学生注册/登录的JSP文件 在WEB-INF下创建一个名为“ jsp”的文件夹将在此创建jsp文件的位置如InternalResourceViewResolver bean的servletConfig.xml中所示。 创建一个文件signup.jsp以包含一个表单来获取输入信息例如学生的UserNamePasswordFirstNameLastNameDateOfBirth和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/StudentEnrollmentWithSpring/tree/master/src/main/webapp中找到此应用程序的webapp文件夹下的文件的参考链接。 8.为ControllerModelRepository和Service层类创建包 在src / main / java文件夹下为Spring ControllerModelRepository和Service类分别创建软件包。 包创建后的项目示例快照如下所示 9.创建模型层的类 在包com.github.elizabetht.model内创建一个名为Student.java的POJO类以在注册过程中包含Student模型实体的详细信息。 在同一个包com.github.elizabetht.model中创建另一个名为StudentLogin.java的POJO类以包含Student Login详细信息。 可以在https://github.com/elizabetht/StudentEnrollmentWithSpring/tree/master/src/main/java/com/github/elizabetht/model中找到到Model类文件的参考链接。 10.为存储库层创建类 在包com.github.elizabetht.repository中创建一个名为StudentRepository.java的接口类以支持存储库层数据库操作。 为了应用程序的目的需要两种接口方法。 将学生注册详细信息插入数据库 从数据库验证学生登录详细信息 Repository(studentRepository)
public interface StudentRepository extends JpaRepositoryStudent, Long {Query(select s from Student s where s.userName :userName)Student findByUserName(Param(userName) String userName);} Hibernate实现支持save方法因此数据插入不需要单独SQL语句。 11.创建服务层的类 在包com.github.elizabetht.service中创建一个名为StudentService.java的接口类以支持服务层操作。 public interface StudentService {Student save(Student student);boolean findByLogin(String userName, String password);boolean findByUserName(String userName);
} 在com.github.elizabetht.service包中创建一个名为StudentServiceImpl.java的服务层实现类实际上是POJO。 这就是应用程序逻辑的用途–将学生的详细信息保存到数据库中或从数据库中验证学生的已保存详细信息。 Service(studentService)
public class StudentServiceImpl implements StudentService {Autowiredprivate StudentRepository studentRepository;Transactionalpublic Student save(Student student) {return studentRepository.save(student);}public boolean findByLogin(String userName, String password) { Student stud studentRepository.findByUserName(userName);if(stud ! null stud.getPassword().equals(password)) {return true;} return false; }public boolean findByUserName(String userName) {Student stud studentRepository.findByUserName(userName);if(stud ! null) {return true;}return false;}}12.创建控制器层的类 在com.github.elizabetht.controller包中创建一个名为StudentController.java的Controller层POJO类。 这就是应用程序路由逻辑的去向–无论是调用注册还是登录操作。 Controller
SessionAttributes(student)
public class StudentController {Autowiredprivate StudentService studentService;RequestMapping(value/signup, methodRequestMethod.GET)public String signup(Model model) {Student student new Student(); model.addAttribute(student, student); return signup;}RequestMapping(value/signup, methodRequestMethod.POST)public String signup(Valid ModelAttribute(student) Student student, BindingResult result, Model model) { if(result.hasErrors()) {return signup;} else if(studentService.findByUserName(student.getUserName())) {model.addAttribute(message, User Name exists. Try another user name);return signup;} else {studentService.save(student);model.addAttribute(message, Saved student details);return redirect:login.html;}}RequestMapping(value/login, methodRequestMethod.GET)public String login(Model model) { StudentLogin studentLogin new StudentLogin(); model.addAttribute(studentLogin, studentLogin);return login;}RequestMapping(value/login, methodRequestMethod.POST)public String login(Valid ModelAttribute(studentLogin) StudentLogin studentLogin, BindingResult result) {if (result.hasErrors()) {return login;} else {boolean found studentService.findByLogin(studentLogin.getUserName(), studentLogin.getPassword());if (found) { return success;} else { return failure;}}}
}13.创建messages.properties文件 如上所示 Valid批注用于验证到达方法的表单的输入参数并将验证结果存储在BindingResult对象中。 为了验证特定字段请参阅为模型层创建的类– https://github.com/elizabetht/StudentEnrollmentWithSpring/tree/master/src/main/java/com/github/elizabetht/model 请使用注释像 NotEmpty Size Email和NotNull它们来自Hibernate Validator的各种验证。 在messages.properties文件中指定了上述任何一个验证器失败时应显示的定制消息。 在src / main / resources文件夹下创建一个名为messages.properties的文件并包含以下内容 NotEmptyField cannot be blank
NotNullField cannot be blankEmailEmail Address not valid/well-formed
PastDate of Birth must be in the past Size{0} must be between {2} and {1} characters long
typeMismatchInvalid format14.在MYSQL数据库中创建数据库模式 连接到将用于此应用程序MySQL数据库并使用MySQL Workbench创建一个名为StudentEnrollment的新数据库架构。 这是必需的因为在jpaContext.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)
) ENGINEInnoDB AUTO_INCREMENT43 DEFAULT CHARSETlatin1;15.在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/StudentEnrollmentWithSpring/ 16.克隆或下载代码 如果使用git请在此处克隆该项目的副本 https : //github.com/elizabetht/StudentEnrollmentWithSpring.git 如果不使用git请在此处以ZIP或tar.gz文件下载项目 https //github.com/elizabetht/StudentEnrollmentWithSpring/releases/tag/1.6 参考我的JCG合作伙伴博客“ 我的技术实验”博客中的合作伙伴伊丽莎白·托马斯Elizabeth Thomas 使用Hibernate With Spring构建Java Web应用程序 。 翻译自: https://www.javacodegeeks.com/2014/03/building-java-web-application-using-hibernate-with-spring.html