Spring family bucket learning (2)

Preface:

September last year, my colleagues and I at the time geeks bought Ding Xuefeng Spring family bucket of learning, the curriculum is divided into 16 chapters in total, I have learned the most part, are recorded in a notebook before, today I want to record on the Blog, Share more knowledge to those in need of help, I will be the number of chapters as the content of the article, the original course speak in more detail, I am here to do a summary on some specific points.

I. easy connection pool HiKarCP

HiKarCp authors say the light is soon mean.

SpringBoot 2.x 

  1. Default HikariCP
  2. Placed spring.datasource.hikari. * Arrangement

SpringBoot 1.x

  1. Default Tomcat connection pool, you need to remove the tomcat-jdbc-dependent
  2. spring.datasource.type=com.zaxxer.HikariDataSource

 

Commonly located:

  • 1. The introduction of the jar package HiKarCP
  • 2. profile configuration information
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.idle-timeout=600000
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.max-lifetime=1800000

Refer to: http://fanlychie.github.io/post/spring-boot-tomcat-pool-hikaricp-dbcp-dbcp2.html

II. Easy to use database connection pool Alibaba druid

Refer to: https://blog.csdn.net/jay100500/article/details/81270298

See also my other blog post, there are Alibaba explain this database connection pool.

III. How to access data through Spring JDBC

spring-jdbc

  1. core JdbcTemplate and other related core interfaces and classes
  2. dataSource, the data source associated auxiliary class
  3. object, the basic operation of the package into target JDBC
  4. support, error codes, and other aids.

Common bean notes:

  1. @Component (corresponding to a common definition of the bean)
  2. @Repository (a warehouse database operations on database related things you can use this annotation)
  3. @Service
  4. @Controller
  5. @ResController

Simple JDBC operations

JdbcTemplate

  1. query
  2. queryForObject (single data)
  3. the queryForList (pieces of data)
  4. update
  5. execute

How to use these methods in JdbcTemplate?

  • (1) JDBC jar package introduced, I posted the entire pom file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>spring-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </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>
        </dependency>

        <!-- MySQL start -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.39</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
  • (2) the connection configuration information in the configuration file
server.port=8007

# MySQL Database
spring.datasource.url=jdbc:mysql://192.168.20.81:3306/main_config?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
  • (3) a new table linkman, id set the primary key, the default auto increment

 

  • (4) LinkMan entity class
package com.example.simplejdbcdemo;

import lombok.Builder;
import lombok.Data;

/**
 * @Author tanghh
 * @Date 2020/3/23 14:25
 */
@Data
@Builder
public class LinkMan {
    private Integer id;
    private String linkmanName;

}
  • (5) Dao layer
package com.example.simplejdbcdemo;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;

/**
 * @Author tanghh
 * @Date 2020/3/23 14:27
 */
@Slf4j
@Repository
public class LinkManDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    /**
     * 1.添加数据
     */
    public void insertData() {
        Arrays.asList("666", "7777").forEach(bar -> {
            jdbcTemplate.update("insert into linkman (linkman_name) values(?)", bar);
        });

    }

    /**
     * 2.查询所有的数据
     */
    public void listData() {
        log.info("Count: {}",
                jdbcTemplate.queryForObject("SELECT COUNT(*) FROM linkman", Long.class));

        List<String> list = jdbcTemplate.queryForList("SELECT linkman_name FROM linkman", String.class);
        list.forEach(s -> log.info("linkman_name: {}", s));

        List<LinkMan> fooList = jdbcTemplate.query("SELECT * FROM linkman", new RowMapper<LinkMan>() {
            @Override
            public LinkMan mapRow(ResultSet rs, int rowNum) throws SQLException {
                return LinkMan.builder()
                        .id(rs.getInt(1))
                        .linkmanName(rs.getString(2))
                        .build();
            }
        });
        fooList.forEach(f -> log.info("Foo: {}", f));
    }

}
  •  (6) Control Layer
package com.example.simplejdbcdemo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author tanghh
 * @Date 2020/3/23 14:28
 */
@RestController
public class TestJdbcController {
   @Autowired
   private LinkManDao linkManDao;

   @Autowired
   private BatchLinkManDao batchLinkManDao;

    @GetMapping(value = "/testApi")
    public void testApi(){
        //1.添加数据
        linkManDao.insertData();
        //2.查询所有的数据
        linkManDao.listData();
        //3.批量添加方式1
//        batchLinkManDao.batchInsertWay1();
        //4.批量添加方式2
//        batchLinkManDao.batchInsertWay2();
    }

}
  •  (7) browser access interface

  • (8) implementation of the results:

 

 

SQL batch

JdbcTemplate

  • batchUpdate
  • BatchPreparedStatementSetter

NamedParameterJdbcTemplate

  • batchUpdate
  • SqlParameterSourceUtils.createBatch

 How to use a batch?

Followed the example above, I have to sit down and find both a method above is annotated with the ordinary insertion and maybe a batch is done as an example, the environment or something like it.

  •  (1) batch of class: BatchLinkManDao
package com.example.simplejdbcdemo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSourceUtils;
import org.springframework.stereotype.Repository;

import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

@Repository
public class BatchLinkManDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private NamedParameterJdbcTemplate namedParameterJdbcTemplate;

    /**
     * 批量添加方式1
     */
    public void batchInsertWay1() {
        jdbcTemplate.batchUpdate("INSERT INTO linkman (linkman_name) VALUES (?)",
                new BatchPreparedStatementSetter() {
                    @Override
                    public void setValues(PreparedStatement ps, int i) throws SQLException {
                        ps.setString(1, "csdn博客" + i);
                    }

                    @Override
                    public int getBatchSize() {
                        return 2;
                    }
                });


    }

    /**
     * 批量添加方式2
     */
    public void batchInsertWay2() {
        List<LinkMan> list = new ArrayList<>();
        list.add(LinkMan.builder().linkmanName("soup_tang").build());
        list.add(LinkMan.builder().linkmanName("csdn").build());
        namedParameterJdbcTemplate
                .batchUpdate("INSERT INTO linkman (linkman_name) VALUES (:linkmanName)",
                        SqlParameterSourceUtils.createBatch(list));
    }
}
  • (2) the implementation of this interface:

  • (3) the effect of execution

 

 

 

Published 66 original articles · won praise 49 · views 20000 +

Guess you like

Origin blog.csdn.net/tangthh123/article/details/105044124