Spring Boot(一)

Spring Boot Start

第一次看Spring Boot相关的文档,用来慢慢理解SpringBoot的机制,这里我找到一个案例,这个案例实现的功能就是:将数据库里的表格userlist,查询,然后将数据返回给前端的接口。

一个简单 Spring Boot 项目

  • 1、使用Maven来配置包的依赖关系

  • 2、选择项目所需要的依赖包
    这里是一个很简单的项目,所以选了Spring Boot DevTools、Spring Web、JDBC API、Mybatis FrameWork、PostgreSQL Driver 五个依赖包。(新建项目配置的Maven总是出现引入问题,需要在Setting里对项目进行重新设置,第一次创建SpringBoot项目需要一段时间来下载各种依赖)

  • 3、直接启动是会报错的,因为没有对数据库进行配置,在resources找到application.properties文件,修改为yml文件来对数据库进行配置。

server:
  port: 8088
spring:
  datasource:
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://localhost:5432/databasename
    username: username
    password:password 
  • 4、启动Spring Boot ,可以看到能够正常启动,访问http://localhost:8088/这个端口,我们能够拿到一个一个启动信息,Whitelabel Error Page,因为我没有在controller中写入任何返回信息。
  • 5、在com.example.projectname下创建一个controller包,然后新建一个UserController类,给这个类添加一个RestController注解(这个是Spring 的Controller与ResponseBody两个的简称)。被注解的类将视为控制器,给类的函数加上一个处理请求地址映射的注解RequestMapping(“abc”),
package com.example.demoproject.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    @RequestMapping("abc")
    public String getString(){
        return "Hello World";
    }
}
  • 6、重新启动项目,那么在网页访问端口地址:http://localhost:8088/abc,就拿到了Hello World信息,那么最简单的一个项目就这样。

  • 7、前端日常访问后端,拿到的数据一般都是类似JSON或者JSON数据,所以我们在controller包中新建一个类,RequestMapping能自动帮我们把类转换成JSON数据类型。那么我们写一个简单的UserDemo类,然后在前端http://localhost:8088/def 这个访问拿到它

public class UserDemo {
    private String name;
    private int age;

