欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

SpringBoot整合MyBatisPlus配置動(dòng)態(tài)數(shù)據(jù)源的方法

MybatisPlus特性

目前創(chuàng)新互聯(lián)已為成百上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁(yè)空間、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、黔江網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

•無(wú)侵入:只做增強(qiáng)不做改變,引入它不會(huì)對(duì)現(xiàn)有工程產(chǎn)生影響,如絲般順滑
•損耗?。?jiǎn)?dòng)即會(huì)自動(dòng)注入基本 CURD,性能基本無(wú)損耗,直接面向?qū)ο蟛僮?br />•強(qiáng)大的 CRUD 操作:內(nèi)置通用 Mapper、通用 Service,僅僅通過(guò)少量配置即可實(shí)現(xiàn)單表大部分 CRUD 操作,更有強(qiáng)大的條件構(gòu)造器,滿(mǎn)足各類(lèi)使用需求
•支持 Lambda 形式調(diào)用:通過(guò) Lambda 表達(dá)式,方便的編寫(xiě)各類(lèi)查詢(xún)條件,無(wú)需再擔(dān)心字段寫(xiě)錯(cuò)
•支持多種數(shù)據(jù)庫(kù):支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer2005、SQLServer 等多種數(shù)據(jù)庫(kù)
•支持主鍵自動(dòng)生成:支持多達(dá) 4 種主鍵策略(內(nèi)含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解決主鍵問(wèn)題
•支持 XML 熱加載:Mapper 對(duì)應(yīng)的 XML 支持熱加載,對(duì)于簡(jiǎn)單的 CRUD 操作,甚至可以無(wú) XML 啟動(dòng)
•支持 ActiveRecord 模式:支持 ActiveRecord 形式調(diào)用,實(shí)體類(lèi)只需繼承 Model 類(lèi)即可進(jìn)行強(qiáng)大的 CRUD 操作
•支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere )
•支持關(guān)鍵詞自動(dòng)轉(zhuǎn)義:支持?jǐn)?shù)據(jù)庫(kù)關(guān)鍵詞(order、key......)自動(dòng)轉(zhuǎn)義,還可自定義關(guān)鍵詞
•內(nèi)置代碼生成器:采用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼,支持模板引擎,更有超多自定義配置等您來(lái)使用
•內(nèi)置分頁(yè)插件:基于 MyBatis 物理分頁(yè),開(kāi)發(fā)者無(wú)需關(guān)心具體操作,配置好插件之后,寫(xiě)分頁(yè)等同于普通 List 查詢(xún)
•內(nèi)置性能分析插件:可輸出 Sql 語(yǔ)句以及其執(zhí)行時(shí)間,建議開(kāi)發(fā)測(cè)試時(shí)啟用該功能,能快速揪出慢查詢(xún)
•內(nèi)置全局?jǐn)r截插件:提供全表 delete 、 update 操作智能分析阻斷,也可自定義攔截規(guī)則,預(yù)防誤操作
•內(nèi)置 Sql 注入剝離器:支持 Sql 注入剝離,有效預(yù)防 Sql 注入攻擊

快速開(kāi)始

初始化測(cè)試數(shù)據(jù)表:

DROP TABLE IF EXISTS user;
CREATE TABLE user
(
 id BIGINT(20) NOT NULL COMMENT '主鍵ID',
 name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
 age INT(11) NULL DEFAULT NULL COMMENT '年齡',
 email VARCHAR(50) NULL DEFAULT NULL COMMENT '郵箱',
 PRIMARY KEY (id)
);
DELETE FROM user;
INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

父工程依賴(lài)

該工程用于依賴(lài)管理,pom如下:

<properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 <java.version>1.8</java.version>
 <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
 <mybatis-plus-version>3.1.1</mybatis-plus-version>
 <mysql-driver-version>5.1.47</mysql-driver-version>
 <druid-version>1.1.10</druid-version>
 </properties>

<dependencyManagement>
 <dependencies>
  <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-dependencies</artifactId>
  <version>2.1.5.RELEASE</version>
  <type>pom</type>
  <scope>import</scope>
  </dependency>
 </dependencies>
 </dependencyManagement>

創(chuàng)建MyBaitsPlus工程

