《风靡商城》02技术学习--项目搭建与运行测试

98 阅读4分钟

一、项目整合与部署存在的问题

1.1SSM手动整合存在的问题

步骤多、配置繁琐

  • 创建maven项目
  • 部署mybatis:添加依赖,创建配置文件
  • 部署spring、SpringMVC:添加依赖,创建配置文件
  • 添加整合依赖
  • 整合配置

项目进行服务器部署步骤繁琐 image.png

1.2如何简化这些繁琐的配置和部署步骤?

  • springboot就是一个可以简化整合过程中复杂配置的框架
  • springboot在创建项目时会内置tomcat

二、springboot简介

2.1概念

  • 随着动态语言的流行,java语言的开发就显得格外笨重:配置繁琐、开发效率低、项目部署麻烦、集成第三方技术难度大
  • 在这种情况下,springboot就应运而生
  • springboot采用了约定大于配置、习惯优于配置(将我们习惯的配置提前配置好,依据要求进行加载)的理念快速搭建的开发环境,我们无需或者很少的进行相关配置就能快速的将项目运行起来

2.2优点

  • 能够快速的搭建项目
  • 对主流的开发框架都提供了无配置集成(SpringBoot内置了配置)
  • 项目可以独立的运行、无需单独的配置Servlet容器(内置Tomcat)
  • 极大的提高了开发和部署效率
  • 提供了运行时的监控系统(日志等)
  • springboot为springcloud提供了基础(与云计算/原生有天然的集成)

2.3缺点

  • 由于所有配置都是内置的,保措时定位比较困难
  • 版本迭代速度比较快、有些版本改动比较大(增加学习成本)

三、第一个springboot应用

  • 体验:基于springboot的整合SpringMVC
  • springboot应用需要依赖远程的服务器进行创建(idea用spring initializr连接远程服务器创建项目)

远程服务器:

3.1创建项目

3.1.1File-new-project

image.png

3.1.2填写项目信息

image.png

3.1.3选择项目依赖

image.png

3.1.4网页版创建springboot项目

若创建基于idea创建失败则使用网页版创建

  • 输入start.spring.io -在其中填写项目信息 -点击generate生成项目包并下载 -将下载的项目解压到目录下 -用idea打开该项目

image.png

3.2配置项目-MyBatis

3.2.1springboot项目结构

  • springboot不需要webAPP,
  • 有一个默认类(启动类)不需要删除修改(原来启动tomcat,现在启动主类)
  • 在resource中有两个文件夹(static-静态资源目录,目录中的资源不会被拦截;templates-模板目录,用于存放项目中的动态模板JSp、Thymeleaf),一个文件application-springboot应用的配置文件,用于进行开发者的自定义配置或者对spring的配置进行修改

image.png

3.2.2自定义配置值

  • springboot 帮助我们完成通用配置,但是像数据库连接地址、账号、密码还是需要手动配置的
  • 修改mysql驱动的版本(选择性)
  • 在springboot 主文件application中配置数据源、映射路径、实体类路径
  • 修改mysql驱动的版本(选择性)

image.png

  • 在application中配置数据源
  • 配置映射文件和实体类文件
#配置数据源(key必须按照springboot要求写)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/db_2010_mybatis?characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root
#映射文件mapper路径
mybatis.mapper-locations=classpath:mappers/*Mapper.xml
#配置实体类的包名
mybatis.type-aliases-package=com.qfedu.springboot.demo.entity

image.png

  • 在springboot启动类通过@MapperScan注解指定DAO的包名
@MapperScan("com.qfedu.springboot.demo.dao")

image.png

3.3启动项目

3.3.1启动

-springboot应用自带servlet容器Tomcat,因此无需进行额外的服务器配置,运行启动类即可启动一个搭配ring项目

  • 注意问题:jdk版本要一致(pom.xml)
  • 当jdk低于17时,springboot版本要选择低于3.0的

3.3.2测试

@Data
@NoArgsConstructor无参构造系
@AllArgsConstructor所有参构造
@ToString
  • 在idea中添加xml文件的方法 image.png

步骤(添加用户信息)

  • 先创建用户表的数据库(users)
  • 做持久层,创建实体类(User)
  • 完成Dao操作(UserDAo接口)Dao中与操作相关(增删查改)
  • 在mappers中新建UserMapper.xml对接口(UserDAo进行操作), useGeneratedKeys="true" keyProperty="userId"主键回填 -新建service层(与业务相关)
  • 创建service接口(UserService)
  • 创建userServiceImpl,实现userService接口进行用户注册业务
  • 新建UserController,将项目表现在前端(业务请求)

用户表的数据库users

image.png

image.png 创建用户表实体类User

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {
    private int userId;
    private String userName;
    private String userPwd;
    private String userRealname;
    private String userImg;
}

创建UserDAO,完成DAO层操作(增删改查)

package com.qfedu.springboot.demo.dao;

import com.qfedu.springboot.demo.entity.User;

public interface UserDAO {
    public int insertUser(User user);
}

创建useerMapper.xml,注入UserDAo,执行用户插入操作

<insert id="insertUser" useGeneratedKeys="true" keyProperty="userId">
    insert into users(user_name,user_pwd,user_realname,user_img)
    values(#{userName},#{userPwd},#{userRealname},#{userImg})
</insert>

创建业务层userService

public interface UserService {
    public User userRegister(User user);
}

创建userServiceImpl,实现userService接口进行用户注册业务

@Service
public class UserServiceImpl implements UserService {
//    调用userDao层,并注入
    @Resource
    private UserDAO userDAO;
    @Override
    /**
     * 用户注册
     * @param user
     * @return 如果注册成功则返回user对象(带有id),注册失败返回null
     */
    public User userRegister(User user) {
        int i = userDAO.insertUser( user );
        if(i>0){
            return user;
        }else{
            return null;
        }

    }
}

新建UserController,将项目表现在前端(业务请求)

@Controller
@RequestMapping("/user")

public class UserController {
//    注入service层
    @Resource
    private UserService userService;
//    浏览器前端访问路径,返回对象userServiceImpl注入给controller
    @RequestMapping("/register")
    //    返回Jason对象
    @ResponseBody

    public User register(User user){
        return userService.userRegister( user );

    }
}