目录
使用注解的方式完成数据访问层接口(UserMapper)的设计,使用id查询某用户。 (实体类和数据访问层接口自行设计)
通过发送 POST 请求“/user/getuser/1”可以获取指定用户信息, 请将控制器(UserController)的完整设计代码写出(可省略服务层,直接调用数据访问层)。
使用注解的方式完成数据访问层接口(AccountMapper)的设计,在接口中定义一个方法实现根据登录账号和登录密码查询出账户信息。 (实体类和数据访问层接口自行设计)
运用Spring Boot框架,实现用户信息查询。账号表(t user)的结构如下(项目采用MyBatis作为ORM框架):
请根据自己理解概述Spring Boot怎么来集成MyBatis框架以及如何使用。
阅读下列application. yaml配置的一部分, 回答以下提问。
1. 关于 Spring Boot框架, 说法错误的是 ( )
2. 以下注解中哪个注解表示 Spring Boot的主程序启动类( )
3. 以下关于Spring Boot多环境配置文件名格式, 正确的是 ( )
4. 以下关于Spring Boot配置文件存放位置, 错误的是( )
解析:/java/目录通常用于存放 Java 源码,不属于配置文件的合法存放位置。
5. 关于 Spring Boot项目目录结构, 说法错误的是 ( )
6.下列关于 Spring Boot框架, 说法正确的是 ( ) 。
7.下列关于 Spring Boot框架特点描述中, 说法正确的是 ( ) 。
9.以下关于 Spring Boot多环境配置文件名格式, 正确的是 ( ) 。
10.下列关于 Spring Boot可以集成的框架中, 说法正确的是 ( ) 。
11.Spring Boot支持的配置文件类型是什么 ( ) 。
12.Spring Boot中的控制器的返回值可以是什么 ( ) 。
13.Spring Boot为整合Spring MVC实现 Web开发, 提供的功能特性不包括( ) 。
解析:Spring Boot 的自动配置主要针对 通用场景(如视图解析、消息转换),但拦截器属于 业务定制逻辑,需手动配置。
14.在Spring Boot项目中,我们通常使用哪个注解来声明一个 RESTful Web服务的控制器(
15.以下关于 Thymeleaf模板引擎页面标签的说法错误的是 ( ) 。
th:text:对文本内容进行 HTML 转义(如将 < 转为 <)。
16.Spring Boot的WEB 项目中默认内嵌的Servlet容器是 ( ) 。
17.Spring Boot的WEB项目中需要拓展MVC功能, 需要实现以下哪个接口 ( ) 。
19.在 Spring Boot 中, 下列所述哪个属性用于指定应用监听的端口号( ) 。
20.以下关于 Spring Boot整合Security相关说法错误的是 ( ) 。
解析:引入 Security 后,默认所有端点(包括 /index.html)需认证才能访问。首次访问会重定向到默认登录页 /login。
21.以下关于自定义用户退出 logout()方法及其说明错误的是( )。
解析:Spring Security 5.7+ 版本支持 GET 请求注销,通过配置 logoutRequestMatcher 实现
22.以下关于Spring Boot整合Security 中CSRF相关说法错误的是 ( )。
23.以下关于 RabbitMQ支持的工作模式原理相关说法错误的是( ) 。
解析:Work queues 工作模式必须通过交换器传递消息,无法直接使用队列
24.使用 RabbitTemplate类的convertAndSend()方法发送消息时, 路由键为 info. email配到以下哪种消息队列 ( )。
26.Spring Cloud 是一个“全家桶式”的技术栈,包含了很多组件。它的五大核心组件是个选项 ( )。
使用注解的方式完成数据访问层接口(UserMapper)的设计,使用id查询某用户。 (实体类和数据访问层接口自行设计)
答:
user类:
// User.java
public class User {
private Long id;
private String username;
private String email;
// Getter and Setter
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
// 其他Getter/Setter略...
}
userMapper:
// UserMapper.java
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface UserMapper {
@Select("SELECT id, username, email FROM users WHERE id = #{id}")
User selectById(Long id);
}
通过发送 POST 请求“/user/getuser/1”可以获取指定用户信息, 请将控制器(UserController)的完整设计代码写出(可省略服务层,直接调用数据访问层)。
package com.example.controller;
import com.example.entity.User;
import com.example.mapper.UserMapper;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/user")
public class UserController {
private final UserMapper userMapper;
// 构造器注入UserMapper
public UserController(UserMapper userMapper) {
this.userMapper = userMapper;
}
@PostMapping("/getuser/{id}")
public User getUserById(@PathVariable Long id) {
// 直接调用数据访问层
return userMapper.selectById(id);
}
}
使用注解的方式完成数据访问层接口(AccountMapper)的设计,在接口中定义一个方法实现根据登录账号和登录密码查询出账户信息。 (实体类和数据访问层接口自行设计)
// Account.java
public class Account {
private Long id;
private String loginName;
private String password;
// Getter/Setter略
}
// AccountMapper.java
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface AccountMapper {
@Select("SELECT id, login_name, password " +
"FROM account " +
"WHERE login_name = #{loginName} AND password = #{password}")
Account selectByLoginInfo(
@Param("loginName") String loginName,
@Param("password") String password
);
}
在登录页面, 用户可以输入用户名和密码并通过发送POST 请求“/user/doLogin”实现用户登录, 如果用户名和密码正确, 跳转到“success. html”页面,如果错误则跳转到“fail. htm1”页面,请根据上面的需求将控制器(AccountController) 的完整设计代码写出(可省略服务层,直接调用数据访问层)。
package com.example.controller;
import com.example.entity.Account;
import com.example.mapper.AccountMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class AccountController {
@Autowired
private AccountMapper accountMapper;
@PostMapping("/user/doLogin")
public String login(
@RequestParam("username") String username,
@RequestParam("password") String password
) {
// 直接调用数据访问层查询用户
Account account = accountMapper.selectByLoginInfo(username, password);
// 根据查询结果跳转页面
if (account != null) {
return "redirect:/success.html"; // 登录成功
} else {
return "redirect:/fail.html"; // 登录失败
}
}
}
运用Spring Boot框架,实现用户信息查询。账号表(t user)的结构如下(项目采用MyBatis作为ORM框架):
id |
int |
主键ID |
uname |
Varchar(10) |
用户名 |
phone |
Varchar(20) |
电话 |
sex |
Tinyint(1) |
性别 |
User实体:
package com.example.entity;
import lombok.Data;
@Data // Lombok注解自动生成Getter/Setter/toString等
public class User {
private Integer id;
private String uname;
private String phone;
private Integer sex; // 0-女,1-男,2-其他
}
Mapper:
package com.example.mapper;
import com.example.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface UserMapper {
@Select("SELECT id, uname, phone, sex FROM t_user WHERE id = #{id}")
User selectById(Integer id);
}
Service:
package com.example.service;
import com.example.entity.User;
import com.example.mapper.UserMapper;
import org.springframework.stereotype.Service;
@Service
public class UserService {
private final UserMapper userMapper;
public UserService(UserMapper userMapper) {
this.userMapper = userMapper;
}
public User getUserById(Integer id) {
return userMapper.selectById(id);
}
}
Controller:
package com.example.controller;
import com.example.entity.User;
import com.example.service.UserService;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/users")
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping("/{id}")
public User getUser(@PathVariable Integer id) {
return userService.getUserById(id);
}
}
阅读下列代码,回答以下问题。
代码内容(DemostudyApplication. java) |
(6)______ public class DemostudyApplication { public static void main(String[] args) { SpringApplication. run(DemostudyApplication. class, args); } } |
______(7)______ public class FirstController { _________(8)______ private Userservice userservice; . . . 省略 } _____(9)______ public class UserserviceImpl implements Userservice { @Autowired private UserMapper userMapper; · · . 省略 } ____(10)____ public interface UserMapper { @Select("select * from user") List<User> queryUsers(); |
答:@SpringBootApplication 、@Controller、@Autowired、@Service、@Mapper
请根据简要概述Spring Boot的优点。
(1) 可快速构建独立的Spring 应用。(1分)
(2) 直接嵌入 Tomcat服务器。(1分)
(3)通过依赖启动器简化构建配置。(1分)
(4) 自动化配置Spring和第三方库。(1分)
(5)提供生产就绪功能。(1分)
(6) 极少的代码生成和XML 配置。(1分)
请根据自己理解概述Spring Boot怎么来集成MyBatis框架以及如何使用。
(1) 添加依赖mybatis-spring-boot-starter (1分)
(2)添加数据库驱动(1分)
(3) 配置 datasource (1分)
(4)创建接口文件类(1分)
(5) 接口文件使用@Mapper,接口方法使用对应注解并添加sql语句(1分)
简述SpringBoot如何集成SpringMVC。
(1) 添加依赖spring-boot-starter-mvc。 (1分)
(2)新增控制器。(1分)
(3) 控制器使用@Controller, 方法返回string类型实现页面跳转。(1分)
(4) 控制器方法使用@RequestMapping定义地址。(1分)
(5) 控制器方法上添加@ResponseBody注解实现 json字符串返回。(1分)
简要概述Spring Cloud微服务架构的特点
(1)组件丰富,功能齐全。(1分)
(2)开箱即用,快速启动。(1分)
(3)模块部署方便,项目维护难度降低。(1分)
(4)项目扩展性和稳定性较好。(1分)
(5)具有容错处理机制。(1分)
阅读下列application. yaml配置的一部分, 回答以下提问。
代码内容 |
server: port: 8888 address: 127.0.0.1 mybatis: mapper-locations: classpath:mapper/*. xml type-aliases-package: com. edu. cq. pojo spring: profiles: active: test redis: host: 127.0.0.1 port: password: 123456 |
(1)如果想修改端口号应该怎么做? (2分)
在server.port
字段中直接修改端口值
(2) mapper-locations的作用是? (2分)
指定 MyBatis 映射文件(.xml)的存放位置
(3) type-aliases-package的作用是? (2分)
指定实体类的包路径,MyBatis 会自动为该包下的类生成别名
(4)上述配置启动可能会报错,那么我们应该修改? (2分)
配置中redis.port
字段缺少值(仅写了port:
),需补充端口号
(5) 现在有 user: {name: 张三, age: 10} 使用YAML语法编写user配置项? (2分)
user:
name: 张三
age: 10
选择题:
1. 关于 Spring Boot框架, 说法错误的是 ( )
A. Spring Boot在开发过程中大量使用“约定优先配置”的思想
B. 是一种替代Spring的Web解决方案
C. Spring Boot 2. x版本在 Spring Boot 1. x版本的基础上进行了改进和扩展
D. Spring Boot是一个依靠大量注解实现自动化配置的框架
解析:Spring Boot 并非替代 Spring 的解决方案,而是基于 Spring 框架的一套快速开发脚手架,目的是简化 Spring 应用的初始搭建及开发过程,本质上是对 Spring 的封装和增强。
答案:B
2. 以下注解中哪个注解表示 Spring Boot的主程序启动类( )
A. @SpringBootApplication B. @SpringBootTest
C. @SpringBootConfiguration D. @ComponentScan
答案:A
3. 以下关于Spring Boot多环境配置文件名格式, 正确的是 ( )
A. applicationprod. properties
B. application. prod. properties
C. application-prod. properties
D. application prod. yml
答案:C
4. 以下关于Spring Boot配置文件存放位置, 错误的是( )
A. 可以在当前项目的根目录/config/
B. 可以在在 resources 目录下/ config/
C. 可以在/java/
D. 可以在在 resources 目录下/
解析:/java/
目录通常用于存放 Java 源码,不属于配置文件的合法存放位置。
答案:C
5. 关于 Spring Boot项目目录结构, 说法错误的是 ( )
A. application. properties 是项目的全局配置文件
B. 在Spring Boot中不可以自定义配置文件
C. resources 下 static 中用于存放静态资源文件
D. resources下 templates中用于存放模板文件
解析:Spring Boot 支持自定义配置文件。例如,可以创建custom-config.properties
,并通过@PropertySource
注解加载,或在application.properties
中通过spring.config.import
引入自定义配置文件
答案:B
6.下列关于 Spring Boot框架, 说法正确的是 ( ) 。
A. 一个 HTTP 服务器框架
B. 一个基于 Java的开源框架
C. 一个 Web应用程序框架
D. 一个 JavaScript 框架
答案:B
7.下列关于 Spring Boot框架特点描述中, 说法正确的是 ( ) 。
A.快速开发、快速部署、零配置
B.单一应用程序,难以在多个应用程序间共享代码和服务
C.需要依赖第三方框架
D. 只能用于 Java 应用程序的开发
解析:
- 它支持模块化和服务共享(B 错误)。
- 无需强制依赖第三方框架(C 错误)。
- 应用场景不限于 Java(D 错误)。
答案:A
8.Spring Boot框架的自动配置是什么 ( ) 。
A. Spring Boot 可以自动根据项目的需求进行配置
B. Spring Boot需要手动进行配置
C. Spring Boot不支持自动配置
D. Spring Boot需要依赖其他框架进行配置
答案:A
9.以下关于 Spring Boot多环境配置文件名格式, 正确的是 ( ) 。
A. application-dev. properties
B. application. test. properties
C. application. prod. yaml
D. application prod. yml
答案:A
10.下列关于 Spring Boot可以集成的框架中, 说法正确的是 ( ) 。
A. 可以集成MyBatis、React、Vue
B. 可以集成 Ruby on Rails、Django
C. 可以集成Flask、Django、Vue
D. 可以集成JPA、Spring Mvc、MyBatis
解析:
A. 错误:
- Spring Boot 可集成 MyBatis(通过
mybatis-spring-boot-starter
)。 - React/Vue 是前端框架,需通过 REST API 与 Spring Boot 后端通信,并非直接集成(如前后端分离部署)。
- Spring Boot 可集成 MyBatis(通过
B. 错误:
- Ruby on Rails(Ruby)和 Django(Python)是其他语言的框架,无法与 Spring Boot(Java)直接集成。
- Spring Boot 可通过 REST API 与外部服务交互,但选项中 “集成” 的表述不准确。
C. 错误:
- Flask/Django 是 Python 框架,与 Spring Boot 无法直接集成。
- Vue 同理,需通过 REST API 与后端通信。
答案:D
11.Spring Boot支持的配置文件类型是什么 ( ) 。
A. . yaml
B. . xml
C. . properties
D.以上说法都正确
答案:D
12.Spring Boot中的控制器的返回值可以是什么 ( ) 。
A. String
B. ModelAndView
C. ResponseEntity
D.以上都正确
解析:
A. String:
- 返回视图名称(如
return "index"
),需配合模板引擎(如 Thymeleaf)使用; - 或添加
@ResponseBody
注解直接返回字符串内容(如 REST API)。
- 返回视图名称(如
B. ModelAndView:
- 封装视图名称和模型数据(如
new ModelAndView("userList", "users", userList)
),用于传统 MVC 模式。
- 封装视图名称和模型数据(如
C. ResponseEntity:
- 用于自定义 HTTP 响应(如状态码、头部信息),常见于 REST API
答案:D
13.Spring Boot为整合Spring MVC实现 Web开发, 提供的功能特性不包括( ) 。
A.配置视图解析器
B. 对WebJars的支持
C.对拦截器的自动配置
D. 对HttpMessageConverters消息转换器的支持
解析:Spring Boot 的自动配置主要针对 通用场景(如视图解析、消息转换),但拦截器属于 业务定制逻辑,需手动配置。
答案:C
14.在Spring Boot项目中,我们通常使用哪个注解来声明一个 RESTful Web服务的控制器(
A. @Controller
B. @Service
C. @RestController
D. @Component
答案C
15.以下关于 Thymeleaf模板引擎页面标签的说法错误的是 ( ) 。
A. th:each用于元素遍历, 类似JSP中的c:forEach标签
B. th:value 属性值修改, 指定标签属性值
C. th:href用于设定链接地址
D.th:utext用于指定标签显示的文本内容,对特殊标签进行转义
解析:
th:text
:对文本内容进行 HTML 转义(如将 <
转为 <
)。
th:utext
:不转义,直接输出原始 HTML(如 <div th:utext="${htmlContent}">
)
答案:D
16.Spring Boot的WEB 项目中默认内嵌的Servlet容器是 ( ) 。
A. Jetty
B. Undertow
C. Tomcat
D. WebSphere
解析:
A. Jetty:
- 轻量级 Servlet 容器,需手动引入依赖(如
spring-boot-starter-jetty
),非默认。
- 轻量级 Servlet 容器,需手动引入依赖(如
B. Undertow:
- 高性能容器,需手动引入依赖(如
spring-boot-starter-undertow
),非默认。
- 高性能容器,需手动引入依赖(如
D. WebSphere:
- IBM 的商用应用服务器,不内嵌于 Spring Boot,需单独部署。
答案: C
17.Spring Boot的WEB项目中需要拓展MVC功能, 需要实现以下哪个接口 ( ) 。
A、 WebMvcConfigurer
B. HandlerInterceptor
C、 HttpServlet
D、 ServletContextListener
解析:
B.
HandlerInterceptor
:- 拦截器接口,需通过
WebMvcConfigurer
注册后生效,不能单独实现扩展 MVC。
- 拦截器接口,需通过
C.
HttpServlet
:- Servlet 基类,用于定义 Servlet,与扩展 MVC 功能无关。
D.
ServletContextListener
:- Servlet 上下文监听器,用于监听应用启动 / 销毁事件,非 MVC 扩展接口。
答案:A
19.在 Spring Boot 中, 下列所述哪个属性用于指定应用监听的端口号( ) 。
A. server. context-path
B. server. port
C. spring. application. name
D. spring. datasource. url
答案:B
20.以下关于 Spring Boot整合Security相关说法错误的是 ( ) 。
A. Spring Boot一旦引入 spring-boot-starter-security, 无需配置, MVC Security即可生效
B. Spring Boot整合Security项目启动时会在控制台Console中自动生成一个安全密码, 每次都不一样
C. 访问Spring Boot项目默认首页 index. html, 无需登录
D. 在Spring Security登录页面“/login”中输入错误登录信息后,会重定向到“/login? error”页面
解析:引入 Security 后,默认所有端点(包括 /index.html
)需认证才能访问。首次访问会重定向到默认登录页 /login
。
答案:C
21.以下关于自定义用户退出 logout()方法及其说明错误的是( )。
A. 它默认处理路径为“/logout”的Post类型请求
B. 自定义用户退出功能,必须使用POST方式的HTTP 请求进行用户注销
C. logoutUrl()方法指定了用户退出的请求路径,可以省略
D.在用户退出后,用户会话信息则会默认清除
解析:Spring Security 5.7+ 版本支持 GET 请求注销,通过配置 logoutRequestMatcher
实现
http.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout", "GET"));
答案:B
22.以下关于Spring Boot整合Security 中CSRF相关说法错误的是 ( )。
A.CSRF 攻击并非窃取服务器中的数据
B.对于数据的修改操作,必须进行CSRF防护
C. 针对Form表单修改提交中, 必须添加<input>隐藏标签携带Security提供的CSRF Token信息
D. 对于Ajax类型的数据修改请求, Security提供了通过添加HTTP header头信息的方式携带 CSRF Token信息进行请求验证
解析:并非所有数据修改操作都必须防护 CSRF。例如:
- 无状态 API(如 RESTful 服务)通常使用 JWT 认证,可通过
csrf().disable()
禁用 CSRF 保护。 - 公开接口(如注册、登录)无需 CSRF 防护
答案:B
23.以下关于 RabbitMQ支持的工作模式原理相关说法错误的是( ) 。
A."work queues工作模式中,无需交换器可以使用唯一的消息队列进行消息传递
B. 在Publish/Subscribe工作模式中, 必须先配置一个 fanout类型的交换器,不需要路由键
C. 在 Routing工作模式中,必须先配置一个direct类型的交换器,并指定不同的路由键
D. Headers工作模式在使用时,必须设置一个headers类型的交换器,而不需要设置
解析:Work queues 工作模式必须通过交换器传递消息,无法直接使用队列
答案: A
24.使用 RabbitTemplate类的convertAndSend()方法发送消息时, 路由键为 info. email配到以下哪种消息队列 ( )。
A. info.#.email.#
B. info.*.email.*
C. info.#.email.:
D. info.*.email.#
解析:
RabbitMQ 路由键匹配规则:
*
(星号):匹配一个单词(如info.user.email
匹配info.*.email
)。#
(井号):匹配零个或多个单词(如info.user.email.detail
匹配info.#
)。
答案:A
25.以下哪个组件来实现服务注册与发现的功能 ( )。
A. Ribbon
B. Eureka
C. Zuul
D. Hystrix
答案:B
26.Spring Cloud 是一个“全家桶式”的技术栈,包含了很多组件。它的五大核心组件是个选项 ( )。
A. Eureka、 Zuul、 Riboon、 Hystrix、 Spring Cloud Config
B. Eureka、 Nacos、 Riboon、 Hystrix 、 Spring Cloud Config
C. Reids、 Nacos、 Riboon、 Hystrix、 Spring Cloud Config
D. Eureka、 Zuul、 Riboon、 Hystrix、 Spring Boot Data
解析:
Spring Cloud 五大核心组件分析:
- Eureka:服务注册与发现组件,用于管理服务实例的注册和发现。
- Zuul:API 网关组件,负责请求路由、过滤和负载均衡。
- Ribbon:客户端负载均衡工具,配合服务注册中心实现服务调用的负载均衡。
- Hystrix:熔断器组件,用于服务容错(降级、熔断),防止级联故障。
- Spring Cloud Config:配置中心,统一管理分布式系统的配置,支持动态刷新。
答案: A
判断题
1.Spring Boot对一些技术框架进行了统一版本号管理,引入其他任何依赖文件都不需要赖文件版本号。 ( × )
2. Spring Boot全局配置文件application. properties 中只可以对一些默认属性进行修改( × )
3. Spring Boot整合 Thymeleaf项目中, 不需要在项目配置文件中配置 Thymeleaf模板页面位置和文件后缀名。 ( √ )