依賴(lài)如下:

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

 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
 </dependency>

 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
 </dependency>

 <!-- mybatis plus -->
 <dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>${mybatis-plus-version}</version>
 </dependency>

 <!-- mysql -->
 <dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>${mysql-driver-version}</version>
 </dependency>

 <!-- druid數(shù)據(jù)連接池 -->
 <dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid-spring-boot-starter</artifactId>
  <version>${druid-version}</version>
 </dependency>

 <dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <optional>true</optional>
 </dependency>

 <dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.17</version>
 </dependency>
 </dependencies>

properties配置

在這里配置數(shù)據(jù)庫(kù)連接,以及數(shù)據(jù)連接池與mybatisplus的配置等

server.port=8080

spring.application.name=mybatis

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root

spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.maxActive=20
spring.datasource.druid.maxWait=60000
spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
spring.datasource.druid.minEvictableIdleTimeMillis=300000
spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL
spring.datasource.druid.testWhileIdle=true
spring.datasource.druid.testOnBorrow=false
spring.datasource.druid.testOnReturn=false
spring.datasource.druid.poolPreparedStatements=true
spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.druid.filters=stat,slf4j
spring.datasource.druid.connectionProperties=druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
spring.datasource.druid.web-stat-filter.enabled=true
spring.datasource.druid.web-stat-filter.url-pattern=/*
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1,192.168.163.1
spring.datasource.druid.stat-view-servlet.deny=192.168.1.73
spring.datasource.druid.stat-view-servlet.reset-enable=false
#Druid 管理賬號(hào)
spring.datasource.druid.stat-view-servlet.login-username=admin
#Druid 管理密碼
spring.datasource.druid.stat-view-servlet.login-password=123456
#com.simple.spring.boot.mapper 該包打印DEBUG級(jí)別日志
logging.level.com.simple.spring.boot.mapper=debug

#mybatis plus mapper文件路徑
mybatis-plus.mapperLocations=classpath:/mybatis/mapper/*.xml
#mybaits plus 實(shí)體類(lèi)路徑
mybatis-plus.typeAliasesPackage=com.simple.spring.**.entities
mybatis-plus.typeEnumsPackage=
#數(shù)據(jù)庫(kù)相關(guān)配置
#主鍵類(lèi)型 AUTO:"數(shù)據(jù)庫(kù)ID自增", INPUT:"用戶(hù)輸入ID",ID_WORKER:"全局唯一ID (數(shù)字類(lèi)型唯一ID)", UUID:"全局唯一ID UUID";
mybatis-plus.global-config.db-config.id-type=UUID
#字段策略 IGNORED:"忽略判斷",NOT_NULL:"非 NULL 判斷"),NOT_EMPTY:"非空判斷"
mybatis-plus.global-config.db-config.field-strategy=not_empty
#駝峰下劃線(xiàn)轉(zhuǎn)換
mybatis-plus.global-config.db-config.column-underline=true
#數(shù)據(jù)庫(kù)大寫(xiě)下劃線(xiàn)轉(zhuǎn)換
#capital-mode: true
#邏輯刪除配置
mybatis-plus.global-config.db-config.logic-delete-value=0
mybatis-plus.global-config.db-config.logic-not-delete-value= 1
#mybatis-plus.global-config.db-config.db-type= sqlserver
#刷新mapper 調(diào)試神器
mybatis-plus.global-config.refresh=true
# 原生配置
mybatis-plus.configuration.map-underscore-to-camel-case=true
mybatis-plus.configuration.cache-enabled=false
mybatis-plus.configuration.call-setters-on-nulls =true

常規(guī)增刪改查實(shí)現(xiàn)

創(chuàng)建實(shí)體類(lèi):

**
 * 實(shí)體類(lèi)
 * @author: SimpleWu
 * @date: 2019/5/25
 */
@Data
public class User {
 private Long id;
 private String name;
 private Integer age;
 private String email;
}

該lombok插件省去getset方法。

創(chuàng)建UserMapper接口,并且實(shí)現(xiàn)BaseMapper<User>這里我們指定實(shí)體類(lèi)為user可直接使用接口中的方法。

•查詢(xún)所有數(shù)據(jù)

public List<User> getList(){
 return userMapper.selectList(null);
}

•查詢(xún)數(shù)據(jù)帶查詢(xún)條件

