9 整合第三方技术
约 1643 字大约 5 分钟
2025-06-22
springboot在导入大部分第三方包时都有推荐的版本只需要导入对应的starter即可 所有的springboot自己的技术都是spring-boot-starter-基础名 所有第三方技术都是基础名-spring-boot-starter
JUnit
测试类使用@SpringBootTest修饰 通常使用自动装配的形式添加要测试的对象
classes指定测试类,也可以不指定默认是下面的类名
@SpringBootTest(classes=Springboot05JUnitApplication.class)
测试类如果存在于引导类所在包或子包中无需指定引导类 测试类如果不存在于引l导类所在的包或子包中需要通过classes属 性指定引导类
mybatis
配置信息
spring:
datasource:
driver-class-name:com.mysql.jdbc.Driver
url:jdbc:mysql://1oca1host:3306/ssm_db
username:root
password:root
无需再进行其他配置了,spring已经自动配置好了 也不用再配置xml文件了,直接在注解里写入sql语句即可 数据库SQL映射需要添加@Mapper被容器识别到
@Mapper
public interface BookDao{
@Select("select * from tbl_book where id=#{id}")
public Book getById(Integer id);
}
如果使用低版本的mybatis可能会报错,这时因为无法识别正常的时区,可以在配置文件中指定出时区
url:jdbc:mysql://1ocalhost:3306/ssm_db?serverTimezone=UTC
druid
druid有专用的配置,这样配置后其他数据源就无法使用此配置了
spring:
datasource:
druid:
driver-class-name:com.mysql.cj.jdbc.Driver
url:jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
username:root
password:root
springboot3整合druid 在springboot3中使用以上配置会报错
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test
username: root
password: "123456"
使用type指定数据库连接池不会报错
tomcat
tomcat在配置服务器时最主要的是识别一个javaEE规范里的servlet(核心控制器或前端控制器)程序 springboot提供了一个非常核心的servlet类DispatcherServlet,它实现了javaEE中的servlet接口,因此可以被tomcat识别 请求(HttpServletRequest):获取请求数据 响应(HttpServletResponse):设置响应数据
前端浏览器发送的请求都会先经过servlet程序,再右servlet分发给各个controller,controller处理完后再将处理结果返回给servlet,servlet再给浏览器响应数据
前端浏览器发送的数据被解析后封装到HttpServletRequest对象中,这样应用程序就可以从这个HttpServletRequest对象中访问数据并进行处理
数据处理好后会封装到HttpServletResponse对象,tomcat会根据这个对象中设置的响应信息返回给浏览器
原始的方式
@RestController
public class RequestController {
@RequestMapping("/simpleParam")
public String simpleParam(HttpServletRequest request) {
String name = request.getParameter("name");
String age = request.getParameter("age");
System.out.println(name + ":" + age);
return "OK";
}
}
springboot的方式
@RestController
public class RequestController {
@RequestMapping("/simpleParam")
public String simpleParam(String name,Integer age) {
System.out.println(name + ":" + age);
return "OK";
}
}
spring可以自动获取路由后面的参数自动进行设置
如果要指定请求参数名可以使用@RequestParam注解
@RestController
public class RequestController {
@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam(name="name")String name,Integer age) {
System.out.println(name + ":" + age);
return "OK";
}
}
接收日期格式 使用用@DateTimeFormat注解完成日期参数格式转换
// http://localhost:8080/dateParam?updateTime=2022-12-1210:05:45
@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
System.out.println(updateTime);
return"OK";
}
接收json格式 json数据一定是封装在请求体中,可以使用RequestBody注解获取,如果形参类中成员变量与json中键一一对应那么就能够被封装在形参中
@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user){
System.out.println(user);
return"OK";
}
路径参数 通过请求URL直接传递参数,使用{..}来标识该路径参数,需要使用@PathVariable获取路径参数
// http://localhost:8080/path/1
@RequestMapping("/path/(id)")
public String pathParam(@PathVariable Integer id){
System.out.println(id);
return"OK";
}
响应数据
@ResponseBody 可以作用在Controller方法上/类上
- 作用在方法上将方法返回值直接响应,如果返回值类型是实体对象/集合,将会转换为JSON格式响应
- 作用在类上 : 相当于该类的所有函数都加了@ResponseBody注解
后续大多使用@RestController @RestController=@Controller + @ResponseBody;
同一响应结果
虽然ResponseBody可以将数据解析成json格式返回,但如果不规定响应数据就会很乱,一般来说都会规定以一个类来表示响应结果
示例:
public class Result{
//响应码,1代表成功;0代表失败
private Integer code;
//提示信息
private String msg;
//返回的数据
private Object data;
}
/*
{
"code":1,
"msg":"操作成功",
"data':...
}
*/
redis
springboot整合redis客户端默认是lettuce,因为它是线程安全的,也可以改为jedis
SpringDataRedis
SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis
配置
data:
redis:
host: localhost
port: 6379
password: "03604"
lettuce:
pool:
max-active: 8 # 最大连接
max-idle: 8 # 最大空闲连接
min-idle: 0 # 最小空闲连接
max-wait: 100 # 连接等待时间
SpringDataRedis中提供了RedisTemplate了各种对ReOIs的操作.:并且将不同数据类型的操作API封装到了不同的类型中:
API | 返回值 | 类型说明 |
---|---|---|
redisTemplate.opsForValue() | ValueOperations | 操作String类型数据 |
redisTemplate.opsForHash() | HashOperations | 操作Hash类型数据 |
redisTemplate.opsForList() | ListOperations | 操作List类型数据 |
redisTemplate.opsForSet() | SetOperations | 操作Set类型数据 |
redisTemplate.opsForZSet() | ZSetOperations | 操作SortedSet类型数据 |
redisTemplate | 通用的命令 | |
通过 获取opsForValue等数据类型的对象来操作 | ||
示例: |
@SpringBootTest
class DemoApplicationTests {
@Autowired
private RedisTemplate<String,Object> redisTemplate;
@Test
void testString(){
redisTemplate.opsForValue().set("name","zhangsan");
System.out.println(redisTemplate.opsForValue().get("name"));
}
}
但设置数据后再次查询name键,如果之前没有name就查询不到数据,如果之前有name键那么查询到的是旧的数据而不是新插入的
RedisTemplate可以接收任意Object作为值写入Redis,只不过写入前会把Object序列化为字节形式,默认是采用JDK序列化,得到的结果是这样的:\xAC\xED\x00\x05t\x00\x04name
这种方法可读性差且内存占用较大
可以自己指定序列化器,不使用jdk的序列化器
mongodb
配置
spring:
data:
mongodb:
uri:mongodb://localhost/itheima
需要获取MongoTemplate对象对其进行操作
@SpringBootTest
class Springboot17MongodbApplicationTests{
@Autowired
private MongoTemplate mongoTemplate;
@Test
void contextLoads(){
Book book = new Book();
book.setId(1);
book.setName("springboot");
book.setType("springboot");
book.setDescription("springboot");
mongoTemplate.save(book);
}
}
Elasticsearch(ES)
Elasticsearch是一个分布式全文搜索引擎
它做的是倒排索引,即根据数据查id. 例如才查找一个商品时会根据关键词查找具有关键词的标题或简介,然后根据标题或简介查找id
贡献者
版权所有
版权归属:PinkDopeyBug