数据源
SQL解决方案(关系型数据库)
内置数据源——Hikari
之前的springboot+mybatis-plus/mybatis+mysql中没有导入druid,那里面有没有呢?先回顾数据源配置格式
格式二常用,但需要导入druid的starter,格式1不需要。
- 如果我们使用格式2测试是否调用了druid
- 使用格式1测试是否使用了druid数据源
也做了初始化 - 把druid去掉
还是有。
导入了druid的starter就会调用,把starter删掉,就不会加载druid的数据源了。
springboot不加载第三方数据源就会调用内嵌的HikarDataSource,
Springboot内嵌了三种数据源
可以将用户名、密码等配置在hikari下,eg:
spring:
datasource:
url: jdbc:mysql://localhost:3306/ssmp_db
hikari:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: "!Wzh2352186607"
注意不能再hikari下配置url,URL放在外层!!!
内置持久化方案——JdbcTemplate
spring内置的持久化方案——JdbcTemplate技术
需要导入spring-jdbc的starter
发现这个starter依赖于hikari
测试使用
内置数据库——H2/HSQL/Derby
相似:都是用java写的,都可以在内存中启动(伴随着程序的启动而启动);小巧,测试方便;运行速度快。
- 启动方法
加入坐标
在浏览器输入对应path
(第一次)启动需要配置yml, 代码测试(需要开启yml配置)
上限的时候需要关闭控制台。
NoSQL解决方案(非关系型数据库)
这些通常在linux系统中部署,为了降低学习者压力,暂时基于windows学习
Redis
快速入门
笔记可以参考:https://zhangc233.github.io/2021/05/02/Redis/
启动
在redis的安装路径唤出cmd,
- 启动服务
redis-server.exe redis.windows.conf - 启动客户端
redis-cli.exe
key-value型数据处理
- 放入数据
set 键 值 - 获取数据
get 键 值 - 修改数据
和set一样 - 查询所有key
keys* - 清屏clear
哈希结构数据处理
- 放数据hset key名 key里面的key名 value
- 获取数据hget key名 key里面的key名
SpringBoot整合redis
- 导入坐标
- 配置
spring.redis下面的是redis相关的配置
spring.redis.cache是使用redis解决缓存相关的配置
spring.redis.session是解决session共享问题的相关配置
spring:
redis:
host: localhost
port: 6379 #注意不写默认是这两个值
- 操作
操作redis的模板对象RedisTemplate<K,V>
通过opsFor***方法选择数据结构?
@SpringBootTest
public class redisTest {
@Autowired
private RedisTemplate redisTemplate;
@Test
void set(){
ValueOperations ops = redisTemplate.opsForValue();//使用普通key-value结构
ops.set("age",41);
}
@Test
void get(){
ValueOperations ops = redisTemplate.opsForValue();
System.out.println(ops.get("age"));
}
@Test
void hset(){
HashOperations hops = redisTemplate.opsForHash();//使用哈希结构
hops.put("conf","port",90);
}
@Test
void hget(){
HashOperations hops = redisTemplate.opsForHash();
System.out.println(hops.get("conf","port"));
}
}
使用@Autowired注入虽然可以使用,但是在编译器里会爆红,推荐使用@Resource。原因是这个类型带泛型我们却没有指定泛型,使用@Autowired是根据类型注入的,而@Resource是现根据name注入,找不到采用类型注入
RedisTemplate泛型问题
客户端存放的数据java程序查询不到。
StringRedisTemplate和RedisTemplate的区别是后者以对象为基本单位操作(因为StringRedisTemplate和RedisTemplate相比,他的泛型是固定了的),前者以字符串为基本单位操作。在客户端(cmd界面)操作是以字符串为基本单位操作的,所以redisTemplate查询不到。
@SpringBootTest
public class StringRedisTemplateTest {
@Resource
private StringRedisTemplate stringRedisTemplate;
@Test
void get(){
ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();
System.out.println(ops.get("name"));
}
}
jedis技术
jedis就是基于java语言的redis客户端,集成了redis的命令操作,提供了连接池管理。
redis-cli是redis官方提供的客户端,可以看作一个shell程序,它可以发送命令对redis进行操作。
springboot能用jedis,但是默认不是这个技术,想要使用只需导入依赖,配置配置信息
- 依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
- 配置
spring:
redis:
client-type: jedis
而springboot默认的客户端技术是lettucus
MongoDB
mysql可以存储结构数据但是不够快,redis存储快但是不能存储结构数据。MongoDB则填补了二者的空白。他是高性能的无模式的文档型数据库,是最像关系型数据库的非关系型数据库。
业务场景:
快速入门
- 服务端启动
在安装目录下的bin输入cmd,执行
mongod --dbpath=…/data/db后面是指定数据存储的位置 - 客户端启动
还是在bin目录下,mongo
这个客户端不好用,自己又装了studio 3T - 使用库
use 库名 - studio3t客户端创建集合(相当于关系型数据库的集合 )
右键->add collection - studio3t客户端CRUD界面
右键->open intelliShell
eg:
db.getCollection(“book”).find({}) 查找book表,并去查询所有数据 - 添加文档(这里的文档相当于mysql的数据)
db.book.save({“name”:“springboot”})/db.getCollection(“book”).save({“name”:“springboot”})
这里数据的格式类似于json但不是json(属性名可以加双引号,也可以不加)
再次查询(这个客户端的文档查询结果支持三种形式)
无模式:
- 有条件查询
db.book.find({}) {}内写条件就行,{}里面是类似json的格式 - 删除
db.book.remove({}) {}内写条件,注意不写条件直接把数据全删除了(真删库跑路!!) - 修改
db.book.update({name:“springboot”},{$set:{name:“springboot2”}})
只改了第一条(update语句只修改遇到符合条件的第一条数据)
updateOne只修改一条,updateMany修改多条数据
整合Mongodb
- 引入依赖
- 数据库配置
spring:
data:
mongodb:
uri: mongodb://localhost/local
这个uri是规定的格式,必须是mongodb://localhost/…
- 使用MongoTemplate对象
@SpringBootTest
public class MongodbTest {
@Resource
private MongoTemplate mongoTemplate;
@Test
void test(){
Book book = new Book();
book.setId(1);
book.setName("ssmp");
book.setPrice(120);
mongoTemplate.save(book);
}
}
除了各个属性外还将类型也添加进去了。
- 查询
ES
这是一种分布式全文搜索引擎