赞
踩
目录
SpringBoot操作Redis客户端实现技术切换(jedis)
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid-spring-boot-starter</artifactId>
- <version>1.2.8</version>
- </dependency>
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-boot-starter</artifactId>
- <version>3.5.1</version>
- </dependency>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- </dependency>
- <dependency>
上面的三组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<Map<String,Object>> maps = jdbcTemplate.queryForList(sql);
- System.out.println(maps);*/
-
- RowMapper<Book> rm = new RowMapper<Book>() {
- @Override
- public Book mapRow(ResultSet resultSet, int i) throws SQLException {
- // ResultSet resultSet 其实就是结果集
- Book temp = new Book();
- temp.setId(resultSet.getInt("id"));
- temp.setType(resultSet.getString("type"));
- temp.setStatue(resultSet.getString("statue"));
- temp.setBookName(resultSet.getString("bookName"));
- return temp;
- }
- };
-
- String sql ="select * from t_book ";
- List<Book> list = jdbcTemplate.query(sql,rm);
- System.out.println(list);
-
- }
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-jdbc</artifactId>
- </dependency>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- </dependency>
关于jdbcTemplate的其他设置
共同特点:都是java语言写的,都可以在内存中启动,都足够轻巧,测试方便
- </dependency>
- <dependency>
- <groupId>com.h2database</groupId>
- <artifactId>h2</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-jpa</artifactId>
- </dependency>
切记是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
创建一个新项目,勾选下列选项
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-redis</artifactId>
- </dependency>
在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<String,String> 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坐标
- <dependency>
- <groupId>redis.clients</groupId>
- <artifactId>jedis</artifactId>
- </dependency>
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<String,String> 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坐标
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-mongodb</artifactId>
- </dependency>
连接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<Book> 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
方法一:
方法二:
方法三:
查询单条
查询全部
条件查询
修改文档操作
低版本导入坐标
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
- </dependency>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- </dependency>
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-boot-starter</artifactId>
- <version>3.5.1</version>
- </dependency>
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid-spring-boot-starter</artifactId>
- <version>1.2.8</version>
- </dependency>
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- </dependency>
- #第二种方法: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调用各种方法
- }
高版本导入坐标
上面的第一组坐标是低版本的,我们一般使用下面这个高版本的坐标
- <dependency>
- <groupId>org.elasticsearch.client</groupId>
- <artifactId>elasticsearch-rest-high-level-client</artifactId>
- </dependency>
此时在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();
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。