如果这篇博客能给你带来帮助不胜荣幸,如果有不对的地方,都是码农欢迎指正。直接进入正题

在这里首先我要声明一下我个人的感觉如果你会ssm(spring+mybatis+springmvc)的话,那么你可以在五分钟之内就搞定了,如果你不会也无所谓。

我个人是感觉springboot项目其实就是对ssm项目的一个管理和整合。如果你用的eclipse那么你需要下载插件,所以我建议大家直接下载sts(Spring Tools Suite)这个软件.官网自己下载

我使用的是sts这个树叶的软件。现在直接上:

1:第一  新建(new)找到Spring Starter Project(这个是创建springboot项目的),然后点击就创建一个springboot项目了。

然后会让你填写一下你的项目的具体的一些信息。最后点击next(也可以选择使用默认的东西)

然后会让你选择一些maven 的依赖 全部都是从下面的列表里找的比如从sql 里面找到mysql Driver驱动等等,需要什么就可以添加什么依赖(根据实际需求来添加)

添加完成之后创建项目的话你的项目里面就会自动下载这些依赖了,到时候前往pom.xml里面进行查看。

创建的过程可能比较慢 根据你的网速来定义 请大家耐心等待  至此恭喜你你已经创建了一个简单的springboot 项目了,里面需要有一些地方给大家讲一下:

我是用的导航图的样式来看项目,大家可以使用window--> view-->Navigator来修改视图模式

有几个框从上往下依此介绍:

第一个****application.java的文件是整个项目的启动类,所有的项目都需要从这里启动(切记切记)

然后resources这个文件加下放非Java文件资源的,比如说static下存放css和js和img等等 temolates文件下是存放html界面的,这个文件夹下类似ssm项目下的WEB-INF 文件夹下

是受到保护的不可以随便访问。然后最重要的就是application.properties(application.yml)文件。这个文件可以说是springboot项目的一个全局配置文件包含众多信息比如说:端口号的配置 datasource数据源的配置我一般习惯使用application.yml来进行一个配置。最后一个就是maven依赖的pom.xml依赖了。如果你的pom.xml如果跟我的一样报了错:

把你的版本号改成小一点的,比如说2.1.4等等。还有一点就是你的application.properties(application.yml文件)下面的webapp下面的文件夹你需要添加点东西,因为你使用的是war包,所以需要新建上一个文件夹(WEB-INFO)然后里面放上一个web.xml文件 和之前ssm的一样就可以了,然后web.xml文件里面什么也可以不用写。 到此你的项目就不报错了。

例如我的web.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>myspringbootDemo</display-name>
</web-app>

其实这个东西:如果你不需要使用jsp或者其他的什么的完全可以把没有用的东西干掉。

然后开始写一点东西。写两个查询吧一个注解的一个配置文件的。老规矩还是按照学生表来实现:

咱们创建目录 student,然后在他下面创建几个包(model(实体类),dao(持久层),service(业务层),web(控制层) )可以看我的创建目录 然后在启动类的上面进行配置扫描其实如果你的实体类和接口要是写在了*****.application那个启动类的同级或统计一下目录,那么会自动帮你扫描。但是我本人也会进行强迫症的扫描。

好的然后就是上代码:实体类详情什么的我会发给大家项目的参考的。现在就说主要工作流程:然后你需要创建dao层的接口。这里要注意的是:因为你少了很多配置,然后呢你需要使用的就是注解了。所以你在创建接口的时候就需要给他加上注解@Mapper(就相当于告诉项目我这个类呢是接口):然后呢正常写接口,我们写两个方法一个是使用注解的主键查询。另一个是使用注解的形式写mapper.xml的查询:当你使用注解查询的时候你就需要在你的项目上面写上你的相关的注解比如查询使用(@select)修改使用 @Update 删除使用@Delete  等等不在一一举例 。然后括号里面写你的sql语句该怎么写就怎么写,跟ssm项目完全一样。 业务层和控制层同样使用注解来进行配置(可以这样理解:告诉项目这个是业务层,这个是控制层),配合着上面的扫描一起使用。

当然了在控制层唯一有一点不太一样的地方就是一般情况下我们再看控制层有的时候会加上一个注解@Controller 现在呢多了一个@RestController这个注解,把鼠标放上去的时候就会出现它比@Controller多了一个注解那就是@ResponseBody,也就是说如果使用@RestController这个注解的话你的控制层的所有方法返回的数据格式全部是json串。(当然了我个人建议大家使用@Controller,然后可以在每个方法上面加上@ResponseBody),当你写到这一步的时候,不妨可以停下来跟我的对照一下看看是否一样啊:

实体类:

package com.company.demo.student.model;

public class Student {

