SpringBoot集成【elasticsearch,redis,jdbc,mybatis,email】

ElasticSearch

  • 依赖包
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
  • 版本一致
		<properties>
			  <java.version>1.8</java.version>
			   <!--自定义ES版本保证本地和SpringBoot一致-->
			   <elasticsearch.version>7.3.1</elasticsearch.version>
		</properties>
  • ES配置
@Configuration
public class EsConfig {
    
    
    @Bean
    public RestHighLevelClient restHighLevelClient(){
    
    
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("127.0.0.1", 9200, "http")));
        return client;
    }
}
  • 单元测试
@SpringBootTest
class DemoApplicationTests {
    
    
    @Autowired
    @Qualifier("restHighLevelClient")   //配置类中的方法名
    private RestHighLevelClient client;

    //测试索引的创建
    @Test
    void testCreateIndex() throws IOException {
    
    
        //1.创建索引
        CreateIndexRequest request = new CreateIndexRequest("yaojun_index");
        //2.客户端执行请求 获得响应
        CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);

        System.out.println(response);
    }
    //获取索引
    @Test
    void testGetIndex() throws IOException {
    
    
        //1.获取索引
        GetIndexRequest request = new GetIndexRequest("yaojun_index");
        //2.客户端执行请求 获得响应
        boolean response = client.indices().exists(request, RequestOptions.DEFAULT);
        System.out.println(response);
    }
    //删除索引,注意只能删除一次
    @Test
    void testDeleteIndex() throws IOException {
    
    
        DeleteIndexRequest request = new DeleteIndexRequest("yaojun_index");
        AcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT);
        System.out.println(response.isAcknowledged());
    }

    //测试添加文档
    @Test
    void testAddDocument() throws Exception{
    
    
        //1.创建对象
        User user = new User("yaojun", 3);
        // 2.创建请求
        IndexRequest request = new IndexRequest("yaojun");
        //3.规则 put /yaojun_index/doc/1
        request.id("1");
        request.timeout(TimeValue.timeValueSeconds(1));
        //4.将我们的数据放入请求 json
        IndexRequest source = request.source(JSON.toJSONString(user), XContentType.JSON);

        //5.客户端发送请求 获取响应结果
        IndexResponse response = client.index(request, RequestOptions.DEFAULT);

        System.out.println(response.toString());
        System.out.println(response.status());
    }

    //获取文档 判断是否存在get /yaojun/doc/1
    @Test
    void testIsExist() throws Exception{
    
    
        GetRequest getRequest = new GetRequest("yaojun", "1");
        //不获取返回的_source的上下文了
        getRequest.fetchSourceContext(new FetchSourceContext(false));

        boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
        System.out.println(exists);
    }

    //获取文档
    @Test
    void testGetDocument()throws  Exception{
    
    
        GetRequest getRequest = new GetRequest("yaojun", "1");


        GetResponse response = client.get(getRequest, RequestOptions.DEFAULT);
        System.out.println(response.getSourceAsString()); //打印文档的内容
        System.out.println(response);
    }
    //更新文档
    @Test
    void testUpdateDocument()throws  Exception{
    
    
        UpdateRequest updateRequest = new UpdateRequest("yaojun", "1");
        updateRequest.timeout("1s");
        User user = new User("姚军",18);
        updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);

        UpdateResponse response = client.update(updateRequest, RequestOptions.DEFAULT);
        System.out.println(response.status());
    }
    //删除文档
    @Test
    void testDeleteDocument()throws  Exception{
    
    
        DeleteRequest request = new DeleteRequest("yaojun", "1");
        request.timeout("1s");


        DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
        System.out.println(response.status());
    }

    //删除文档
    @Test
    void testBulkDocument()throws  Exception{
    
    
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("10s");

        ArrayList<User> userList = new ArrayList<>();
        userList.add(new User("姚军1", 18));
        userList.add(new User("姚军2", 19));
        userList.add(new User("姚军3", 8));
        userList.add(new User("姚军4", 8));
        userList.add(new User("姚军5", 8));

        //批处理请求
        for(int i = 0; i < userList.size(); i++){
    
    
            bulkRequest.add(
                    new IndexRequest("yaojun").id(""+(i+1)).source(JSON.toJSONString(userList.get(i)), XContentType.JSON)
            );
        }
        BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);

        System.out.println(bulkResponse.hasFailures()); //判断是否失败
    }

    //查询
    @Test
    void testSearchDocument()throws Exception{
    
    
        SearchRequest request = new SearchRequest("yaojun");
        //构建搜索条件
        SearchSourceBuilder searchSource = new SearchSourceBuilder();
        //查询语句
        //QueryBuilders.termQuery() 精确匹配
        //  QueryBuilders.matchAllQuery() 匹配全部

        TermQueryBuilder termQuery = QueryBuilders.termQuery("name", "yaojun");
        searchSource.query(termQuery);
        //searchSource.from(); 构建分页
        //searchSource.size();

        searchSource.timeout(new TimeValue(60, TimeUnit.SECONDS));

        request.source(searchSource);
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        System.out.println(JSON.toJSONString(response.getHits()));
        System.out.println("====================");
        for (SearchHit hit : response.getHits().getHits()) {
    
    
            System.out.println(hit.getSourceAsMap());
        }
    }
}

