Primavera de aprendizaje cubo de la familia (2)

Prefacio:

Septiembre del año pasado, mis colegas y yo en los frikis tiempo ganado cubo de la familia Ding Xuefeng primavera de aprendizaje, el plan de estudios se divide en 16 capítulos en total, he aprendido la mayor parte, son registrados en un cuaderno antes, hoy quiero grabar en el blog, compartir más conocimiento a las personas que necesitan ayuda, voy a ser el número de capítulos como el contenido del artículo, el curso original hablar con más detalle, yo estoy aquí para hacer un resumen sobre algunos puntos específicos.

I. fácil conexión de la piscina HiKarCP

HiKarCp autores dicen que la luz es muy pronto media.

2.x SpringBoot 

  1. predeterminado HikariCP
  2. spring.datasource.hikari colocado. * Arreglo

1.x SpringBoot

  1. Por defecto agrupación de conexiones Tomcat, tiene que quitar el gato-JDBC dependiente
  2. spring.datasource.type = com.zaxxer.HikariDataSource

 

Comúnmente se encuentra:

  • 1. La introducción del paquete jar HiKarCP
  • 2. información de configuración de perfil
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

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

II. Fácil de usar la base de datos de conexión de la piscina Alibaba druida

Consulte: https://blog.csdn.net/jay100500/article/details/81270298

Véase también mi otro blog, hay Alibaba explicar esta agrupación de conexiones de base de datos.

III. ¿Cómo acceder a los datos a través de JDBC primavera

primavera-jdbc

  1. núcleo JdbcTemplate y otras interfaces centrales relacionados y clases
  2. dataSource, la clase auxiliar origen de datos asociado
  3. objeto, el funcionamiento básico del paquete en blanco JDBC
  4. apoyo, códigos de error, y otras ayudas.

Notas comunes de frijol:

  1. @Component (correspondiente a una definición común de la judía)
  2. @Repository (a operaciones de bases de datos de almacén de cosas relacionadas con bases de datos puede utilizar esta anotación)
  3. @Servicio
  4. @Controlador
  5. @ResController

operaciones sencillas de JDBC

JdbcTemplate

  1. consulta
  2. queryForObject (datos individual)
  3. la queryForList (trozos de datos)
  4. actualizar
  5. ejecutar

Cómo utilizar estos métodos en JdbcTemplate?

  • (1) paquete jar JDBC introducido, he publicado todo el archivo POM
<?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) la información de configuración de conexión en el archivo de configuración
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) un nuevo linkman tabla, ID de conjunto de la clave principal, el incremento automático por defecto

 

  • clase de entidad (4) linkman
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) Capa de Dao
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) Capa de Control
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();
    }

}
  •  interfaz de acceso (7) del navegador

  • (8) La aplicación de los resultados:

 

 

lote SQL

JdbcTemplate

  • batchUpdate
  • BatchPreparedStatementSetter

NamedParameterJdbcTemplate

  • batchUpdate
  • SqlParameterSourceUtils.createBatch

 Cómo utilizar un lote?

Seguido el ejemplo anterior, tengo que sentarse y encontrar tanto un método anterior se anota con la inserción ordinaria y tal vez un lote se hace como un ejemplo, el medio ambiente o algo por el estilo.

  •  (1) lote de clase: 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) la implementación de esta interfaz:

  • (3) el efecto de la ejecución

 

 

 

Publicado 66 artículos originales · ganado elogios 49 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/tangthh123/article/details/105044124
Recomendado
Clasificación