新手摸爬滚打:vue+springboot前后端分离项目演示(二)——创建springboot项目整合mybatis+mysql

前篇:新手摸爬滚打:vue+springboot前后端分离项目演示(一)——vue cli创建vue2项目

 导语:重走长征路

使用intellij idea创建springboot项目

首先建议参考如文章https://blog.csdn.net/baidu_39298625/article/details/98102453以及各种网络教程

如果头铁想看笔者所写,就要做好翻车的准备(笔者老cv大师了)

新建一个项目,选择Spring Initializr(demo_back是我起的名字

image-20210801161804188

选择依赖(感觉Thymeleaf不要也罢,JDBC API好像也没用到,算啦,宁滥毋缺吧)

image-20210801162029956

image-20210801162102946

新建完成后,耐心等一会maven的下载(虽然我用了很多次maven了,但依然浑浑噩噩,果然该去学一学了)

(不知为何今天格外慢,明明都在本地仓库的说)

image-20210801162241136

解析下载完以后看看右边的maven,基本是能导包的,如果没有,点一下重新加载(左上角的刷新按钮

image-20210801163006976

然后打开application.properties写入数据库配置和端口配置(这里我重构为了yml,因为好写)

image-20210801163151511

这里我把项目的运行端口设置为了8081,因为我前端vue项目是在8080运行的,总之是不冲突即可

spring:
  datasource:
    name: demo  #数据库名
    url: jdbc:mysql://localhost:3306/demo?serverTimezone=GMT%2B8 #url,这个serverTimezone可能报错可能不报错,比较随缘,我碰到的需要加上的情况多
    username: root  #用户名
    password: 123456  #密码,记得改成自己的
    driver-class-name: com.mysql.cj.jdbc.Driver  #数据库链接驱动,一般就是这个
​
server:
  port: 8081
  servlet:
    context-path: /

这里就不过家家式写个hello world了,没啥必要,开始连接数据库

点击右边的数据库,点击新建,这里以mysql为例是因为笔者只用过mysql

image-20210801163948125

填写用户名和密码,以及自己的数据库名字(demo是我建的数据库名,character set建议采用utf8),然后测试连接,通过就ok了

serverTimezone也是有人要加有人不要,我是要加的,不然会测试连接报错

image-20210801164521677

附上数据库:(工具使用navicat)

image-20210801165002026

能看到库的内容就成功

image-20210801164917528

mybatis逆向生成实体类和mapper

导语:哎,我就头铁,我就非得用自动生成,感谢这篇文章https://blog.csdn.net/AlbenXie/article/details/109277051的作者

把放实体类和mapper的包建立起来,我的目录如下:

其中软件包entity和mapper是放在项目目录下的,放mapper类的xml文件的mapper目录一定要放在resources下

image-20210801171854800

其中entity放生成的实体类文件,mapper类放生成的mapper类文件,而resources里面的mapper是放的各种xxxMapper.xml文件

第一件事呢,就是在application.yml里面加入配置(忘了直接gg)

mybatis:
  mapper-locations: classpath:mapper/*.xml  #配置映射文件
  type-aliases-package: com/example/demo/entity #配置实体类

然后开始搞这个鬼插件,先在pom.xml里面写入依赖

<!--mybatis自动生成-->
<dependency>
  <groupId>org.mybatis.generator</groupId>
  <artifactId>mybatis-generator-core</artifactId>
  <version>1.3.7</version>
</dependency>

题外话:如果spring-boot-starter-parent的依赖爆红,可以考虑把version 2.5.3改成2.5.2(我反正就很倒霉的红了)

新建一个mybatis-generator.xml

image-20210801170234830

把这一大段给复制进去(可以参考上面博主的文章

别害怕,主要需要修改:

1.数据库的用户名和密码

2.生成的文件的包名(路径至少idea可以自动联想,基本不会配置错)

3.要生成的数据表的名字和对应的实体类名字

<?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>
    <!-- 数据库驱动 -->
    <context id="DB2tables" targetRuntime="MyBatis3">
​
        <!-- 去掉生成出来的代码的注解 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true" />
            <property name="suppressDate" value="true" />
        </commentGenerator>
​
        <!--数据库链接URL,用户名、密码 -->
<!--        记得修改!!!!!!-->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/demo?serverTimezone=UTC" userId="root" password="123456">
            <property name="nullCatalogMeansCurrent" value="true" />
        </jdbcConnection>
​
        <!--类型解析-->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>
​
        <!-- 生成实体类和example类的包名和位置 -->
        <!--        记得修改!!!!!!-->
​
        <javaModelGenerator targetPackage="com.example.demo_back.entity" targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
            <!--从数据库返回的值去除前后空格-->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
​
        <!-- 生成映射文件的包名和位置 -->
        <!--        记得修改!!!!!!-->
​
        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>
​
        <!-- 生成mapper类的包名和位置 -->
        <!--        记得修改!!!!!!-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.demo_back.mapper" targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>
​
        <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名 要生成哪个表就写哪个 -->
        <!--        记得修改!!!!!!-->
        <table tableName="user" domainObjectName="User" />
    </context>
</generatorConfiguration>

注:如果这个连接显示URI未注册,可以把点击这个红连接,然后出现个红灯泡,然后获取外部资源,就好了

image-20210801170917976

然后去pom.xml,在<plugins></plugins>里面添加插件的位置(原理不多赘述,好像还是和扫描有关,笔者是个不求甚解的人

            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.7</version>
​
                <configuration>
                    <configurationFile>${basedir}/src/main/resources/mybatis-generator.xml</configurationFile>
                    <overwrite>true</overwrite>
                    <verbose>true</verbose>
                </configuration>
<!--                mysql驱动有可能版本爆红,自己用的啥版本配置啥-->
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.22</version>
                        <scope>runtime</scope>
                    </dependency>
                </dependencies>
            </plugin>

刷新一下maven,然后双击这个新插件

image-20210801172657174

出现build success就可以了,真刺激

image-20210801172903111

看一下工程目录,就能发现有了新文件

image-20210801172955709

注意:如果改了库需要重新生成某张表的各类文件,最好(应该是必须)把这张表对应的mapper.xml文件删了重新生成,不然会重复写入报错。(比如我改了user表的内容,我就把UserMapper.xml删掉,其他的不用管直接就覆盖了)

编写后端逻辑

杂七杂八的事情搞好了,就要开始正经写后端接口了(我也不知道是不是叫接口)

这里采取自底向上的方式建立

先建立service包和UserService类

package com.example.demo_back.service;
​
public interface UserService
{
    boolean validateUser(String userName,String password);
}

然后在serviceImpl包里写对应的实现类

注意:

1.@Service("UserServiceImpl")需要写上,不然后面controller无法注入

2.mapper类均用@Resource注解注入,且不能实例化(实例化会出现一堆玩意

example类的用法建议找网上各种教程,反正挺方便的

package com.example.demo_back.serviceImpl;
​
import com.example.demo_back.entity.UserExample;
import com.example.demo_back.mapper.UserMapper;
import com.example.demo_back.service.UserService;
import org.springframework.stereotype.Service;
​
import javax.annotation.Resource;
​
@Service("UserServiceImpl")
public class UserServiceImpl implements UserService
{
    @Resource
    private UserMapper userMapper;
    @Override
    public boolean validateUser(String userName,String password)
    {
        UserExample userExample=new UserExample();
        UserExample.Criteria criteria=userExample.createCriteria();
        criteria.andUserNameEqualTo(userName);
        criteria.andPasswordEqualTo(password);
        return userMapper.selectByExample(userExample)==null;
    }
}

最后在controller包里建立一个controller类

注意:

1.需有@RestController注解,否则运行启动类的时候扫描不到

2.需有@CrossOrigin注解,否则无法跨域

3.使用@Autowired注入Service,且不可实例化(不要new

package com.example.demo_back.controller;
​
import com.example.demo_back.serviceImpl.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
​
@RestController
@CrossOrigin
public class UserController
{
    @Autowired
    private UserServiceImpl userService;
​
    @RequestMapping("/validateUser")
    public boolean validateUser(@RequestParam(value = "userName") String userName,
                                @RequestParam(value = "password") String password)
    {
        return userService.validateUser(userName,password);
    }
}

总体目录结构如下:

image-20210801181953037

运行xxxApplication启动类

image-20210801185620501

然后打开postman

image-20210801182045665

通过,好耶

废话连篇

至少从现在看来,一个算是能跑的后端项目建立了,以下是碰到的一些问题:

1.无法通过Autowired注入ServiceImpl类

image-20210801195715107

原因:未在对应的ServiceImpl里面加入@Service注解

解决方法:

image-20210801195801291

2.mapper不存在

image-20210801195919471

原因:启动类未加@MapperScan注解

解决方法:

image-20210801200011821

3.mapper报空

image-20210801200108626

原因:使用mapper时未加Resource注解

解决方法:

image-20210801200154300

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程的实战源码是我在 GitHub 上开源项目 spring-boot-projects 的其一个项目代码,目前已有 2300 多个 star,项目截图如下: 由于项目比较受大家欢迎,因此心就出现了将它做成教学视频的想法,也就是你现在了解的这个课程《SpringBoot入门及前后端分离项目开发》,本课程是一个 Spring Boot 技术栈的实战类课程,课程共分为 3 大部分,前面两个部分为基础环境准备和相关概念介绍,第三个部分是 Spring Boot 项目实践开发。Spring Boot 介绍、前后端分离、API 规范等内容旨在让读者更加熟悉 SpringBoot 及企业开发需要注意的事项并具有使用 SpringBoot 技术进行基本功能开发的能力;这最后的项目实战为课程的主要部分,我会带着大家实际的开发一个前后端分离Spring Boot 实践项目,让大家实际操作并从无到有开发一个线上项目,并学习到一定的开发经验以及其的开发技巧,旨在让读者具有将 Spring Boot 真正应用于项目开发的能力; 以下为实践项目的页面和功能展示,分别为:登录页面 列表页面(分页功能) 图片上传功能 富文本编辑器整合使用 实践项目的主要功能和页面就是这些,通过项目展示大家也能够感受到,在实际应用开发的高频次功能都已经实现,稍加修改就可以运用到企业开发,整个项目的开发模式为前后端分离的模式,即 Spring Boot 提供后端接口,前端页面通过 Ajax 异步调用接口的方式与后端服务器进行交互并将数据填充至页面,这也是目前企业开发比较重用的开发模式,希望大家能够了解并且能够实际的上手开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值