开发实用篇——数据层解决方案

SQL(数据源+持久化+数据库)

Druid+MyBtais-Plus+MySQL

  • 现有数据层解决方案技术选型
    数据源:DruidDataSource
    持久化技术:MyBtais-Plus/MyBatis
    数据库:MySQL
  • Druid配置格式(两种,推荐第二种)
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
    username: root
    password: 123456
    type: com.alibaba.druid.pool.DruidDataSourc
spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
      username: root
      password: 123456

内嵌数据源

HikariCP

  • 默认的内置数据源对象
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
    hikari:
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: root
      password: 123456

Tomcat提供DataSource

  • HikariCP不可用的情况下,且在Web环境中,将使用tomcat服务器配置的数据源对象
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
    tomcat:
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: root
      password: 123456

Commons DBCP

  • 前两者都可使用的情况下会使用dbcp数据源
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
    dbcp2:
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: root
      password: 123456

JdbcTemplate(持久化技术MyBtis和MyBatis-Plus)

  • 导入jdbc依赖注释掉mybatis-plus依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

  • 编写测试类
  • 查询
    @Test
    void testJdbcTemplate(){
        String sql = "select * from t_book";
        RowMapper<Book> rm = new RowMapper<Book>(){
            @Override
            public Book mapRow(ResultSet rs, int i) throws SQLException {
                Book temp = new Book();
                temp.setId(rs.getInt("id"));
                temp.setName(rs.getString("name"));
                temp.setType(rs.getString("type"));
                temp.setDescription(rs.getString("description"));
                return temp;
            }
        };
        List<Book> list = jdbcTemplate.query(sql, rm);
        System.out.println(list);
    }
  • 新增
    @Test
    void testJdbcTemplateSave(){
        String sql = "insert into t_book values (null, 'spring1', 'spring2', 'spring3')";
        int update = jdbcTemplate.update(sql);
        System.out.println(update);
    }
  • JDBC的配置项目
    在这里插入图片描述

内置数据库

H2


使用JDBC来连接H2
  • 导入依赖
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
spring:
  h2:
    console:
      enabled: true
      path: /h2 # 上线之前务必修改为fasle否则会有重大的安全隐患
  datasource:
    url: jdbc:h2:~/test
    hikari:
      driver-class-name: org.h2.Driver
      username: sa
      password: 123456
      maximum-pool-size: 50
  • 测试
  @Autowired
  private JdbcTemplate jdbcTemplate;
   
  @Test
  void testJdbcTemplateSave(){
      String sql = "insert into t_book values (3, 'spring3', 'spring3', 'spring3')";
      int update = jdbcTemplate.update(sql);
      System.out.println(update);
  }

使用MyBatis-Plus来连接H2
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2</version>
        </dependency>
  • 配置
mybatis-plus:
  global-config:
    db-config:
      table-prefix: t_
      id-type: auto
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 标准的日志输出

spring:
  h2:
    console:
      enabled: true
      path: /h2
  datasource:
    url: jdbc:h2:~/test
    hikari:
      driver-class-name: org.h2.Driver
      username: sa
      password: 123456
      maximum-pool-size: 50
  • 测试
    @Autowired
    private BookDao bookDao;

    @Test
    void contextLoads() {
        bookDao.selectById(1);
    }

HSQL

Derby

技术选型

在这里插入图片描述

NoSQL

Redis

Redis简介

  • key-value存储结构的内存级NoSQL数据库
    支持多种数据存储格式
    支持持久化
    支持集群
  • 服务端启动命令
redis-server.exe redis.windows.conf
  • 客户端启动命令
redis-cli.exe
  • 添加数据
set a1 aa1
hset keya a1 aa1

Spring Boot整合Redis

  • 导入依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  • 配置文件
spring:
  redis:
    host: localhost
    port: 6379

  • 测试
@SpringBootTest
class Springboot13RedisApplicationTests {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void set() {
        ValueOperations ops = redisTemplate.opsForValue();
        ops.set("age",41);
    }
    @Test
    void get() {
        ValueOperations ops = redisTemplate.opsForValue();
        Object age = ops.get("age");
        System.out.println(age);
    }

    @Test
    void hset() {
        HashOperations hops = redisTemplate.opsForHash();
        hops.put("info","name","ssc");
    }
    @Test
    void hget() {
        HashOperations hops = redisTemplate.opsForHash();
        Object o = hops.get("info", "name");
        System.out.println(o);
    }
}

  • 各种redis操作的API
    在这里插入图片描述

Spring Boot读写Redis客户端

Mongo