集成Redis

2020.10.24参考视频

  • 默认使用的jdk序列化,可以重写redisTemplate配置类,配置具体的序列化方式。

  • 在企业中,我们所有的pojo类都需要序列化

  • 依赖包

    <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    
  • 配置参数

    spring.redis.host=127.0.0.1
    spring.redis.port=6379
    
  • yaml

    spring:
      redis:
        host: 127.0.0.1
        port: 6379
    
  • RedisTemplate键值对为对象

    @SpringBootTest
    class DemoApplicationTests {
          
          
    
        @Autowired
        private RedisTemplate redisTemplate;
    
        @Test
        void contextLoads() {
          
          
            //opsForValue() 操作字符串
            //opsForList() 操作列表
            //opsForSet()
            redisTemplate.opsForValue().set("myKey","YaoJun");
            System.out.println(redisTemplate.opsForValue().get("myKey"));
        }
    
    }
    
    
  • StringRedisTemplate键值对为字符串

    @SpringBootTest(classes = DemoApplication.class)
    @RunWith(SpringRunner.class)
    class DemoApplicationTests {
          
          
        /*key和value都是字符串*/
        @Autowired
        private StringRedisTemplate template;
    
        /*opsForValue实际操作的是字符串get和set*/
        @Test
        void testStringRedisTemplate() {
          
          
            template.opsForValue().set("name","jun");
            System.out.println(template.opsForValue().get("myKey"));
        }
    
        @Test
        void testKey() {
          
          
            /*删除一个key*/
    		template.delete("name");
            /*判断某个key是否存在*/
            Boolean hasKey = template.hasKey("myKey");
            System.out.println(hasKey);
            /*判断key所对应的类型*/
            DataType myKey = template.type("myKey");
            System.out.println(myKey);
            /*获取redis中所有key*/
            Set<String> keys = template.keys("*");
            keys.forEach(k-> System.out.println("key = "+k));
        }
    
    }
    

整合JDBC

2020.10.20狂神学习视频

Spring Boot底层统一采用Spring data进行处理

  • 控制层

    @RestController
    public class JdbcController {
          
          
        @Autowired
        JdbcTemplate jdbcTemplate;
    
        //查询数据库的所有信息
        @GetMapping("/userList")
        public List<Map<String, Object>> userList(){
          
          
            String sql = "select * from department";
            List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
            return maps;
        }
    
        @GetMapping("/addUser")
        public String addUser(){
          
          
            String sql = "insert into yaojun.department(id,name,phone) values(3, 'Jack',8910)";
            jdbcTemplate.update(sql);
            return "update_ok";
        }
    }
    
  • 依赖包

    <dependencies>
    <!--1.jdbc-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>
    <!--2.mysql驱动-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.22</version>
                <scope>runtime</scope>
            </dependency>
    <!--3.web依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    
  • 配置文件

    spring:
      datasource:
        username: root
        password: 123456
        url: jdbc:mysql://localhost:3306/yaojun?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
        driver-class-name: com.mysql.cj.jdbc.Driver
    