public List<User> getListQuery(){
 User user = new User();
 user.setName("SimpleWu");
 Wrapper<User> wrapper = new QueryWrapper<>(user);
 return userMapper.selectList(wrapper);
}

•查詢(xún)帶分頁(yè)

public IPage<User> page(){
 int currentPage = 1 ; //當(dāng)前頁(yè)
 int pageSize = 2 ;//每頁(yè)大小
 IPage<User> page = new Page(currentPage,pageSize);
 page = userMapper.selectPage(page,null);
 return page;
 }

•根據(jù)實(shí)體類(lèi)新增數(shù)據(jù)

@Transactional//本地事務(wù)開(kāi)啟
public int insert(){
 User user = new User();
 user.setId(6l);
 user.setName("SimpleWu");
 user.setAge(100);
 user.setEmail("SimpleWu@gmail.com");
 return userMapper.insert(user);
 }

•根據(jù)主鍵刪除數(shù)據(jù)

@Transactional//本地事務(wù)開(kāi)啟
 public int deleteById(){
 int userId = 6;
 return userMapper.deleteById(userId);
}

•根據(jù)ID更新數(shù)據(jù)

@Transactional//本地事務(wù)開(kāi)啟
 public int updateById(){
 User user = new User();
 user.setId(5l);
 user.setName("update");
 user.setAge(100);
 user.setEmail("update@email.com");
 return userMapper.updateById(user);
}

•條件構(gòu)造器

◦UpdateWrapper 用于增刪改構(gòu)造條件
◦QueryWrapper 用于查詢(xún)構(gòu)造條件

Transactional//本地事務(wù)開(kāi)啟
 public int updateWrapperUser(){
 User user = new User();
 user.setId(5l);
 user.setName("update");
 user.setAge(100);
 user.setEmail("update@email.com");

 User updateWrapperUser = new User();
 updateWrapperUser.setId(1l);

 /**
  * 修改 UpdateWrapper
  * 查詢(xún) QueryWrapper
  */
 Wrapper<User> wrapper = new UpdateWrapper<>(updateWrapperUser);
 return userMapper.update(user,wrapper);
 }

•Mapper接口綁定Mapper文件

◦properites中配置既可

#掃描mybatis/mapper下面的所有xml
mybatis-plus.mapperLocations=classpath:/mybatis/mapper/*.xml

•UserMapper接口測(cè)試

public interface UserMapper extends BaseMapper<User> {
 Map<String,Object> queryUser(@Param("USER_ID") String userId);
}

UserMapper.xml,如下:

<select id="queryUser" resultType="java.util.HashMap" parameterType="java.lang.String">
  SELECT
   ID,
   NAME
  FROM
   USER
  WHERE ID = #{USER_ID}
</select>

執(zhí)行SQL:

public Map<String,Object> myMapper(){
  return userMapper.queryUser("2");
}

在SpringBoot中使用MybatisPlus分頁(yè)需要注入Bean,并且在啟動(dòng)類(lèi)上使用@MapperScan

("com.simple.spring.boot.mapper")掃描mapper文件路徑如下:

@SpringBootApplication
@MapperScan("com.simple.spring.boot.mapper")
public class MybatisPlusApplication {

 /**
  * 分頁(yè)插件注冊(cè)
  * @return
  */
 @Bean
 public PaginationInterceptor paginationInterceptor() {
  return new PaginationInterceptor();
 }

 public static void main(String[] args) {
  SpringApplication.run(MybatisPlusApplication.class, args);
 }
}

使用MyBatisPlus可以為我們減少很多很多的代碼,不過(guò)需要編寫(xiě)實(shí)體類(lèi),有失必有得。

配置動(dòng)態(tài)數(shù)據(jù)源

dynamic-datasource-spring-boot-starter 是一個(gè)基于springboot的快速集成多數(shù)據(jù)源的啟動(dòng)器。

優(yōu)勢(shì)

網(wǎng)上關(guān)于動(dòng)態(tài)數(shù)據(jù)源的切換的文檔有很多,核心只有兩種。
1.構(gòu)建多套環(huán)境,優(yōu)勢(shì)是方便控制也容易集成一些簡(jiǎn)單的分布式事務(wù),缺點(diǎn)是非動(dòng)態(tài)同時(shí)代碼量較多,配置難度大。
2.基于spring提供原生的 AbstractRoutingDataSource ,參考一些文檔自己實(shí)現(xiàn)切換。

