热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Spring+SpringMVC+Mybatis项目搭建和登录注册例子

开发工具:IntelliJIDEA数据库:MySql目录Spring+SpringMVC+Mybatis项目搭建和登录注册例子SpringBoot+Mybatis项目搭建和登录注册

开发工具:IntelliJ IDEA
数据库:MySql

目录

Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

Spring Boot + Mybatis 项目搭建和登录注册例子

Spring + Spring MVC + Hibernate 项目搭建和登录注册例子

Spring Boot + Hibernate 项目搭建和登录注册例子

Spring Boot 使用 JWT

本篇将记录创建一个 Spring + Spring MVC + Mybatis 项目,并且编写一个注册登录的例子,毕竟Java的东西配置起来真有点麻烦

创建数据库

就随便一点吧,使用MySql,数据库就用 test ,新建一个 users 表,随便设置几个字段
Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

注意

  1. 要按照命名规范,单词均小写,不同单词之间使用下划线隔开
  2. Mybatis 貌似不推荐使用外键,需要我们在代码中手动控制实体之间的关系
    其实是我在使用 Hibernate 和 Mybatis 的时候,用了很多时间都没解决外键的问题,写配置也觉得挺麻烦的
    感觉有时候不如自己封装JDBC,只能感叹 Entity Framework Core 是真的好用(貌似 Mybatis 的外键和 EF Core蛮像的),大概是我还太菜了吧,等我有时间解决外键的问题再写另一篇记录吧 T_T

IDEA 添加数据库
Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

输入用户名和密码,填写连接字符串,然后点击 Test Connection,Schema 可以选择连接的数据库
连接字符串参考:jdbc:mysql://localhost:3306?useUnicode=true&characterEncoding=utf8&serverTimezOne=GMT%2B8&useSSL=false
Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

创建项目

使用 Maven 创建 Java Web 项目,选择 maven-archetype-webapp
Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

GroupId:一般是公司域名
ArtifactId:项目名称
毕竟只是个例子,所以就随便写了
Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

配置 maven 路径,这里就不详细展开讲了,Maven 的配置 baidu bing 之类的搜索引擎随便查都有答案
Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

项目路径的最后文件夹与项目名称一致
Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

右键 src
Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

新建几个文件夹

  • Controllers:控制器
  • DAO:数据库访问
  • Filters:过滤器
  • Models:实体模型类
  • Services:服务层
  • Utils:工具类
  • Mappers:映射 xml 文件
  • Generator:Mybatis Generator 配置文件
  • Views:视图
  • wwwroot:静态文件,css、js等文件
    Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

tomcat

Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

部署
Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

选哪个都可以
Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

pom.xml

最基本的大致就这些,想要什么都可以自己添加




    4.0.0

    com
    ssm_demo
    1.0-SNAPSHOT
    war

    ssm_demo Maven Webapp
    
    http://www.example.com

    
        UTF-8
        1.7
        1.7
        4.3.18.RELEASE
    

    
        
            junit
            junit
            4.11
            test
        
        
        
            mysql
            mysql-connector-java
            8.0.18
        
        
        
            commons-dbcp
            commons-dbcp
            1.4
        
        
            commons-lang
            commons-lang
            2.2
        
        
        
            org.springframework
            spring-beans
            ${spring.Version}
        
        
            org.springframework
            spring-core
            ${spring.Version}
        
        
            org.springframework
            spring-context
            ${spring.Version}
        
        
            org.springframework
            spring-orm
            ${spring.Version}
        
        
            org.springframework
            spring-web
            ${spring.Version}
        
        
            org.springframework
            spring-webmvc
            ${spring.Version}
        
        
        
            org.mybatis
            mybatis
            3.4.5
        
        
            org.mybatis
            mybatis-spring
            1.3.0
        
        
        
            org.mybatis.generator
            mybatis-generator-core
            1.3.7
        
        
        
            aopalliance
            aopalliance
            1.0
        
        
            org.springframework
            spring-aop
            4.3.20.RELEASE
        
        
            cglib
            cglib
            3.2.0
        
        
        
            org.aspectj
            aspectjweaver
            1.8.14
        
    

    
        ssm_demo
        
            
                
                    maven-clean-plugin
                    3.1.0
                
                
                
                    maven-resources-plugin
                    3.0.2
                
                
                    maven-compiler-plugin
                    3.8.0
                
                
                    maven-surefire-plugin
                    2.22.1
                
                
                    maven-war-plugin
                    3.2.2
                
                
                    maven-install-plugin
                    2.5.2
                
                
                    maven-deploy-plugin
                    2.8.2
                
                
                
                    org.mybatis.generator
                    mybatis-generator-maven-plugin
                    1.3.7
                    
                        src/main/resources/Generator/GeneratorConfig.xml
                        true
                        true
                    
                
            
        
    

