您的位置:首页 > 编程语言 > Java开发

【个人学习】使用idea搭建SpringBoot,整合Mybatis、Thymeleaf,连接数据库,实现具有前端界面项目:主要功能登录,注册,个人信息查看、更改,不定时更新中...

2020-02-29 18:34 1496 查看

【个人学习】使用idea搭建SpringBoot,整合Mybatis、Thymeleaf,连接数据库,实现具有前端界面项目:主要功能登录,注册,个人信息查看、更改,不定时更新中...

  • 三:打开项目和配置文件
  • 注册、个人信息查看、更改的模块已完善啦~
  • 最终完成这个项目的全部功能:登陆、注册、信息查看、信息修改(当然后面也会添加更多更有趣的功能,不定时更新)最后附上我GitHub上的源码地址:[https://github.com/ZhangHui-1997/sbdemo](https://github.com/ZhangHui-1997/sbdemo)
  • 本人也是最近大学即将毕业,现在大四在公司实习期间学习了下SpringBoot的框架,也是第一次使用idea软件搭建SpringBoot项目,使用csdn记录一下自己学习过程和分享一下自身经历。
    由于也是看别人的博客照着做的,但是刚开始实在不会使用SpringBoot整合Mybatis创建项目,还是有不少的问题出现,在项目中也会把我遇到的问题的解决方法和大家一起分享记录一下,项目也会持续更新完善,在我的github上https://github.com/ZhangHui-1997/sbdemo上也会把最新的项目代码发布上去。
    (参考原地址传送门->:https://blog.csdn.net/weixin_42685022/article/details/82215893 )

    项目的搭建

    一:首先创建数据库和对应的表

    我使用的是mysql创建的数据库。

    二:使用idea创建SpringBoot项目

    1:打开idea,点击Create New Project ,选择 Spring Initialize,在点击Next。

    2:输入工程信息,我更改了3处,其余没有更改。可能有的将Artifact中内容输入大写英文导致报错,更改为小写即可。

    3:接着勾选图片右边所需要的驱动和依赖

    SpringWeb:javaWeb项目
    Thymeleaf:前端界面框架
    JDBC API:jdbc接口
    Mybatis :mybatis框架
    Mysql :mysql驱动

    4:修改和保存工程

    三:打开项目和配置文件

    最终项目目录如下:

    一:配置数据库连接

    可以使用两种配置applictaion.properties也可以使用application.yml,我使用的是yml进行配置,感觉比properties配置较简单,使用yml需要删除原来产生的applictaion.properties文件。项目中和数据库的属性需要根据自己来配置,下面是我的配置信息。

    server:
    port: 8080
    
    spring:
    datasource:
    name: sbdemo    #数据库名
    url: jdbc:mysql://127.0.0.1:3306/sbdemo   #本地下的数据库名
    username: root    #mysql连接用户名
    password: root    #mysql连接密码
    driver-class-name: com.mysql.jdbc.Driver     #数据库驱动

    二:项目整合Mybatis

    1:在application.yml或者applictaion.properties中添加mybatis配置信息。
    mybatis:
    mapper-locations: classpath:mapper/*.xml      #注意:一定要对应mapper映射xml文件的所在路径
    type-aliases-package: com.sbdemo.entity       # 注意修改:对应实体类的路径

    最终效果如下:

    2:在pom.xml的build属性中添加mybatis genreator自动生成代码插件:
    <!-- mybatis generator 自动生成代码插件 -->
    <plugin>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-maven-plugin</artifactId>
    <version>1.3.1</version>
    <configuration>
    <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
    <overwrite>true</overwrite>
    <verbose>true</verbose>
    </configuration>
    </plugin>

    如下图:

    3:在src/main/resources中创建generator文件夹,和创建generatorConfig.xml文件。

    xml中的jar包地址、数据库名、密码、自动生成的包路径和表名都需要根据自己配置进行修改。

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE generatorConfiguration
    PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
    "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
    <generatorConfiguration>
    <!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包-->
    <classPathEntry  location="C:\Program Files (x86)\MySQL\Connector.J 5.1\mysql-connector-java-5.1.7-bin.jar"/>
    <context id="DB2Tables"  targetRuntime="MyBatis3">
    <commentGenerator>
    <property name="suppressDate" value="false"/>
    <!-- 是否去除自动生成的注释 true:是 : false:否 -->
    <property name="suppressAllComments" value="false"/>
    </commentGenerator>
    <!--数据库连接驱动类,URL,用户名、密码 -->
    <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1/sbdemo" userId="root" password="root">
    </jdbcConnection>
    <javaTypeResolver>
    <property name="forceBigDecimals" value="false"/>
    </javaTypeResolver>
    <!-- 生成(实体)模型的包名和位置-->
    <javaModelGenerator targetPackage="com.sbdemo.entity" targetProject="src/main/java">
    <property name="enableSubPackages" value="true"/>
    <property name="trimStrings" value="true"/>
    </javaModelGenerator>
    <!-- 生成XML映射文件的包名和位置-->
    <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
    <property name="enableSubPackages" value="true"/>
    </sqlMapGenerator>
    <!-- 生成DAO接口的包名和位置-->
    <javaClientGenerator type="XMLMAPPER" targetPackage="com.sbdemo.mapper" targetProject="src/main/java">
    <property name="enableSubPackages" value="true"/>
    </javaClientGenerator>
    <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
    <table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
    </context>
    </generatorConfiguration>

    添加完成后进行配置mybatis的genreatorRun—>Edit Config—>+—>Maven进行配置,在Name中输入:generator,在Command line 中输入:mybatis-generator:generate -e,后点击OK。
    运行
    generator自动产生三个文件夹和文件,项目现在目录如下,一定要保证自动生成的entity、mapper、mapper.xml所在路径正确。

    4:编写访问测试

    1:在resources的templates文件下编写一个前端Hello.html

    2:在com.sbdemo下创建controller包和创建一个测试HelloController.java类。

    package com.sbdemo.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @Controller
    @RequestMapping(value = {"/hello"})
    public class HelloController {
    
    @RequestMapping(value = {"/sbdemo"})
    public String hello(){
    return "Hello";		//返回值和前面Hello.html的名字一致
    }
    }

    3:运行项目启动类(SbdemoApplication.java)并在地址栏输入地址(http://localhost:8080/hello/sbdemo),查看是否成功运行。
    浏览器出现一下界面那么恭喜你测试成功了!
    如果未能在浏览器输出,在idea控制台中查看报错的原因,是否是访问路径错误、还是缺少注解或者是方法返回值与html的名不一致导致。如果在页面上直接显示了Hello字符串,是由于SpringBoot中的controller层默认注解为**@RestController**,@RestController包含了注解:@Controller和@ResponseBody,而@ResponseBody是会将返回值转换为字符串返回,所以需要自动添加注解:@Controller

    5:编写用户登录功能

    1:在resorces包下的mapper的UserMapper.xml中编写sql语句,不懂其中标签中的属性值的含义可以去了解mybatis,确保namespace、resultType、parameterType所对应的路径以及类名正确。

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    <mapper namespace="com.sbdemo.mapper.UserMapper" >
    
    <!--用户登录-->
    <select id="userLogin" resultType="com.sbdemo.entity.User" parameterType="User">
    select username , password from user where username = #{username} and password = #{password}
    </select>
    
    </mapper>

    2:编写mapper(dao)层UserMapepr.java,我将原来自动生成的代码全部删除。

    package com.sbdemo.mapper;
    
    import com.sbdemo.entity.User;
    import org.apache.ibatis.annotations.Mapper;
    import org.apache.ibatis.annotations.Param;
    import org.springframework.stereotype.Component;
    
    @Mapper
    @Component
    public interface UserMapper {
    
    //用户登录
    User userLogin(@Param("username") String username, @Param("password") String password);
    
    }

    3:创建Service层编写UserLoginService.java类。

    package com.sbdemo.service;
    
    import com.sbdemo.entity.User;
    import com.sbdemo.mapper.UserMapper;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class UserLoginService {
    
    //注入dao
    @Autowired
    private UserMapper userMapper;
    
    //用户登录
    public User userLogin(String username, String password){
    User user = userMapper.userLogin(username,password);
    return user;
    }
    }

    4:编写Controller层中的UserLoginController.java类。
    在这里有人可能写完**@Autowired private UserLoginService userLoginService **一直报错,是由于项目启动类和本类所在同一包下,可以将启动类移到com.sbdemo下即可。

    package com.sbdemo.controller;
    
    import com.sbdemo.entity.User;
    import com.sbdemo.service.UserLoginService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    
    @Controller
    @RequestMapping(value = {"/user"})
    public class UserLoginController {
    
    @Autowired
    private UserLoginService userLoginService;
    
    //访问登录页面:/user/loginPage
    @RequestMapping(value = {"/loginPage"})
    public String userLogin(){
    return "UserLogin";
    }
    
    @RequestMapping(value = {"/userLogin"})
    public String userLogin(@RequestParam("username")String username,@RequestParam("password")String password){
    User user = userLoginService.userLogin(username,password);
    if(user != null){
    return "Success";		//跳转成功界面Success.html
    }
    return "Error";
    }
    }

    5:最后编写登录页面UserLogin.html,成功页面Success.html,错误页面Error.html,注意名字是否与controller返回值一致,和跳转链接是否正确。
    登录页面UserLogin.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    用户登录
    <form action="/user/userLogin" method="post">
    账号:<input type="text" name="username"/><br>
    密码:<input type="password" name="password" /><br>
    <input type="submit" value="登录" /><a href="#" >注册</a>
    </form>
    </body>
    </html>

    成功页面Success.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>登录成功</title>
    </head>
    <body>
    <h1>恭喜你成功登录</h1>
    
    </body>
    </html>

    错误页面Error.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>登录失败</title>
    </head>
    <body>
    <h1>登录失败,请重新<a href="/user/loginPage">登录</a></h1>
    </body>
    </html>

    6:此刻全部步骤完成,在浏览器中输入地址进行测试:http://localhost:8080/user/loginPage

    无论你是否输入数据库中存在的数据,都会跳转到错误界面

    这是为什么了?难道数据库中没有存入数据?打开控制台显示如下错误

    这是什么原因造成的了?经过一番面向*度编程后得知是数据库时区错误,回到applocation.yml或者application.properties追加url更改时区设置**?serverTimezone=UTC**。

    server:
    port: 8080
    
    spring:
    datasource:
    name: sbmlogin
    url: jdbc:mysql://127.0.0.1:3306/sbmlogin?serverTimezone=UTC	//更改时区
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    
    mybatis:
    mapper-locations: classpath:mapper/*.xml
    type-aliases-package: com.example.sblogindemo3.entity

    再次输入登录地址输入正确的账号密码即登录成功

    最后附属一张项目整体目录

    注册、个人信息查看、更改的模块已完善啦~

    controller类中的方法:

    //访问登录页面路径
    @RequestMapping(value = {"/loginPage"})
    public String userLogin(){
    return "/user/UserLoginPage";
    }
    
    //访问注册页面
    @RequestMapping(value = {"/registerPage"})
    public String userRegister(){
    return "/user/UserRegisterPage";
    }
    
    //访问用户信息修改页面
    @RequestMapping(value = {"/updatePage"})
    public String userUpdateInfo(){
    return "/user/UpdateUserInfoPage";
    }
    //用户注册
    @RequestMapping(value ={"/userRegiser"})
    public String userRegister(User user,HttpServletRequest request){
    int u = userServiceImpl.userRegister(user);
    if(u > 0){
    request.getSession().setAttribute("username",user.getUsername());
    return "Index";
    }
    return "Error";
    }
    //用户信息显示
    @RequestMapping(value = {"/userInfo"})
    public String userInfo(Model model , HttpServletRequest request){
    Object requsername = request.getSession().getAttribute("username");
    String username = (String) requsername;
    User user = userServiceImpl.userInfo(username);
    System.out.println("用户信息:"+user.toString());
    if(user != null){
    model.addAttribute("user",user);
    return "/user/UserInfoPage";
    }
    return "Error";
    }
    //用户信息更改
    @RequestMapping(value = {"/userUpdateInfo"})
    public String userUpdateInfo(@RequestParam("sex")String sex,@RequestParam("age")int age, HttpServletRequest request){
    Object obj =request.getSession().getAttribute("username");
    //System.out.print("obj:"+obj);
    String username = (String) obj;
    //System.out.print("username:"+username);
    int result = userServiceImpl.userUpdateInfo(sex,age,username);
    if(result > 0){
    request.getSession().setAttribute("username",username);
    return "Index";
    }
    return "Error";
    }

    个人信息显示html使用thymeleaf模板显示数据:

    最终结果图






    最新的项目结构图:

    最终完成这个项目的全部功能:登陆、注册、信息查看、信息修改(当然后面也会添加更多更有趣的功能,不定时更新)最后附上我GitHub上的源码地址:https://github.com/ZhangHui-1997/sbdemo

    如果使用SHH下载:git@github.com:ZhangHui-1997/sbdemo.git
    下载公钥为:zhanghui

    • 点赞 3
    • 收藏
    • 分享
    • 文章举报
    想做游戏的程序猿 发布了1 篇原创文章 · 获赞 3 · 访问量 223 私信 关注
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: 
    相关文章推荐