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

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

在这里首先我要声明一下我个人的感觉如果你会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>

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

咱们创建目录 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的效果。咱们在webapp下面新建一个jsp包然后 写一个界面 这次咱们验证使用mapper.xml的哪个方法。顺便看看mapper.xml的配置成功没有。

直接看效果:

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

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

猜你喜欢

转载自www.cnblogs.com/lifan666/p/springbootDemo.html
今日推荐