整合Mybatis

遇到的坑

  • mysql-connector的版本必须和本地mysql版本一致,特别是mysql8.0以上的。
  • mybatis.mapper目录是两层目录的叠加,但是不能像创建Java文件一样一步创建完,必须一层一层创建,不然找不到mapper.xml文件。【经常在这里掉链子】
  • mybatis是简化jdbc的操作,所以必须先判断数据库是否能连接上。

主要是将sql语句的编写统一放到了配置文件中,需要结合jdbc使用。

  • 依赖包

    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.3</version>
    </dependency>
    
  • 附加配置

    # 整合mybatis
    mybatis:
      type-aliases-package: com.bytedance.pojo
      mapper-locations: mybatis/mapper/*.xml
    
  • Mapper配置

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.bytedance.mapper.UserMapper">
    <!--查询数据-->
        <select id="queryUserList" resultType="User">
            select * from user;
        </select>
    <!--添加数据-->
        <insert id="addUser" parameterType="User">
            insert into user (id, name, pwd) values (#{id}, #{name}, #{pwd})
        </insert>
    </mapper>
    
  • 模型层

    @Repository
    @Mapper
    //表示这是一个mybatis的mapper类
    public interface UserMapper {
          
          
        List<User> queryUserList();
        User queryUserById(int id);
        int addUser(User user);
        int updateUser(User user);
        int deleteUser(int id);
    }
    
  • 实体类

    @Data
    @NoArgsConstructor
    public class User {
          
          
        private int id;
        private String name;
        private int pwd;
    
        public User(int id, String name, int pwd) {
          
          
            this.id = id;
            this.name = name;
            this.pwd = pwd;
        }
    }
    
  • 控制层

    @RestController
    public class UserController {
          
          
        @Autowired
        private UserMapper userMapper;
    
        //查询用户
        @GetMapping("/queryUserList")
        public List<User> queryUserList(){
          
          
            List<User> users = userMapper.queryUserList();
            for (User user : users) {
          
          
                System.out.println(user);
            }
            return users;
        }
    
        //添加用户
        @GetMapping("/addUser")
        public String addUser(){
          
          
           userMapper.addUser(new User(5,"Tim",12345));
            return "addUser_ok";
        }
    }
    

邮件Email

2020.11.10狂神说视频

  • 依赖包
<!--email-->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
  • 配置
spring.mail.host=smtp.qq.com
spring.mail.username=940334249@qq.com
#qq设置账户里面获取
spring.mail.password=xxx
#开启加密验证
spring.mail.properties.mail.smtp.ssl.enable=true
  • 单元测试
package com.bytedance;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

@SpringBootTest
public class EmailTest {
    
    
    @Autowired
    JavaMailSenderImpl mailSender;
    @Test
    void test(){
    
    
        //一个简单的邮件
        SimpleMailMessage mailMessage = new SimpleMailMessage();
        mailMessage.setSubject("主题");
        mailMessage.setText("正文");
        mailMessage.setTo("[email protected]");
        mailMessage.setFrom("[email protected]");

        mailSender.send(mailMessage);
    }
    @Test
    void mimeEmailTest() throws MessagingException {
    
    
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);

        helper.setSubject("主题_mime");
        helper.setText("<p style='color:red'>你好牛逼MIME<p>", true);

        //附件
        helper.addAttachment("神乐板真冬.jpg", new File("E:\\image\\red.jpg"));
        helper.setTo("[email protected]");
        helper.setFrom("[email protected]");
        mailSender.send(mimeMessage);
    }
}

猜你喜欢

转载自blog.csdn.net/SYaoJun/article/details/109257567