[Aplicación SpringBoot] SpringBoot+MybatisPlus integra la base de datos doméstica DM8 (Dameng)

Introducción e instalación

DM8 es una nueva generación de producto de base de datos de alto rendimiento lanzado por Dameng Database Co., Ltd. Tiene una arquitectura abierta y escalable, un sistema de procesamiento de transacciones fácil de usar y bajos costos de mantenimiento.Es un producto completamente desarrollado por Dameng. DM8 toma RDBMS como el núcleo y SQL como el estándar. Es un sistema de gestión de bases de datos de propósito general eficiente y estable que puede abarcar múltiples plataformas de software y hardware y tiene capacidades de gestión integrales para datos a gran escala.

Conectar al documento de instalación de la instancia de la base de datos de Dameng

Herramienta de conexión, la base de datos Dameng instalada ya viene con una herramienta de visualización del cliente
inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

Introducción a los conceptos básicos

Aquí hay una breve introducción a los siguientes conceptos simples pero importantes: base de datos, instancia, usuario, espacio de tabla, esquema, tabla, función y archivo de datos.

Base de datos : El medio físico en el que se almacenan los datos. En un sentido amplio, cualquier medio físico que almacene datos puede denominarse base de datos, como un documento de Word. Pero, de hecho, cuando decimos base de datos, generalmente nos referimos a sistemas de software como MySQL, ORACLE, HBASE, etc. Además de proporcionar almacenamiento de datos, estos sistemas también brindan un conjunto de herramientas o interfaces relacionadas para administrar los datos almacenados. La base de datos Dameng es un sistema de este tipo.

Instancia de base de datos : Un almacén que ha sido instanciado para almacenar datos. Hay una gran diferencia entre la base de datos Dameng y la base de datos MySQL: después de que se inicia el servicio MySQL, se crean N bases de datos (instancias de base de datos) a través de la declaración de creación de base de datos; mientras que una instancia de la base de datos Dameng solo se puede conectar a una base de datos ( es decir, una instancia es una base de datos), si desea crear varias bases de datos, debe configurar e iniciar la cantidad correspondiente de instancias. Cada instancia de Dameng tiene una serie de procesos de fondo y estructuras de memoria, que son independientes entre sí.

Usuario : los usuarios de la base de datos de Dameng se crean bajo la instancia, ya que las instancias son independientes entre sí, todas las instancias diferentes de la base de datos de Dameng pueden tener el mismo nombre de usuario. Además, cuando se crea un usuario a través de la declaración de creación de usuario en la base de datos de Dameng, se creará un "esquema" con el mismo nombre al mismo tiempo. También puede crear un esquema por separado a través de la declaración de creación de esquema (atención especial: en Oracle, los usuarios y los esquemas tienen una correspondencia uno a uno, y los esquemas no se pueden crear de forma independiente. Para crear un esquema, debe crear un usuario con el mismo nombre), y autorícelo a un determinado Hay usuarios existentes, por lo que existe una relación 1:N entre los usuarios y los esquemas en la base de datos de Dameng. (Nota: si primero crea un esquema a través de crear esquema y luego crea un usuario con el mismo nombre a través de crear usuario, la creación no puede tener éxito).

Espacio de tabla : Es un concepto utilizado para administrar el almacenamiento de datos. El espacio de tabla solo está relacionado con el archivo de datos (archivo ORA o DBF). El archivo de datos es físico. Un espacio de tabla puede contener varios archivos de datos, mientras que un archivo de datos puede solo pertenece a un tablespace. Un espacio de tabla puede entenderse como correspondiente a un área de almacenamiento físico dedicada a almacenar archivos de datos. Al instanciar la base de datos de Dameng, se crearán cinco espacios de tablas MAIN, ROLL, SYSTEM, TEAM y HMAIN de forma predeterminada. Los espacios de tabla ROLL, SYSTEM y TEAM los mantiene el propio sistema, y ​​las tablas creadas por los usuarios (si no se especifica ningún espacio de tabla) se colocan en el espacio de tabla MAIN de forma predeterminada. Los usuarios también pueden personalizar el espacio de tablas y luego especificarlo como el espacio de tablas predeterminado al crear un usuario, o especificar dinámicamente el espacio de tablas de almacenamiento de la tabla agregando la instrucción "tablespace SpaceName" al crear una tabla.

Modo (esquema) : si solo ha utilizado MySQL y no tiene experiencia en el uso de la base de datos ORACLE, este concepto es difícil de entender.