如果你的數(shù)據(jù)源較少,場(chǎng)景不復(fù)雜,選擇以上任意一種都可以。如果你需要更多特性,請(qǐng)嘗試本動(dòng)態(tài)數(shù)據(jù)源。
1.數(shù)據(jù)源分組,適用于多種場(chǎng)景 純粹多庫(kù) 讀寫(xiě)分離 一主多從 混合模式。
2.簡(jiǎn)單集成Druid數(shù)據(jù)源監(jiān)控多數(shù)據(jù)源,簡(jiǎn)單集成Mybatis-Plus簡(jiǎn)化單表,簡(jiǎn)單集成P6sy格式化sql,簡(jiǎn)單集成Jndi數(shù)據(jù)源。
3.簡(jiǎn)化Druid和HikariCp配置,提供全局參數(shù)配置。
4.提供自定義數(shù)據(jù)源來(lái)源(默認(rèn)使用yml或properties配置)。
5.項(xiàng)目啟動(dòng)后能動(dòng)態(tài)增減數(shù)據(jù)源。
6.使用spel動(dòng)態(tài)參數(shù)解析數(shù)據(jù)源,如從session,header和參數(shù)中獲取數(shù)據(jù)源。(多租戶(hù)架構(gòu)神器)
7.多層數(shù)據(jù)源嵌套切換。(一個(gè)業(yè)務(wù)ServiceA調(diào)用ServiceB,ServiceB調(diào)用ServiceC,每個(gè)Service都是不同的數(shù)據(jù)源)
8.使用正則匹配或spel表達(dá)式來(lái)切換數(shù)據(jù)源(實(shí)驗(yàn)性功能)。

劣勢(shì)

不能使用多數(shù)據(jù)源事務(wù)(同一個(gè)數(shù)據(jù)源下能使用事務(wù)),網(wǎng)上其他方案也都不能提供。

如果你需要使用到分布式事務(wù),那么你的架構(gòu)應(yīng)該到了微服務(wù)化的時(shí)候了。

如果呼聲強(qiáng)烈,項(xiàng)目達(dá)到800 star,作者考慮集成分布式事務(wù)。

PS: 如果您只是幾個(gè)數(shù)據(jù)庫(kù)但是有強(qiáng)烈的需求分布式事務(wù),建議還是使用傳統(tǒng)方式自己構(gòu)建多套環(huán)境集成atomic這類(lèi),網(wǎng)上百度很多。

約定

1.本框架只做 切換數(shù)據(jù)源 這件核心的事情,并不限制你的具體操作,切換了數(shù)據(jù)源可以做任何CRUD。
2.配置文件所有以下劃線(xiàn) _ 分割的數(shù)據(jù)源 首部 即為組的名稱(chēng),相同組名稱(chēng)的數(shù)據(jù)源會(huì)放在一個(gè)組下。
3.切換數(shù)據(jù)源即可是組名,也可是具體數(shù)據(jù)源名稱(chēng),切換時(shí)默認(rèn)采用負(fù)載均衡機(jī)制切換。
4.默認(rèn)的數(shù)據(jù)源名稱(chēng)為 master ,你可以通過(guò)spring.datasource.dynamic.primary修改。
5.方法上的注解優(yōu)先于類(lèi)上注解。

建議

強(qiáng)烈建議在 主從模式 下遵循普遍的規(guī)則,以便他人能更輕易理解你的代碼。

主數(shù)據(jù)庫(kù) 建議 只執(zhí)行 INSERT UPDATE DELETE 操作。

從數(shù)據(jù)庫(kù) 建議 只執(zhí)行 SELECT 操作。

快速開(kāi)始

加入依賴(lài):

<!-- 動(dòng)態(tài)數(shù)據(jù)源 -->
<dependency>
   <groupId>com.baomidou</groupId>
   <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
   <version>2.5.4</version>
</dependency>

注釋掉原來(lái)的數(shù)據(jù)庫(kù)配置,加入:

