对SpringBoot的详细学习(整合持久层,整合视图层。。。)

本文详细介绍了Spring Boot的优势、使用方法,重点讲解了Spring Boot如何整合JSP、Thymeleaf视图技术以及持久层的JdbcTemplate和MyBatis。Thymeleaf的常用标签如`th:text`, `th:if`等得到阐述,同时讨论了Spring Boot对JDBC的封装和ORM框架MyBatis的集成。" 42083371,1360544,U-boot-2014.10移植实践:NAND Flash启动解析,"['u-boot', '移植', 'NAND Flash', 'ARM架构', '嵌入式开发']
摘要由CSDN通过智能技术生成

Spring Boot

Spring Boot 是Java领域的第一框架。

通过Spring Boot可以快速构建一个基于Spring框架的Java Application, 简化配置,自动装配。

JavaConfiguration 用 Java类替代XML的配置方式。

Spring Boot对常用的第三方库提供了配置方案,可以很好地和Spring进行整合,一键式搭建功能完备的Java企业级应用。

开箱即用是 Spring Boot 的特点

1.Spring Boot 的优势:

  • 不需要任何XML配置文件
  • 内嵌Tomcat,可以直接部署
  • 默认支持JSON数据,不需要进行转换
  • 支持RESTful
  • 配置文件非常简单,支持YAML格式

Spring Boot是一种只需要极少配置就可以快速搭建Spring应用,并且集成了常用的第三方类库,让开发者可以快速进行企业级应用开发。
Spring Boot 2.x要求必须基于Spring 5.x,Spring 5.x要求Java版本必须是8以上。

2.Spring Boot的使用

1.创建 Handler

@RestController
@RequestMapping("/hello")
public class HelloHandler {
   

    @GetMapping("/index")
    public String index(){
   
        return "Hello Spring Boot";
    }
}

2.创建启动类

package com.southwind.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootApplication {
   

    public static void main(String[] args) {
   
        SpringApplication.run(SpringbootApplication.class, args);
    }

}

启动类必须覆盖所有与业务相关的类: 启动类所在的包必须是业务类所在包的同包或者父包,如果没有覆盖,业务类就不会自动装配到IOC容器中

Spring Boot 配置文件

自定义banner

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nNjFP3Cg-1621597689627)(D:\图片\boot.png)]

Properties

#端口
server.port=8888
#项目访问路径
server.servlet.context-path=/springboot
#cookie失效时间
server.servlet.session.cookie.max-age=100
#session失效时间
server.servlet.session.timeout=100
#编码格式
server.tomcat.uri-encoding=UTF-8

YAML

YAML是不同于Properties的另外一种文件格式,同样可以用来写配置文件, Spring Boot默认支持YAML格式,YAML的优点在于编写简单,结构清晰,利用缩紧的形式来表示层级关系。

相比于Properties, YAML可以进一步简化配置文件的编写, 更加方便。

server:
  port: 8888
  servlet:
    context-path: /springboot
    session:
      cookie:
        max-age: 100
      timeout: 100
  tomcat:
    uri-encoding: UTF-8

需要注意的是YAML格式书写规范非常严格,属性名和属性值之间必须至少一个空格。

Spring Boot 会自动集成各种框架

只要你在pom.xml中配置了相关框架的依赖。那么Spring Boot就会自动装载

如果Properties和YAML两种类型的文件同时存在,Properties 的优先级更高。

在这里插入图片描述

优先级顺序如下所示:

1、根路径下的config中的配置文件

2、根路径下的配置文件

3、resources 路径下的config中的配置文件

4、resources路径下的配置文件

可以直接在Handler中读取YAML文件中的数据,比如在业务方法中向客户端返回当前服务的端口信息。

package com.southwind.springboot.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/hello")
public class HelloHandler {
   

    @Value("${server.port}")
    private String port;

    @GetMapping("/index")
    public String index(){
   
        return "当前服务的端口号:"+this.port;
    }
}

@Value注解同样适用于Properties文件.

3.Spring Boot 整合 JSP

Servlet接口,类- -旦实现这个接口,该类就具备了给客户端做响应的功能。

Servlet的体系

最顶层是Servlet接口

第二层: GenericServlet,屏蔽其他不需要的方法

第三层: HttpServlet,根据请求类型再进行分发

