目录
一、与SQL有关的解决方案
1.关于数据源
第一部分.关于springboot中的数据源
第二部分.Druid有关的配置
2.内置持久化解决方案----jdbcTemplate
3.Springboot内置数据库
演示H2数据库
总结:
二、与NoSQL有关的解决方案
1.关于Redis
怎么启动Redis?
怎么使用?
怎么退出?
2.SpringBoot整合Redis
整合前提
整合开始
SpringBoot读取Redis的客户端
SpringBoot操作Redis客户端实现技术切换(jedis)
Redis中,lettcus(默认)与jedis的区别
2.关于MongoDB
基本介绍
启动MongoDB
运行MongoDB客户端
如果安装MongoDB时候有缺陷,参考下列解决方案:
MongoDB的基本操作
SpringBoot整合MongoDB
3.SpringBoot整合ES
基本介绍
安装ES与启动ES
ES基本操作
创建索引
分词操作
添加文档操作
查询文档操作
删除文档操作
SpringBoot整合ES
com.alibaba
druid-spring-boot-starter
1.2.8
com.baomidou
mybatis-plus-boot-starter
3.5.1
mysql
mysql-connector-java
上面的三组maven坐标就是我们写代码时经常使用的,分别对应数据源、持久化技术、数据库
若我们不提供数据源(比如删除我们上面的Druid的坐标)的话,就默认使用这三种中的一种(HikariCP默认)
将数据源换成HikariCP(记得吧Druid的maven坐标删除)(注意URL的位置)(并不是Druid数最好的)
下面这两种配置,哪一种都可以
格式一是标准格式
比较推荐 格式二,格式二是Druid专属配置
@Autowired
private JdbcTemplate jdbcTemplate;
@Test
void JDBCTEST(){
// jdbcTemplate.update();//增删改
// jdbcTemplate.query(); //查询
// jdbcTemplate.queryForObject();//查询单个对象
/* 但是我们一般不使用这种格式
String sql ="select * from t_book ";
List
org.springframework.boot
spring-boot-starter-jdbc
mysql
mysql-connector-java
关于jdbcTemplate的其他设置
共同特点:都是java语言写的,都可以在内存中启动,都足够轻巧,测试方便
com.h2database
h2
org.springframework.boot
spring-boot-starter-data-jpa
切记是web工程
之后运行项目,在网页进行访问
当我们连接之后,我们发现连接异常(这是因为首次使用的原因,此时我们只需要在配置文件中配置相应的数据源就好了,当我们启动成功后,这些配置员可以删除,也可以留着)
此时我们修改一下配置文件:
#h2***************************
server:
port: 8080
spring:
h2:
console:
path: /h2
enabled: true
datasource:
url: jdbc:h2:~/test
hikari:
driver-class-name: org.h2.Driver
username: sa
password: 123456
重新启动项目,输入密码
此时我们已经启动成功了,DataSource的那一段配置我们可以删除,也可以留着
添加一个表
注意!!!!!!!!!!!!!!!!!!
H2内置数据库这仅仅用于开发阶段,线上项目请务必关闭控制台功能
也是做数据存储的
是一款key-value存储结构的内存级别的NoSQL数据库
支持多种数据存储格式
支持持久化
支持集群
第一次启动采用下图的步骤:
不是第一次启动,采用下图的步骤:直接启动
基本的存储结构:key--value
重新创建一个cmd(前面那个不关)
存放值和取值
哈希存储结构:
Ctrl+C
创建一个新项目,勾选下列选项
org.springframework.boot
spring-boot-starter-data-redis
在application.yml配置文件中配置下列信息:(下列的配置就是默认配置,如果不配的话,也是下列的值)
spring:
redis:
host: localhost
port: 6379
整合的时候,一定要确保Redis是开启的状态,否则会出现异常(因为我们从cmd开启的Redis和idea运行的Redis其实是一个Redis)
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
@SpringBootTest
class Springboot16RedisApplicationTests {
// 用这个属性就能操作Redis
@Autowired
private RedisTemplate redisTemplate;
// 下面测试类运行的时候,一定要确保Redis是开启的状态
@Test
void set() {
ValueOperations valueOperations = redisTemplate.opsForValue();//不仅仅有一个操作种类,有很多的操作种类
valueOperations.set("age","41"); //键值对的方式
}
@Test
void get() {
ValueOperations valueOperations = redisTemplate.opsForValue();
Object age = valueOperations.get("age"); //利用键值对的方式给取出来
System.out.println(age);
}
// 下面两个是哈希的结构
@Test
void hSet() {
HashOperations ho = redisTemplate.opsForHash();//不仅仅有一个操作种类,有很多的操作种类
ho.put("info","a","aa"); //键值对的方式
}
@Test
void hGet() {
HashOperations ho = redisTemplate.opsForHash();
Object p = ho.get("info","a");
System.out.println(p);
}
}
细心的同学可以发现,我们上面的程序中,在客户端界面获取idea中添加的内容,最终结果是null,相同的,在idea中获取客户端中添加的内容也是null,这是为什么呢?
其中的原因就和下面这个属性的类型有关系,这个属性是以对象为操作的基本单元,我们只需要把这个对象的类型修改一下就好了
@Autowired
private RedisTemplate redisTemplate; // 以对象为操作的基本单元
修改后的代码如下图:
import org.springframework.data.redis.core.ValueOperations;
@SpringBootTest
public class StringRedisTemplateTest {
@Autowired
private StringRedisTemplate stringRedisTemplate; //以字符串为操作的基本单元,而在客户端界面的操作都是以字符串为操作的基本单元
@Test
void get(){
ValueOperations ops = stringRedisTemplate.opsForValue();
String name = ops.get("name");
System.out.println(name);
}
}
因为这个属性是以字符串为操作的基本单元,而在客户端界面的操作都是以字符串为操作的基本单元,顾这个属性的类型就可以实现客户端添加与读取内容和idea添加与读取的内容相互联通。
@Autowired
private StringRedisTemplate stringRedisTemplate; //以字符串为操作的基本单元,而在客户端界面的操作都是以字符串为操作的基本单元
首先我们看一下默认配置(下面图的配置,有的idea版本是client-type,有的是client-name,都可以尝试一下)
我们默认使用的不是jedis技术,但是我们可以在配置文件中将技术切换成jedis技术
首先需要导入jedis技术的maven坐标
redis.clients
jedis
application.yml配置文件中进行配置
spring:
redis:
host: localhost
port: 6379
client-name: jedis
运行我们之前的代码:
@SpringBootTest
public class StringRedisTemplateTest {
@Autowired
private RedisTemplate redisTemplate; // 以对象为操作的基本单元
@Autowired
private StringRedisTemplate stringRedisTemplate; //以字符串为操作的基本单元,而在客户端界面的操作都是以字符串为操作的基本单元
@Test
void get(){
ValueOperations ops = stringRedisTemplate.opsForValue();
String name = ops.get("name");
System.out.println(name);
}
}
MongoDB是一个开源、高性能、无模式的文档型数据库。NoSQL数据库产品中的一种,是最 像关系型数据库的非关系型数据库
可以应用于 数据变化比较快的场景
在cmd中输入下列的命令
启动端口:27017
此时服务端已经启动起来了
在bin目录下打开cmd,并且输入下列命令,此时连接到服务器上面去了
安装robo3t软件,并进行连接
接下来就可以操作对应的库了
右键点击“local”,选择创建数据库
右键点击“company”,选择创建集合“create Collection”,并命名为“book”(在这里不叫做表,叫做集合)
点击我们新创建的集合“book”后,发现右侧界面分成了两部分,上半部分是命令区,下半部分是结果区
添加数据(文档)
查询表中的内容(下面就是刚添加的内容)(id类似于主键)
带条件的查询
删除操作
修改操作(第一个参数是条件,第二个参数是将什么修改成什么)(此时的修改只会修改第一个name=springboot的,如果还有name=springboot的并不会修改)
其他操作
创建项目,选择下列的模板
如果不选择这个模板的话,就添加下列maven坐标
org.springframework.boot
spring-boot-starter-data-mongodb
连接MongoDB
spring:
data:
mongodb:
# 下面的company要和 我们软件Robo中的库对一下
uri: mongodb://localhost/company
代码:(读写MongoDB)
@SpringBootTest
class Springboot17MongodbApplicationTests {
@Autowired
private MongoTemplate mongoTemplate;
@Test
void save() {
Book book = new Book();
book.setId(111);
book.setType("数学");
book.setDescription("优秀");
mongoTemplate.save(book);
}
@Test
void find(){
List all = mongoTemplate.findAll(Book.class);
System.out.println(all);
}
}
Elasticsearch是一个分布式全文搜索引擎,简称ES
全文搜索基本过程
由数据中关键字得到“id”,再有“id”得到部分数据(倒排索引)
比如,当我们搜索“Spring”关键字之后,我们发现数据库中第一二三四五条都有“Spring”字眼,即加载了一二三四五条数据的id,但是光有数据的id还不能看内容,故还会加载其对应的部分数据,而不是全部的数据。(某一个关键字对应一个或多个id,每个id对应一个简化版的数据,并用一种数据展示出来)若我们再点击这个部分数据展示出整体的数据,就不是ES的工作了(应该是数据库技术)。
文档
下面的每一条数据,都是一个文档(不是一行,是一条数据)
使用文档
当输入关键字之后,可以得到某个数据
我们发现ES有一个自带的JDK,版本是17,版本较高
在bin目录下,找到下面这个“bat”结尾的文件,进行双击(第一次的运行时间比较长)
运行完成之后搜索9200端口(这个白色框的搜索是Ctrl+f)
下面这个端口就是对外提供服务的端口
之后在浏览器中输入localhost:9200
如果出现一下的JSON串,就表示安装成功了
使用Put请求,注意,相同的索引只有一个(如果再添加一个books索引,就会失败)
查询指定索引
之后下载插件ik,
并且放到下面的文件夹下,之后再重新运行一下ES
方法一:
方法二:
方法三:
查询单条
查询全部
条件查询
修改文档操作
低版本导入坐标
org.springframework.boot
spring-boot-starter-data-elasticsearch
mysql
mysql-connector-java
com.baomidou
mybatis-plus-boot-starter
3.5.1
com.alibaba
druid-spring-boot-starter
1.2.8
org.projectlombok
lombok
#第二种方法:Druid专用配置 推荐
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/user_db?serverTimezone=GMT
username: root
password: admin
elasticsearch:
rest:
uris: http://localhost:9200
#开启MP运行日志
mybatis-plus:
configuration:
# 标准输出 打印到控制台上 以后我们就不用sout输出了, 这个东西会帮我们输出
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
代码:
@Test
void contextLoads() {
bookDao.selectById(10086);
}
@Autowired
private ElasticsearchRestTemplate template;
@Test
void fn(){
//template调用各种方法
}
高版本导入坐标
上面的第一组坐标是低版本的,我们一般使用下面这个高版本的坐标
org.elasticsearch.client
elasticsearch-rest-high-level-client
此时在yml文件配置中,已经没有高版本的整合了,只能下面我们自己写
#第二种方法:Druid专用配置 推荐
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/user_db?serverTimezone=GMT
username: root
password: admin
# elasticsearch:
# rest:
# uris: http://localhost:9200
#开启MP运行日志
mybatis-plus:
configuration:
# 标准输出 打印到控制台上 以后我们就不用sout输出了, 这个东西会帮我们输出
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
开启客户端
下面其实是我们自己维护的,不是springboot提供的
private RestHighLevelClient client;
@Test
void testCreateClient(){
HttpHost host = HttpHost.create("http://localhost:9200");
RestClientBuilder builder = RestClient.builder(host);
client = new RestHighLevelClient(builder);
}
关闭客户端
client.close();