进入项目结构,Project Structure
Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

因为我偷懒,所以用 tomcat 自带的库,也可以手动在 Maven 添加
Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

主页

Index.jsp,开头的代码主要是获取端口和url的,方便访问静态文件,应该写在过滤器里,这里我就偷懒了

<%@ page cOntentType="text/html;charset=UTF-8" language="java" %>
<%
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();
    String path = basePath + request.getContextPath();
    String filePath = path + "/wwwroot";
    session.setAttribute("basePath",basePath);
    session.setAttribute("path",path);
    session.setAttribute("filePath",filePath);
%>


    
    


This is Home Index Page

WEB-INF/web.xml 添加


  /Views/Home/Index.jsp

还蛮成功
Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

applicationContext.xml 和 springMVC.cml

jdbc.properties ,根据实际情况修改

jdbc.username=root
jdbc.password=123456
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezOne=GMT%2B8&useSSL=false

applicationContext.xml 和 springMVC.xml 都是这样创建,这三个文件都在main目录下
其实有很多配置我也不知道是做什么的,毕竟只是个项目搭建,我水平也没那么高啦,自己捣鼓着玩吧
Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

applicationContext.xml ,路径部分根据情况修改




    
    

    
    
    

    
    
        
    

    
    
    
    
        
        
        
        
    

    
    
        
    

    
        
        
        
    

    
    
    
        
    

    
    
        
            
            
            
            
            
            
            
            
            
        
    

    
    
        
    


springMVC.xml



    
    
    
    
    
    
        
        
    
    
    
    
    

最后打开项目结构 Project Structure ,如果配置文件不在这里,可以手动添加,或者用 IDEA 的智能提示,进入xml文件时的最上方
Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

配置 Mybatis Generator 自动生成 Model 实体

pom.xml 添加依赖项和插件,其实上面的 pom.xml 已经包含了



    org.mybatis.generator
    mybatis-generator-core
    1.3.7



    org.mybatis.generator
    mybatis-generator-maven-plugin
    1.3.7
    
        src/main/resources/Generator/GeneratorConfig.xml
        true
        true
    

添加 Mybatis Generator 插件启动项
Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

添加启动参数 mybatis-generator:generate -e,这里加了“-e ”选项是为了让该插件输出详细信息,帮助我们定位问题。
Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

resources/Generator 目录下新建 GeneratorConfig.xml 文件
这个配置文件中涉及到路径的节点都可以改





    
    
    

        
            
            
        

        
        
        

        
        
            
        

        
        
            
            
            
            
        

        
        
            
            
        

        
        
            
            
        

        
        

还有一个坑
Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

机翻:

MySql不支持SQL目录和模式。如果在MySql中运行createschema命令,它实际上会创建一个数据库,而JDBC驱动程序会将其报告为一个目录。但是MySql语法不支持标准的catalog..table SQL语法。
因此,最好不要在生成器配置中指定目录或模式。只需在JDBC URL中指定表名和数据库。
如果您使用的是8.x版的Connector/J,您可能会注意到生成器试图为MySql信息模式(sys、information_schema、performance_schema等)中的表生成代码,这可能不是您想要的!要禁用此行为,请将属性“nullCatalogMeansCurrent=true”添加到JDBC URL。

运行 Mybatis Generator 插件启动项
Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

生成的实体类,UserEneity

package main.webapp.Models;