Hay algunas cosas a tener en cuenta acerca de los patrones:

  • Un usuario generalmente corresponde a un esquema, y ​​el nombre del esquema del usuario es igual al nombre del usuario y se usa como el esquema predeterminado del usuario;

  • Un usuario también puede usar otros esquemas (la base de datos de Oracle también puede acceder a otros esquemas a través de la administración de permisos);

  • Cuando el modo de creación no especifica un usuario, el modo es propiedad de SYSDBA de manera predeterminada;

  • Los objetos con el mismo nombre no pueden existir en el mismo esquema, pero los objetos en diferentes esquemas pueden tener el mismo nombre;

  • Los usuarios pueden acceder directamente a objetos de esquema con el mismo nombre, pero si quieren acceder a otros objetos de esquema, deben tener permisos de objeto;

  • Cuando los usuarios desean acceder a otros objetos del esquema, deben agregar el nombre del esquema como sufijo (schema.table);

  • Los usuarios se utilizan para conectarse a los objetos de la base de datos, mientras que los esquemas se utilizan para crear y administrar objetos.

Tabla : No hace falta decirlo, pero un punto a explicar es que una tabla solo puede pertenecer a un espacio de tablas.

Rol: en la base de datos de Dameng, cada usuario tiene un rol. Determina qué autoridad tiene el usuario, como DBA, tiene la autoridad más alta. Una nota complementaria es que la base de datos de Dameng instanciada tiene 3 roles por defecto: DBA, PÚBLICO, RECURSO. El usuario recién creado solo tiene el rol PÚBLICO, que es casi inútil, por lo tanto, después de crear un nuevo usuario, necesita ser autorizado por separado.

Archivo de datos : el soporte físico de los datos.

Aquí hay una analogía para ayudar a entender:

"Podemos pensar en la base de datos como un gran almacén. El almacén está dividido en muchas habitaciones. El esquema es una de las habitaciones. Un esquema representa una habitación. La mesa puede considerarse como una cama en cada esquema. La mesa (cama) se coloca en cada habitación, no se puede colocar fuera de la habitación. ¿No sería sin hogar por la noche, y luego se pueden colocar muchos elementos en la cama, al igual que se pueden colocar muchas columnas y filas en la Mesa, la unidad básica de almacenamiento de datos? en la base de datos es una Tabla. En realidad, la unidad básica para colocar elementos en cada almacén es la cama, y ​​el Usuario es el propietario de cada Esquema (por lo que el Esquema contiene Objetos, no Usuarios). -una correspondencia entre usuarios y esquemas, y cada usuario está en Si no hay una designación especial, solo puede usar su propio esquema (sala). Si un usuario quiere usar otro esquema (sala), depende de si el usuario ( propietario) de ese esquema (sala) le ha dado este permiso. O vea si el jefe (DBA) de este almacén le ha dado este permiso. En otras palabras, si usted es el propietario de un cierto almacén, entonces el derecho a usar el almacén y todo en el almacén es tuyo (incluida la habitación), tienes derechos de operación completos, puedes tirar las cosas que no uses de cada habitación y también puedes colocar algunas cosas útiles en una habitación determinada. También puedes asignar permisos específicos a cada Usuario, es decir, puede ir a una habitación determinada. Qué se puede hacer, si solo se puede leer (Read-Only), o puede tener todos los derechos de control (R/W) como el maestro, esto depende de el rol que le corresponde al Usuario." — Extraído de Internet

SpringBoot+MP integra DM8

La prueba utiliza la creada para nosotros al inicializar la instancia de la base de datos de Dameng schema:PERSON,表:ADDRESS
inserte la descripción de la imagen aquí

CREATE TABLE "PERSON"."ADDRESS"
(
"ADDRESSID" INT IDENTITY(1, 1) NOT NULL,
"ADDRESS1" VARCHAR(60) NOT NULL,
"ADDRESS2" VARCHAR(60),
"CITY" VARCHAR(30) NOT NULL,
"POSTALCODE" VARCHAR(15) NOT NULL,
NOT CLUSTER PRIMARY KEY("ADDRESSID")) STORAGE(ON "BOOKSHOP", CLUSTERBTR) ;

pompón

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
     <version>2.3.2.RELEASE</version>
</parent>

<dependencies>
      <!-- 达梦数据库依赖 -->
      <dependency>
          <groupId>com.dameng</groupId>
          <artifactId>DmJdbcDriver18</artifactId>
          <version>8.1.1.193</version>
      </dependency>

      <!-- Mybatis-Plus依赖 -->
      <dependency>
          <groupId>com.baomidou</groupId>
          <artifactId>mybatis-plus-boot-starter</artifactId>
          <version>3.1.0</version>
      </dependency>

      <dependency>
          <groupId>org.apache.commons</groupId>
          <artifactId>commons-lang3</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>
      </dependency>
  </dependencies>

yml