启动

  • 服务端启动
mongod --dbpath=..\data\db
  • 客户端启动
mongo --host=127.0.0.1 --port=27017

mongo基础操作

db.book.save({"name":"springBoot"})
db.getCollection('book').find({})
db.book.find({type:"springBoot"})
db.book.remove({type:"springBoot"})
// 遇到第一条满足条件的就修改
db.book.update({name:"springBoot"},{$set:{name:"springBoot2"}})

在这里插入图片描述

整合MongoDB

  • 整合
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
  • 必要配置
spring:
  data:
    mongodb:
      uri: mongodb://localhost/ssc
  • 测试
@SpringBootTest
class SpringBoot14MongoApplicationTests {

    @Autowired
    private MongoTemplate mongoTemplate;

    @Test
    void testSave() {
        Book book = new Book();
        book.setId(2);
        book.setName("哈哈哈");
        book.setType("文学");
        book.setDescription("这是一本文学书");
        mongoTemplate.save(book);
    }

    @Test
    void testFind() {
        List<Book> all = mongoTemplate.findAll(Book.class);
        System.out.println(all);
    }
}

在这里插入图片描述

ES

  • Elasticsearch是一个分布式全文搜索引擎

启动ES

双击bin目录下面的 elasticsearch.bat文件

基本操作

http://localhost:9200/books/

  • 遵循restFul风格的API请求
  • 创建索引时携带的请求体
{
    "mappings":{
        "properties":{
            "id":{
                "type":"keyword"
            },
            "name":{
                "type":"text",
                "analyzer":"ik_max_word",
                "copy_to":"all"
            },
            "type":{
                 "type":"keyword"
            },
            "description":{
                "type":"text",
                "analyzer":"ik_max_word",
                "copy_to":"all"
            },
            "all":{
                "type":"text",
                "analyzer":"ik_max_word"
            }
        }
    }
}
创建文档

在这里插入图片描述

查询

在这里插入图片描述

删除

在这里插入图片描述

修改

在这里插入图片描述

低版本Elasticsearch整合

  • 导入依赖
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
  • 配置
spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
      username: root
      password: 123456
  elasticsearch:
    rest:
      uris: http://localhost:9200

mybatis-plus:
  global-config:
    db-config:
      table-prefix: t_
      id-type: auto
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  • 测试

注入ES的bean 通过bean来获取低版本的各种操作

高版本Elasticsearch整合

  • 导入依赖
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>
  • 测试(通过setup和tearDown来统一创建客户端连接和关闭连接
@SpringBootTest
class Springboot15EsApplicationTests {
    //@Autowired
    //private ElasticsearchRestTemplate template; // 低级别

    private RestHighLevelClient client;
	 
	 // 造个客户端
    @BeforeEach
    void setUp() {
        HttpHost host = HttpHost.create("http://localhost:9200");
        RestClientBuilder builder = RestClient.builder(host);
        client = new RestHighLevelClient(builder);
    }
	// 关闭客户端
    @AfterEach
    void tearDown() throws IOException {
        client.close();
    }

    @Test
    void testCreateIndex() throws IOException {
        CreateIndexRequest request = new CreateIndexRequest("books");
        client.indices().create(request, RequestOptions.DEFAULT);
    }
}

添加文档

  • postman中不会出现问题,但是IDEA中会出现问题
    @Test
    void testCreateIndexByIk() throws IOException {
        CreateIndexRequest request = new CreateIndexRequest("books");
        String json = "{\n" +
                "    \"mappings\":{\n" +
                "        \"properties\":{\n" +
                "            \"id\":{\n" +
                "                \"type\":\"keyword\"\n" +
                "            },\n" +
                "            \"name\":{\n" +
                "                \"type\":\"text\",\n" +
                "                \"analyzer\":\"ik_max_word\",\n" +
                "                \"copy_to\":\"all\"\n" +
                "            },\n" +
                "            \"type\":{\n" +
                "                 \"type\":\"keyword\"\n" +
                "            },\n" +
                "            \"description\":{\n" +
                "                \"type\":\"text\",\n" +
                "                \"analyzer\":\"ik_max_word\",\n" +
                "                \"copy_to\":\"all\"\n" +
                "            },\n" +
                "            \"all\":{\n" +
                "                \"type\":\"text\",\n" +
                "                \"analyzer\":\"ik_max_word\"\n" +
                "            }\n" +
                "        }\n" +
                "    }\n" +
                "}";
        // 设置请求中的参数
        request.source(json, XContentType.JSON);
        client.indices().create(request, RequestOptions.DEFAULT);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值