public class UserEntity
{
    private Integer id;

    private String username;

    private String password;

    public Integer getId()
    {
        return id;
    }

    public void setId(Integer id)
    {
        this.id = id;
    }

    public String getUsername()
    {
        return username;
    }

    public void setUsername(String username)
    {
        this.username = username == null ? null : username.trim();
    }

    public String getPassword()
    {
        return password;
    }

    public void setPassword(String password)
    {
        this.password = password == null ? null : password.trim();
    }
}

DAO

MyBatis支持2种类型的映射器:XML映射器和接口映射器,在这里以定义并使用接口映射器为例
自动生成的 Mapper 可能不会加 @Mapper 注解 ,要注意,其实不加也可以

@Mapper
public interface UserEntityMapper
{
    long countByExample(UserEntityExample example);

    int deleteByExample(UserEntityExample example);

    int deleteByPrimaryKey(Integer id);

    int insert(UserEntity record);

    int insertSelective(UserEntity record);

    List selectByExample(UserEntityExample example);

    UserEntity selectByPrimaryKey(Integer id);

    int updateByExampleSelective(@Param("record") UserEntity record, @Param("example") UserEntityExample example);

    int updateByExample(@Param("record") UserEntity record, @Param("example") UserEntityExample example);

    int updateByPrimaryKeySelective(UserEntity record);

    int updateByPrimaryKey(UserEntity record);

    @Insert("insert into users(username, password) values(#{username,jdbcType=VARCHAR},#{password,jdbcType=VARCHAR})")
    void Save(@Param("username") String username, @Param("password") String password);

    @Select("select * from users where username=#{username}")
    UserEntity GetUserByUsername(@Param("username") String username);

    @Select("select * from users where username=#{username} and password=#{password}")
    UserEntity GetUserByUsernameAndPassowrd(@Param("username") String username, @Param("password") String password);

}

Service

@Service
public class UserService
{
    @Autowired
    private UserEntityMapper _userEntityMapper;

    public UserEntity GetUserByUsername(String username)
    {
        return this._userEntityMapper.GetUserByUsername(username);
    }

    public UserEntity GetUserByUsernameAndPassword(String username, String password)
    {
        return this._userEntityMapper.GetUserByUsernameAndPassowrd(username, password);
    }

    public void Save(UserEntity userEntity)
    {
        this._userEntityMapper.Save(userEntity.getUsername(), userEntity.getPassword());
    }
}

Controller 控制器

控制器这里我返回值使用的是 ModelAndView 主要是懒得写前端代码,其实可以返回任何你想返回的值

@Controller
@RequestMapping("/UserController")
public class UserController
{
    @Autowired
    private UserService _userService;

    @RequestMapping("/Index")
    public ModelAndView Index()
    {
        ModelAndView view = new ModelAndView();
        view.setViewName("User/Index");

        return view;
    }

    @RequestMapping(value = "/Login/DoLogin", method = RequestMethod.POST)
    public ModelAndView DoLogin(HttpServletRequest request)
    {
        ModelAndView mav = new ModelAndView();

        String username = request.getParameter("username");
        String password = request.getParameter("password");
        mav.addObject("username", username);
        mav.addObject("password", password);

        if (request.getParameter("btn").equals("Register"))//可以前确定点击的按钮
        {
            mav.setViewName("User/Register");
        }
        else if (request.getParameter("btn").equals("Login"))
        {
            if (username.equals("") || password.equals(""))
            {
                mav.addObject("LoginMessage", "用户名或密码不能为空");
                mav.setViewName("User/Index");
            }
            else
            {
                UserEntity userEntity = this._userService.GetUserByUsernameAndPassword(username, password);
                if (userEntity != null)
                {
                    mav.setViewName("User/Success");
                }
                else
                {
                    mav.addObject("LoginMessage", "用户名或密码错误");
                    mav.setViewName("User/Index");
                }
            }
        }

        return mav;
    }