    private Integer id;
private String name;
private Integer age;
private String sex; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public Student(Integer id, String name, Integer age, String sex) {
super();
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
} public Student() {
// TODO Auto-generated constructor stub
} @Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + "]";
} }

dao层:

package com.company.demo.student.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select; import com.company.demo.student.model.Student; @Mapper
public interface StudentMapper { @Select("select * from student where id =#{id}")
public Student queryById(Integer id); public List<Student> findAll();
}

业务层的接口:

package com.company.demo.student.service;

import java.util.List;

import com.company.demo.student.model.Student;

public interface StudentService {

    public Student queryById(Integer id);
public List<Student> findAll();
}

业务层的实现类:

package com.company.demo.student.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.company.demo.student.dao.StudentMapper;
import com.company.demo.student.model.Student; @Service
public class StudentImpl implements StudentService{ @Autowired
private StudentMapper studentMapper; @Override
public Student queryById(Integer id) {
// TODO Auto-generated method stub
Student queryById = studentMapper.queryById(id);
return queryById;
} @Override
public List<Student> findAll() {
// TODO Auto-generated method stub
List<Student> findAll = studentMapper.findAll();
return findAll;
} }

控制层:

package com.company.demo.student.web;

import java.util.List;

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.ResponseBody;
import org.springframework.web.bind.annotation.RestController; import com.company.demo.Message.Result;
import com.company.demo.Message.ResultCode;
import com.company.demo.student.model.Student;
import com.company.demo.student.service.StudentService; @Controller
public class StudentController { @Autowired
private StudentService studentService; @ResponseBody
@RequestMapping("/findAll")
public Result findAll(){
Result result = new Result();
List<Student> findAll = studentService.findAll();
if(findAll!=null){
result.setData(findAll);
result.setResultCode(ResultCode.SUCCESS);
return result;
}else{
result.setResultCode(ResultCode.RESULT_IS_NOT);
return result;
}
} @ResponseBody
@RequestMapping("/selectById")
public Result selectById(Integer id){
Result result = new Result();
if(id!=null){
Student queryById = studentService.queryById(id);
if(queryById!=null){
result.setData(queryById);
result.setResultCode(ResultCode.SUCCESS);
return result;
}else{
result.setResultCode(ResultCode.RESULT_IS_NOT);
return result;
}
}else{
result.setResultCode(ResultCode.PARAM_IS_BLANK);
return result;
}
} }

完事了之后,因为是演示我就简单的做一下数据的返回处理 自己写了两个两个类当成数据的返回处理类吧算是:

第一个数据的返回类:

package com.company.demo.Message;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include; @JsonInclude(Include.NON_NULL)
public class Result{ private ResultCode resultCode;
private String message;
private Object data; public ResultCode getResultCode() {
return resultCode;
}
public void setResultCode(ResultCode resultCode) {
this.resultCode = resultCode;
} public Result() {
// TODO Auto-generated constructor stub
} public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
} public Object getData() {
return data;
} public void setData(Object data) {
this.data = data;
} //查询成功返回的东西
public static Result success(Object data){
Result result = new Result();
result.setResultCode(ResultCode.SUCCESS);
result.setData(data);
return result;
} //添加删除修改成功之后调用
public static Result success(){
Result result = new Result();
result.setResultCode(ResultCode.SUCCESS);
return result;
} //添加失败调用
public static Result failure(ResultCode resultCode){
Result result = new Result();
result.setResultCode(resultCode);
return result;
} //其他失败调用的
//查询成功返回的东西
public static Result success(Object data,ResultCode resultCode){
Result result = new Result();
result.setResultCode(resultCode);
result.setData(data);
return result;
} }

第二个:枚举的参数类型类:

package com.company.demo.Message;

public enum ResultCode {

    SUCCESS(1,"成功"),
ERROR(0,"错误"), PARAM_IS_INVALID(1001,"参数无效"),
PARAM_IS_BLANK(1002,"参数为空"),
PARAM_TYPE_BIND_ERROR(1003,"参数类型错误"),
PARAM_NOT_COMPLETE(1004,"参数缺失"), USER_NOT_LOGGED_IN(2001,"用户未登录,访问的路径须验证,请登录"),
USER_LOGIN_ERROR(2002,"账户不存在或密码错误"),
USER_ACCOUNT_FORBIDDEN(2003,"账号已被禁用"),
USER_NOT_EXIST(2004,"用户不存在"),
USER_HAS_EXISTED(2005,"用户已存在"), RESULT_IS_NOT(5000,"没有符合您想要的查询结果"),
RESULT_OTHER_ERROR(9999,"没有进入方法,直接跳转返回"); private Integer code;
private String message; private ResultCode(Integer code, String message) {
this.code = code;
this.message = message;
} public Integer code() {
return this.code;
} public String message() {
return this.message;
} }