    public UserDemo(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

    @RequestMapping("def")
    public UserDemo getUserDemo(){
        UserDemo demo = new UserDemo("demo", 100);
        return demo;
    }
  • 8、controller包UserController层写入,那么我就能够拿到后端返回的一个对象的JSON格式的结构数据{“name”:“demo”,“age”:100}

从数据库查找到数据并返回给前端请求。

1、数据库里有一个表
在这里插入图片描述
2、在com.example.project下建一个entity包,用来存放跟数据库表中一样的类实体User,变量id,name,age,email,以及构造函数与Get(),Set()方法。
3、在com.example.project下建一个mapper包,用来映射数据库返回的数据,一个List类型的方法,并通过Mapper来映射出返回的数据(不太懂这个

package com.example.demoproject.mapper;
import com.example.demoproject.entity.User;
import java.util.List;
@Mapper
public interface UserMapper {
    public List<User> findAll();
}

4、在resources中创建一个mapper文件夹(跟3最好名字一样,这样容易对应查找bug),在mapper文件夹新建一个UserMapper的xml文件,因为在java中对数据库的访问很麻烦,这里使用Mybatis来对数据库进行操作(可以在IDEA创建MyBatis文件模板)。
这里的namespace就是映射的接口文件路径,select id是接口中没有实现的抽象方法findAll(),resultType就是返回后的数据类型跟entity的User类进行对应

<?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.example.demoproject.mapper">
<select id="findAll" resultType="com.example.demoproject.entity.User" >
    select *
    from userlist;
</select>
</mapper>

5、在com.example.project中创建业务逻辑,因为上面已经返回了数据库的数据,我们可以在service包里对数据进行处理,然后再返回给前端,

package com.example.demoproject.service;

import com.example.demoproject.entity.User;
import com.example.demoproject.mapper.UserMapper;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;
@Service//这里添加一个业务处理注解
public class UserService {
	//通过接口UserMapper 返回的一个对象
	@Autowired//自动装配,以为UserMapper是被Mapper注解的一个接口,这里的userMapper数据就是从数据库查找到的数据。
    public UserMapper userMapper;

    public List<User> dbDataProcess() {
        /**对数据进行一个筛选,筛选出年龄大于30的User
        * 首先是被自动*/
        List<User> dbOriginData = userMapper.findAll();
        List<User> dataResult = dbOriginData.stream().filter(ele -> ele.getAge() > 30).collect(Collectors.toList());
        return dataResult;
    }
}

6、这里仍然报错,因为么有在application.yml对Mybatis进行映射,也就是com.example.project的UserMapper跟resources的mapper文件夹的UseMaper.xml没有对应上,也就是从数据库拿到的数据不知道返回给哪一个接口?


server:
  port: 8088
spring:
  datasource:
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://localhost:5432/databasename
    username: username
    password: password

mybatis:
  mapper-locations: classpath:mapper/*.xml

7、在controller中给处理前端的请求映射地址加上一个注解,因为UserService是一个类,我们没有给这个类创建对象,所以在这里使用一个自动装配的一个注解来创建一个类对象@Autowired,

    @Autowired
    private UserService userService;

    @RequestMapping("abc")
    public List<User> getUser() {
        return userService.dbDataProcess();
    }

8、最终结果
在这里插入图片描述
整体的项目地址在github上。

从本地返回给前端一个页面

前面我写了一个返回一个筛选过后的一个List,Spring Boot 自动处理为一个JSON格式文件,如果我们需要返回一个页面的时候,用同样的注解方法,@RestController是不行的,因为RestController的注解==ResponseBody+Controller,当使用RestController时候是无法返回指定页面的,因为这时候配置的视图解析器internalResourceViewResolver不起作用,返回的内容就是return里的内容(一般html的名字),如果需要返回特定的页面时候,就不要使用RestController,新建一个用来返回页面的类,使用Controller来来进行注解,那么就可以了。

@Controller
public class WebUser {
    @RequestMapping("hello")
    public String getHTML(){
        return "hello";
    }
}

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
       p{color: red;background: burlywood}

    </style>
</head>
<body>
    <p >
        Hello world data
    </p>
</body>
</html>

这里之所以能够在getHTML()这个方法返回hello.html这个页面,其实一方面是注解来对访问进行映射,还有就是通过yaml(yml)配置文件,使用thymeleaf这个包来实现了"hello"====>hello.html的映射(这里的路径是templates文件夹下的html)。

server:
        port: 5439
spring:

        datasource:
                driver-class-name: org.postgresql.Driver
                url: jdbc:postgresql://localhost:5432/test
                username: postgres
                password: 721123
        thymeleaf:
                prefix: classpath:/templates/
                suffix: .html

这里还出现了一个问题就是我们在配置thymeleaf这个依赖包,感觉这里很多的配置文件就是需要使用springboot下的依赖包,而不能直接使用第三方的依赖包,thymeleaf用于MVC结构中的View层。

	<dependency>
			<groupId>org.thymeleaf</groupId>
			<artifactId>thymeleaf</artifactId>
			<version>3.1.0.M3</version>
	</dependency>
	换成就能完成相应的映射,
	<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
     </dependency>
     

Spring Boot 框架结构

springboot的一般结构

  • java 用来存放我们的代码

  • resourece 用来存放资源,/

    • static一般用来存放静态资源,如:css,img,js等,/templates用来存放我们的网页资源
    • application.properties这个是整个项目的应用配置,比如项目的数据库(上面的postgreSQL数据库的返回数据配置,数据库的端口,类型,ulr,name,password),mybatis的配置(),thymeleaf的配置(上面案例的返回网页),不过一般会把它改成yml格式,这这样看其阿里更有层次
  • pom.xml这里是Maven的配置文件,用来引入所有的相关SpringBoot包,我们新建项目选择的项目比如postgresql,mybatis,thymeleaf这些东西都在这里,如果前面忘了引入,也可以通过这里的maven配置文件添加,不过这里要添加的是SpringBoot的版本,如果直接引入官方版,可能导致不能使用。

  • test 测试类 为了快速测试结果(目前还没用到),一个blog

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值