    @RequestMapping(value = "/Register/DoRegister", method = RequestMethod.POST)
    public ModelAndView DoRegister(HttpServletRequest request)
    {
        ModelAndView mav = new ModelAndView();

        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String repeatPassword = request.getParameter("repeatPassword");
        mav.addObject("username", username);
        mav.addObject("password", password);
        mav.addObject("repeatPassword", repeatPassword);

        if (username.equals("") || password.equals("") || repeatPassword.equals(""))
        {
            mav.addObject("RegisterMessage", "输入框内容不能为空");
            mav.setViewName("User/Register");
        }
        else if (password.equals(repeatPassword) == false)
        {
            mav.addObject("RegisterMessage", "密码不一致");
            mav.setViewName("User/Register");
        }
        else
        {
            UserEntity userEntity = new UserEntity();
            if (this._userService.GetUserByUsername(username) == null)
            {
                userEntity.setUsername(username);
                userEntity.setPassword(password);
                this._userService.Save(userEntity);
                mav.setViewName("User/Index");
            }
            else
            {
                mav.addObject("RegisterMessage", "用户名已存在");
                mav.setViewName("User/Register");
            }
        }

        return mav;
    }

}

jsp 页面

Index.jsp,requestScope 只是用来显示信息

<%@ page cOntentType="text/html;charset=UTF-8" language="java" %>
<%
    String cOntext= request.getContextPath();
    request.setAttribute("context", context);
%>


    
    


This is Login Index Page




注册

Success.jsp

<%@ page cOntentType="text/html;charset=UTF-8" language="java" %>


    
    


Login Success

Register.jsp

<%@ page cOntentType="text/html;charset=UTF-8" language="java" %>
<%
    String cOntext= request.getContextPath();
    request.setAttribute("context", context);
%>


    
    


This is Register Page





因为控制器的返回值是视图,所以要这样访问,根据控制器的标注修改 url ,如果只是 html + js 的话,可以直接 Views/ 访问视图
Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

完整项目结构

Spring + Spring MVC + Mybatis 项目搭建和登录注册例子

Spring + Spring MVC + Mybatis 项目搭建和登录注册例子 结束


推荐阅读
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 本文深入解析了Django框架中的MVT(Model-View-Template)设计模式,详细阐述了其工作原理和应用流程。通过分析URL模式、视图、模型和模板等关键组件,读者将全面理解Django应用程序的架构体系,掌握如何高效地构建和管理Web应用。 ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • 作为软件工程专业的学生,我深知课堂上教师讲解速度之快,很多时候需要课后自行消化和巩固。因此,撰写这篇Java Web开发入门教程,旨在帮助初学者更好地理解和掌握基础知识。通过详细记录学习过程,希望能为更多像我一样在基础方面还有待提升的学员提供有益的参考。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文详细介绍了如何在 Django 项目中使用 Admin 管理后台,包括创建超级用户、启动项目、管理数据模型和修改用户密码等步骤。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • Python 3 Scrapy 框架执行流程详解
    本文详细介绍了如何在 Python 3 环境下安装和使用 Scrapy 框架,包括常用命令和执行流程。Scrapy 是一个强大的 Web 抓取框架,适用于数据挖掘、监控和自动化测试等多种场景。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • PHP 各版本对比:标准版与最新顶级版的详细分析 ... [详细]
  • Unity与MySQL连接过程中出现的新挑战及解决方案探析 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • Amoeba 通过优化 MySQL 的读写分离功能显著提升了数据库性能。作为一款基于 MySQL 协议的代理工具,Amoeba 能够高效地处理应用程序的请求,并根据预设的规则将 SQL 请求智能地分配到不同的数据库实例,从而实现负载均衡和高可用性。该方案不仅提高了系统的并发处理能力,还有效减少了主数据库的负担,确保了数据的一致性和可靠性。 ... [详细]
  • 在Java分层设计模式中,典型的三层架构(3-tier application)将业务应用细分为表现层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。这种分层结构不仅有助于提高代码的可维护性和可扩展性,还能有效分离关注点,使各层职责更加明确。通过合理的设计和实现,三层架构能够显著提升系统的整体性能和稳定性。 ... [详细]
author-avatar
从1前2有3个4人_706
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有