spring:
  datasource:
    driver-class-name: dm.jdbc.driver.DmDriver
    # 达梦 模式名就相当于库名
    url: jdbc:dm://localhost:5236?schema=PERSON&compatibleMode=mysql&characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
    #写法二
    #url: jdbc:dm://localhost:5236/PERSON&compatibleMode=mysql&characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
    username: SYSDBA
    password: 123456789
mybatis-plus:
  configuration:
    # 驼峰转换 从数据库列名到Java属性驼峰命名的类似映射
    map-underscore-to-camel-case: false
    # 是否开启缓存
    cache-enable: false
    # 如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段
    #call-setters-on-nulls: true
    # 打印sql
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

DIRECCIÓN

@Data
@TableName(value = "PERSON.ADDRESS")
public class Address {
    
    

    @TableId(value = "ADDRESSID", type = IdType.AUTO)
    private Integer addressId;

    @TableField("ADDRESS1")
    private String address1;

    @TableField("ADDRESS2")
    private String address2;

    @TableField("CITY")
    private String city;

    @TableField("POSTALCODE")
    private String postaLoCode;
}

Mapeador de direcciones

public interface AddressMapper extends BaseMapper<Address> {
    
    
}

clase de inicio

@MapperScan(basePackages = "cn.zysheep.mapper")
@SpringBootApplication
public class DmApplication {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(DmApplication.class, args);
    }
}

clase de prueba

@SpringBootTest(classes = DmApplication.class)
public class AddressMapperTest{
    
    

    @Autowired
    DataSource dataSource;

    @Autowired(required = false)
    AddressMapper addressMapper;

    @Test
    public void test() throws SQLException {
    
    
        System.out.println(dataSource.getConnection());
    }
}

aumentar

@Test
public void testSave() {
    
    
    Address address = new Address();
    address.setAddress1("长沙");
    address.setCity("长沙市天心区");
    address.setPostaLoCode("430001");
    addressMapper.insert(address);
}

inserte la descripción de la imagen aquí

borrar

@Test
public void testDeleteById() {
    
    
    addressMapper.deleteById("17");
}

@Test
public void testDelete() {
    
    
    Address address = new Address();
    address.setAddressId(14);
    address.setCity("长沙");
    detele(address);
}

public void detele(Address address) {
    
    

    //  eq(boolean condition, R column, Object val)
    //  第一个参数条件满足才拼接条件
    LambdaQueryWrapper<Address> queryWrapper = Wrappers.<Address>lambdaQuery()
            .eq(Objects.nonNull(address.getAddressId()), Address::getAddressId, address.getAddressId())
            .eq(StringUtils.isNotBlank(address.getCity()), Address::getCity, address.getCity());


    addressMapper.delete(queryWrapper);
}

inserte la descripción de la imagen aquí

cambiar

@Test
public void testUpdateById() {
    
    
    Address address = new Address();
    address.setAddressId(17);
    address.setCity("长沙市芙蓉区");
    address.setPostaLoCode("430002");
    addressMapper.updateById(address);
}

@Test
public void testUpdate() {
    
    
    LambdaUpdateWrapper<Address> wrapper = Wrappers.<Address>lambdaUpdate()
            .set(Address::getCity, "长沙市岳麓区")
            .set(Address::getPostaLoCode,"430001")
            .eq(Address::getAddressId,"1");

    addressMapper.update(null,wrapper);
}

inserte la descripción de la imagen aquí

controlar

@Test
public void testSelect() {
    
    
    List<Address> selectList = addressMapper.selectList(Wrappers.emptyWrapper());
    System.out.println(selectList);
}

inserte la descripción de la imagen aquí

Problema de mapeo de tabla de configuración y clase de entidad @TableName

Método de escritura 1: application.yml

# 写法一
spring:
  datasource:
   url: jdbc:dm://localhost:5236?schema=PERSON

Clase de entidad, @TableNameno se puede especificar el esquema

@Data
@TableName(value = "ADDRESS")
public class Address {
    
    
	
}

Método de escritura 2: application.yml

# 写法二
spring:
  datasource:
   url: jdbc:dm://localhost:5236/PERSON

Clase de entidad, @TableNamese debe especificar el esquema; de lo contrario, no se encontrará la tabla

@Data
@TableName(value = "PERSON.ADDRESS")
public class Address {
    
    
	
}

inserte la descripción de la imagen aquí

Independientemente del método utilizado para la configuración de yml en el desarrollo real, se recomienda enfáticamente @TableName(value = "PERSON.ADDRESS")especificar el esquema.

Supongo que te gusta

Origin blog.csdn.net/qq_45297578/article/details/131907240
Recomendado
Clasificación