接下来这个是重点:那就是springboot 的全局一个简单配置: 我把之前resource 下面的那个application.properties 改成了application.yml格式.(用习惯了)

server:
port: 8085 #端口号
servlet:
context-path: /myspringboot #你自定义的虚拟的项目名 方便实用
spring:
mvc:
view:
suffix: .jsp #因为有的人可能用jsp 所以添加jsp的配置
prefix: /jsp/ #所以就配置一下前后缀 其实正常情况下应该是放到/WEB-INF/下面的。
             #我为了方便演示就放到了可以直接访问的目录下,你可以自由放置
static-path-pattern: /static/** #过滤静态资源
thymeleaf: #springboot支持html文件 使用thymeleaf配置
cache: false
encoding: UTF-8
mode: LEGACYHTML5
prefix: classpath:/templates/
suffix: .html
check-template-location: true
datasource: #数据源配置
url: jdbc:mysql://localhost:3306/teststudent?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver #驱动类 看你的数据库是六以上的吗?版本高的需要使用 这个驱动
mybatis:
mapper-locations: classpath*:xml/*.xml #这个位置是配置 是配置dao层的mapper.xml存放的位置的 其中第一个是你新建的包名是什么就是什么
type-aliases-package: com.ygjy.hospital.model #实体类 别名配置 #配置pagehelper
pagehelper:
helper-dialect: mysql
reasonable: true
support-methods-arguments: true
params: count=countSql

然后如果你是用的是jsp 那么你需要干两件事      第一添加servlet 依赖:

     <!--jsp页面使用jstl标签 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!--用于编译jsp -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>

第二:去那个配置文件里面进行配置:因为我刚才已经进行配置了就是配置jsp的视图解析:所以不用再配置了。

还有因为咱们还打算使用mapper.xml:所以我们需要新建一个文件夹来存放:我们在resource文件夹下新建一个叫xml()的文件:(这个跟上面的application.yml里面的配置相呼应)。然后在 pom.xml文件里面加入:<build></build>标签里面添加:  添加完成了之后你就可以使用mapper.xml文件了:

        <resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>

里面可以写你的mapper.xml例如我写了一个:

<?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.company.demo.student.dao.StudentMapper">
<resultMap id="student" type="com.company.demo.student.model.Student">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="age" jdbcType="INTEGER" property="age" />
<result column="sex" jdbcType="VARCHAR" property="sex" />
</resultMap> <!-- 搜索全部 -->
<select id="findAll" resultMap="student">
select * from student where 1=1;
</select> </mapper>

到达这里呢!其实你的项目已经算是好了!现在让我们启动一下项目:在这里请大家记住springboot 项目跟大家说过:有一个固定的启动类:现在我们找到那个启动类右击 run as

spring boot app 点击一下那个小树叶就可以了!

你会看到  spring 的字样:

我们先来演示一下使用注解方法的那个  打开你本地的postman 如果没有直接使用浏览器都可以,测一下接口:给他一个默认的参数比如说  我给了一个 5

效果展示:

因为本人的的前台功能比较菜,所以就简单的写一个jsp的吧,目的就是为了两个验证第一 :看看我刚才的配置是否成功了如果springboot项目能兼容jsp就说明配置成功了。

(前台jsp已上传百度云,可自行下载。)

下面直接展示jsp的效果。咱们在webapp下面新建一个jsp包然后 写一个界面 这次咱们验证使用mapper.xml的哪个方法。顺便看看mapper.xml的配置成功没有。

直接看效果:

到这里呢!就算是完成了,其实还有很多东西没有放进去,以后有时间的话会不断晚上的 比如逆向工程 分页 上传 导出什么的,打算写但是今天写到这里有点累了,其实都跟ssm没什么区别,以后有机会不断完善。最后附上源码给大家吧!(虽然自己也是刚入行的菜鸡)不给源码的人一般不是善良的码农。

链接: https://pan.baidu.com/s/1fInJe4AtSXCAlfMcFa5k6Q 提取码: maay

springboot项目的创建和兼容jsp和注解开发,详细有效(注解和配置两种)的更多相关文章

  1. IDEA中SpringBoot项目快速创建单元测试

    如何在IDEA中对于SpringBoot项目快速创建单元测试 创建测试用例 右键需要进行测试的方法,选择GO TO然后选择Test 点击Create New Test 勾选需要创建单元测试的方法 然后 ...

  2. idea:spring initializr无web勾选,maven方式搭建springboot项目。jdk7创建springboot项目的版本不兼容问题。

    一.idea 使用spring initializr不选择web搭建springboot项目 1.file => new => project 2.直接next到finish结束. 3.完 ...

  3. SpringBoot项目的创建流程(初步)

    小伙伴们在学习的过程中大概也发现了这两个框架需要我们手动配置的地方非常多,不过做JavaEE开发的小伙伴们肯定也听说过“约定大于配置”这样一句话,就是说系统,类库,框架应该假定合理的默认值,而非要求提 ...

  4. springboot项目的创建

    创建springboot项目 包名和项目名 选择需要使用的框架,web 然后再点击下一步,完成即可创建springboot项目

  5. 多模块springboot项目启动访问不了jsp页面

    被springboot项目maven打包.启动.访问折腾的头都大了,一步一个坑,在解决了所有的问题之后,那种欣喜若狂的心情只有自己能体会,决定要好好记录一下了,废话不多说了,直接进入正题. 问题和排查 ...

  6. jsp中使用动态数据进行mySQL数据库的两种操作方法

    使用动态数据进行数据库内容的增删改查操作有两种方法: 在此定义数据库连接为conn 假设有表单进行数据输入并提交到处理页面一种是使用预编译格式: 其格式如下: String name = reques ...

  7. idea在springboot项目中没有【新建JSP选项】的解决方法

    https://blog.csdn.net/qq_26525215/article/details/53726690 转载于CSDN

  8. SpringBoot项目刚刚创建就报异常,Failed to configure a DataSource: 'url' attribute is not specified and no embedded 的解决办法

    错误信息: Description: Failed to configure a DataSource: 'url' attribute is not specified and no embedde ...

  9. 【JSP EL】EL表达式获取当前时间(两种方式)

    第一种方式: //先在代码段定义<% long date = new Date().getTime(); request.setAttribute("date", date) ...

  10. java poi操作创建xslx或xsl文件,存本地和进行网络传输两种方式集成

    package com.java.zxf.util; import java.io.IOException; import java.io.OutputStream; import java.net. ...

随机推荐

  1. dispatch_source_t定时器

    定时器简述 在iOS中,计时器是比较常用的,用于统计累加数据或者倒计时等,计时器大概有那么三种,分别是: NSTimer CADisplayLink dispatch_source_t 比较 1.NS ...

  2. 分布式拒绝服务攻击(DDoS)和僵尸网络(Botnet)

    DDos和僵尸网络是相辅相成的两种攻击手段,本文仅介绍基本概念,详细请查看文末参考资料. 分布式拒绝服务攻击(DDoS) 分布式拒绝服务攻击DDoS是一种基于DoS的特殊形式的拒绝服务攻击,是一种分布 ...

  3. java入门与进阶-P1.5+P1.6

    输入 Scanner输入语句介绍 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入. 下面是创建 Scanner 对象的基本语法: Sca ...

  4. Java进阶 P-2.1+P-2.2

    对象的识别 对于Java而言,要识别两个对象是否为同一个对象有两种方式: 一是根据内存地址识别("=="号 识别) 二是根据equals() .hasCode()方法识别(默认比较 ...

  5. chunjun同步两个带Kerberos认证的CDH集群数据

    最近在项目中遇到同步两个 CDH 数据文件的需求,调研了一圈,发现 datax 不支持两个 cdh 同时进行 kerberos 认证,因此切换到 chunjun,chunjun 在 kerberos ...

  6. drf 认证组件、权限组件、频率组件

    认证组件 访问某个接口 需要登陆后才能访问 #第一步 写一个登录功能 用户表 User表 UserToken表 :存储用户登录状态 [这个表可以没有 如果没有 把字段直接卸载User表上也可以] 登录 ...

  7. chatGPT vscode 体验

    体验秘钥 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 多人用可能有点卡,重在体验. 自己(中国)想注册账号如下 步骤一:找到入口 搜索Ope ...

  8. vue+element 返回数组或json数据自定义某列显示的处理--两种方法

    本文是作者开发一个业务需求时,将返回数据列表的其中一个数据长度很长的字段处理成数组,并将其作为子表显示的过程,具体样式如下(数据做了马赛克处理) 返回的过长字段数据处理(用分号分隔的一个长字段): t ...

  9. 大规模 IoT 边缘容器集群管理的几种架构-1-Rancher+K3s

    前文回顾 大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介 ️Reference: IoT 边缘计算系列文章 Rancher + K3s 简介 Rancher: Kubernetes ...

  10. 代码随想录算法训练营day01 | leetcode 704/27

    前言   考研结束半个月了,自己也简单休整了一波,估了一下分,应该能进复试,但还是感觉不够托底.不管怎样,要把代码能力和八股捡起来了,正好看到卡哥有这个算法训练营,遂果断参加,为机试和日后求职打下一个 ...