第四层:开发者自定义的Servlet

Spring Boot 与视图层的整合
  • JSP
    • JSP 的弊端:效率低
    • JSP底层是Servlet
    • JSP转换为Servlet,再通过Servlet的方式将视图信息响应给客户端。
  • Thymeleaf

Java Server Page,是Java提供的一种动态网页技术,底层是Servlet,可以直接在HTML中插入Java代码。

JSP 底层原理:

JSP 是一种中间层组件,开发者可以在这个组件将Java代码与HTML代码经行整合,由JSP引擎将组件转为Servlet,再把开发者定义在组件中的混合代码翻译成Servlet的响应语句,输出给客户端。

1.创建基于maven的项目,添加依赖

<parent>
    <artifactId>spring-boot-starter-parent</artifactId>
    <groupId>org.springframework.boot</groupId>
    <version>2.4.5</version>
  </parent>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
     <groupId>org.apache.tomcat.embed</groupId>
      <artifactId>tomcat-embed-jasper</artifactId>
      <version>9.0.45</version>
    </dependency>
  </dependencies>

2.创建Handler

package com.southwind.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloHandler {
   

    @RequestMapping("/index")
    public ModelAndView index(){
   
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("index");
        modelAndView.addObject("mess","hello Spring Boot");
        return modelAndView;
    }
}

3.创建JSP

<%@ page contentType="text/html;charset=UTF-8" language="java"  isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
    <!-- Bootstrap -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
    <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
    <script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
    <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
</head>
<body>
<h1>Index</h1>
${mess}
</body>
</html>

4.application.yml

server:
  port: 8888
spring:
  mvc:
    view:
     prefix: /
     suffix: .jsp

5.Application

package com.wdzl;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
   

    public static void main(String[] args) {
   
        SpringApplication.run(Application.class, args);
    }
}

实际应用

JSTL

1.pom.xml

    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

 <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.10</version>
    </dependency>

Lombok的功能是简化实体类的编写工作,常用的方法getter、setter、toString 等方法都可以由Lombok自动生成,开发者不需要手动编写,Lombok的使用需要安装插件。

在这里插入图片描述

2.创建实体类

package com.southwind.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class User {
   
    private Integer id;
    private String name;
}

3.Dao层及其实现类

public interface UserDao {
   

    Collection<User> finAll();
    User findById(Integer id);
    void addUser(User user);
    void deleteById(Integer id);
    void update(User user);
}
@Repository
public class UserDaoImpl implements UserDao {
   
    private static Map<Integer,User> map;

    static {
   
        map = new HashMap<>();
        map.put(1,new User(1,"张三"));
        map.put(2,new User(2,"李四"));
        map.put(3,new User(3,"王五"));
    }


    @Override
    public Collection<User> finAll() {
   
        return map.values();
    }

    @Override
    public User findById(Integer id) {
   
        return map.get(id);
    }

    @Override
    public void addUser(User user) {
   
        map.put(user.getId(),user);
    }


    @Override
    public void deleteById(Integer id) {
   
        map.remove(id);
    }

    @Override
    public void update(User user) {
   
        map.put(user.getId(),user);
    }
}

4.Service层的接口及其实现类

public interface UserService {
   

    Collection<User> finAll();
    User findById(Integer id);
    void addUser(User user);
    void deleteById(Integer id);
    void update(User user);
}
@Service
public class UserServiceImpl implements UserService {
   

    @Autowired
    private UserDaoImpl userDao;

    @Override
    public Collection<User> finAll() {
   
        return userDao.finAll();
    }

    @Override
    public User findById(Integer id) {
   
        return userDao.findById(id);
    }

    @Override
    public void addUser(User user) {
   
        userDao.addUser(user);

    }

    @Override
    public void deleteById(Integer id) {
   
        userDao.deleteById(id);
    }

    @Override
    public void update(User user){
   
        userDao.update(user);
    }
}

5…Controller

package com.southwind.controller;

import com.southwind.pojo.User;
import com.southwind.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;


@Controller
public class UserHandler {
   
    @Autowired
    private UserService userService;

    @RequestMapping("/findAll")
    public ModelAndView findAll(){
   
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("index");
        modelAndView.addObject("list",userService.finAll());
        return modelAndView;
    }

    @RequestMapping("/findById/{id}"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值