#設(shè)置默認(rèn)的數(shù)據(jù)源或者數(shù)據(jù)源組,默認(rèn)值即為master
spring.datasource.dynamic.primary=master
#主庫(kù)配置
spring.datasource.dynamic.datasource.master.username=root
spring.datasource.dynamic.datasource.master.password=root
spring.datasource.dynamic.datasource.master.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.dynamic.datasource.master.url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&characterEncoding=utf8
#從庫(kù)配置
spring.datasource.dynamic.datasource.slave_1.username=root
spring.datasource.dynamic.datasource.slave_1.password=root
spring.datasource.dynamic.datasource.slave_1.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.dynamic.datasource.slave_1.url=jdbc:mysql://localhost:3307/mybatis?useSSL=false&characterEncoding=utf8

使用 @DS 切換數(shù)據(jù)源。

 @DS("master")
 public List<User> getListQuery(){
  User user = new User();
  user.setName("SimpleWu");
  Wrapper<User> wrapper = new QueryWrapper<>(user);
  return userMapper.selectList(wrapper);
 }

 @DS("slave_1")
 public IPage<User> page(){
  int currentPage = 1 ; //當(dāng)前頁(yè)
  int pageSize = 2 ;//每頁(yè)大小
  IPage<User> page = new Page(currentPage,pageSize);
  page = userMapper.selectPage(page,null);
  return page;
 }

@DS 可以注解在方法上和類(lèi)上,同時(shí)存在方法注解優(yōu)先于類(lèi)上注解。

注解在service實(shí)現(xiàn)或mapper接口方法上,但強(qiáng)烈不建議同時(shí)在service和mapper注解。 (可能會(huì)有問(wèn)題)

如果不加入主鍵則使用默認(rèn)數(shù)據(jù)源。

DruidDataSourceAutoConfigure會(huì)注入一個(gè)DataSourceWrapper,其會(huì)在原生的spring.datasource下找url,username,password等。而我們動(dòng)態(tài)數(shù)據(jù)源的配置路徑是變化的,所以需要排除:

spring:
 autoconfigure:
 exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure

或者在類(lèi)上排除:

@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)

然后更換properties配置信息:

#公共配置 Druid登錄賬號(hào) 密碼
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=123456
spring.datasource.dynamic.druid.initial-size=5
spring.datasource.dynamic.druid.min-idle=5
spring.datasource.dynamic.druid.maxActive=20
spring.datasource.dynamic.druid.maxWait=60000
spring.datasource.dynamic.druid.timeBetweenEvictionRunsMillis=60000
spring.datasource.dynamic.druid.minEvictableIdleTimeMillis=300000
spring.datasource.dynamic.druid.validationQuery=SELECT 1 FROM DUAL
spring.datasource.dynamic.druid.testWhileIdle=true
spring.datasource.dynamic.druid.testOnBorrow=false
spring.datasource.dynamic.druid.testOnReturn=false
spring.datasource.dynamic.druid.poolPreparedStatements=true
spring.datasource.dynamic.druid.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.dynamic.druid.filters=stat,slf4j
spring.datasource.dynamic.druid.connectionProperties=druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
spring.datasource.dynamic.druid.web-stat-filter.enabled=true
spring.datasource.dynamic.druid.web-stat-filter.url-pattern=/*
spring.datasource.dynamic.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*
spring.datasource.dynamic.druid.stat-view-servlet.url-pattern=/druid/*
spring.datasource.dynamic.druid.stat-view-servlet.allow=127.0.0.1,192.168.163.1
spring.datasource.dynamic.druid.stat-view-servlet.deny=192.168.1.73
spring.datasource.dynamic.druid.stat-view-servlet.reset-enable=false

本篇代碼案例地址:

https://github.com/450255266/open-doubi

總結(jié)

以上所述是小編給大家介紹的SpringBoot整合MyBatisPlus配置動(dòng)態(tài)數(shù)據(jù)源的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)創(chuàng)新互聯(lián)網(wǎng)站的支持!

網(wǎng)站標(biāo)題:SpringBoot整合MyBatisPlus配置動(dòng)態(tài)數(shù)據(jù)源的方法
網(wǎng)頁(yè)路徑:http://chinadenli.net/article42/giscec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站移動(dòng)網(wǎng)站建設(shè)、ChatGPT網(wǎng)站營(yíng)銷(xiāo)、電子商務(wù)軟件開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)