最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot快速接入金倉數(shù)據(jù)庫的完整步驟

 更新時間:2026年04月23日 08:26:26   作者:碼農(nóng)阿豪@新空間  
文章主要講述了如何將SpringBoot+MySQL項目切換到國產(chǎn)數(shù)據(jù)庫金倉的過程,包括準備工作、項目搭建、代碼實現(xiàn)、測試驗證等步驟,并提供了常見問題與解決方案,需要的朋友可以參考下

一個真實的故事

去年接手一個項目,團隊用Spring Boot + MySQL開發(fā)了一套內(nèi)部管理系統(tǒng),眼看要上線了,客戶突然提出要換成國產(chǎn)數(shù)據(jù)庫。

開發(fā)負責人當場就懵了:“代碼要不要大改?驅(qū)動支不支持?事務(wù)會不會出問題?”

我當時正好在做金倉數(shù)據(jù)庫的技術(shù)調(diào)研,就主動接了這個任務(wù)。結(jié)果從修改配置到跑通測試,前后不到一個小時。今天就把這次實戰(zhàn)經(jīng)驗整理出來,給遇到同樣需求的團隊做個參考。

一、準備工作:連接信息從哪里拿

在開始寫代碼之前,先要拿到金倉數(shù)據(jù)庫的連接信息。如果你不是DBA,可以找運維或DBA要以下信息:

# 典型連接命令示例
./ksql -U system -d test -h 192.168.1.100 -p 54321

參數(shù)說明:

  • -U system:用戶名,管理員默認是system
  • -d test:要連接的數(shù)據(jù)庫名
  • -h 192.168.1.100:數(shù)據(jù)庫服務(wù)器IP
  • -p 54321:端口號,默認是54321

拿到這些信息后,整理成JDBC URL格式:

jdbc:kingbase8://host:port/database

比如:

jdbc:kingbase8://192.168.1.100:54321/test

二、項目搭建:從零開始

2.1 創(chuàng)建Spring Boot項目

用IDEA新建Spring Boot項目,或者用Spring Initializr生成。我習慣用IDEA直接創(chuàng)建,方便管理。

項目結(jié)構(gòu)如下:

java-kingbase-springboot/
├── pom.xml
├── src/
│   ├── main/
│   │   ├── java/com/kingbase/testspringboot/
│   │   │   ├── TestSpringbootApplication.java
│   │   │   ├── dao/
│   │   │   │   ├── UserDao.java
│   │   │   │   └── impl/UserDaoImpl.java
│   │   │   └── entity/User.java
│   │   └── resources/application.properties
│   └── test/java/com/kingbase/testspringboot/
│       └── TestSpringbootApplicationTests.java
└── target/

2.2 配置pom.xml:依賴是重點

pom.xml中最關(guān)鍵的是金倉數(shù)據(jù)庫驅(qū)動的依賴:

<dependency>
    <groupId>cn.com.kingbase</groupId>
    <artifactId>kingbase8</artifactId>
    <version>9.0.0</version>
</dependency>

完整的pom.xml如下:

<?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.7.11</version>
        <relativePath/>
    </parent>
    <groupId>com.kingbase</groupId>
    <artifactId>java-kingbase-springboot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>java-kingbase-springboot</name>
    <description>Spring Boot連接金倉數(shù)據(jù)庫示例</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <!-- Spring Boot核心依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!-- Spring Boot JDBC支持 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!-- 金倉數(shù)據(jù)庫驅(qū)動,最關(guān)鍵的一步 -->
        <dependency>
            <groupId>cn.com.kingbase</groupId>
            <artifactId>kingbase8</artifactId>
            <version>9.0.0</version>
        </dependency>
        <!-- 測試依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

踩坑提醒:金倉驅(qū)動groupId是cn.com.kingbase,不是com.kingbase8,寫錯了會拉不到依賴。

2.3 配置文件application.properties

src/main/resources/application.properties中配置數(shù)據(jù)源:

# 金倉數(shù)據(jù)庫驅(qū)動
spring.datasource.driverClassName=com.kingbase8.Driver
# 連接URL:jdbc:kingbase8://IP:端口/數(shù)據(jù)庫名
spring.datasource.url=jdbc:kingbase8://localhost:54321/test
# 用戶名和密碼
spring.datasource.username=system
spring.datasource.password=你的密碼

三、代碼實現(xiàn):三層結(jié)構(gòu)

3.1 實體類:User.java

package com.kingbase.testspringboot.entity;
public class User {
    private Long id;
    private String name;
    // 無參構(gòu)造方法(必須)
    public User() {
    }
    // 帶參構(gòu)造方法
    public User(Long id, String name) {
        this.id = id;
        this.name = name;
    }
    // getter和setter
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "User{id=" + id + ", name='" + name + "'}";
    }
}

3.2 DAO接口:UserDao.java

package com.kingbase.testspringboot.dao;
import com.kingbase.testspringboot.entity.User;
import java.util.List;
public interface UserDao {
    // 插入用戶
    boolean insertUser(User user);
    // 根據(jù)ID刪除
    boolean deleteById(Long id);
    // 更新用戶
    boolean updateUser(User user);
    // 根據(jù)ID查詢
    User selectUserById(Long id);
    // 查詢所有用戶
    List<User> selectAllUsers();
}

3.3 DAO實現(xiàn):UserDaoImpl.java

package com.kingbase.testspringboot.dao.impl;

import com.kingbase.testspringboot.dao.UserDao;
import com.kingbase.testspringboot.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;

@Repository("userDao")
public class UserDaoImpl implements UserDao {
    
    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    @Override
    public boolean insertUser(User user) {
        String sql = "insert into test_springboot(id, name) values(?, ?)";
        Object[] params = {user.getId(), user.getName()};
        return jdbcTemplate.update(sql, params) > 0;
    }
    
    @Override
    public boolean deleteById(Long id) {
        String sql = "delete from test_springboot where id = ?";
        Object[] params = {id};
        return jdbcTemplate.update(sql, params) > 0;
    }
    
    @Override
    public boolean updateUser(User user) {
        String sql = "update test_springboot set name = ? where id = ?";
        Object[] params = {user.getName(), user.getId()};
        return jdbcTemplate.update(sql, params) > 0;
    }
    
    @Override
    public User selectUserById(Long id) {
        String sql = "select * from test_springboot where id = ?";
        Object[] params = {id};
        return jdbcTemplate.queryForObject(
            sql, 
            params, 
            new BeanPropertyRowMapper<>(User.class)
        );
    }
    
    @Override
    public List<User> selectAllUsers() {
        String sql = "select * from test_springboot";
        return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
    }
}

注意點BeanPropertyRowMapper要求數(shù)據(jù)庫字段名和Java屬性名保持一致,或者用下劃線轉(zhuǎn)駝峰的映射規(guī)則。這里表字段是idname,和User類的屬性名一致,所以能自動映射。

3.4 啟動類:TestSpringbootApplication.java

package com.kingbase.testspringboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

四、測試驗證:跑通整個流程

4.1 測試類:TestSpringbootApplicationTests.java

package com.kingbase.testspringboot;

import com.kingbase.testspringboot.dao.UserDao;
import com.kingbase.testspringboot.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.List;

@SpringBootTest
public class TestSpringbootApplicationTests {
    
    @Autowired
    private UserDao userDao;
    
    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    @Test
    public void contextLoads() {
        // 1. 刪除舊表(如果存在)
        try {
            jdbcTemplate.execute("drop table test_springboot");
            System.out.println("test_springboot delete successfully!");
        } catch (Exception ignore) {
            // 表不存在時忽略異常
        }
        
        // 2. 創(chuàng)建新表
        jdbcTemplate.execute("create table test_springboot (" +
            "id int primary key, " +
            "name varchar(50))");
        System.out.println("test_springboot create successfully!");
        
        // 3. 插入10條數(shù)據(jù)
        for (int i = 1; i <= 10; i++) {
            userDao.insertUser(new User((long) i, "insert" + i));
        }
        
        // 4. 刪除id=1的數(shù)據(jù)
        userDao.deleteById(1L);
        
        // 5. 更新id=2的數(shù)據(jù)
        userDao.updateUser(new User(2L, "update"));
        
        // 6. 查詢id=2的數(shù)據(jù)
        User user = userDao.selectUserById(2L);
        System.out.println("user = " + user);
        
        // 7. 查詢所有數(shù)據(jù)
        List<User> userList = userDao.selectAllUsers();
        userList.forEach(System.out::println);
    }
}

4.2 運行結(jié)果

test_springboot delete successfully!
test_springboot create successfully!
user = User{id=2, name='update'}
User{id=2, name='update'}
User{id=3, name='insert3'}
User{id=4, name='insert4'}
User{id=5, name='insert5'}
User{id=6, name='insert6'}
User{id=7, name='insert7'}
User{id=8, name='insert8'}
User{id=9, name='insert9'}
User{id=10, name='insert10'}

從輸出可以看到:

  • 建表、刪表成功
  • 插入10條數(shù)據(jù)成功
  • 刪除id=1成功
  • 更新id=2成功
  • 查詢結(jié)果正確

五、常見問題與解決方案

5.1 驅(qū)動類找不到

報錯java.lang.ClassNotFoundException: com.kingbase8.Driver

原因:pom.xml中沒有正確引入金倉驅(qū)動,或者scope設(shè)置不當

解決:檢查pom.xml中是否有kingbase8依賴,確保沒有設(shè)置scope=test

5.2 連接被拒絕

報錯Connection refused

原因:IP、端口、數(shù)據(jù)庫名填錯了,或者金倉服務(wù)沒啟動

解決

  1. 先用ksql命令行測試能否連接
  2. 檢查防火墻是否開放了端口
  3. 確認數(shù)據(jù)庫名是否正確(區(qū)分大小寫)

5.3 表名或字段名大小寫問題

金倉默認是大小寫不敏感的,但如果建表時用了雙引號,就會變成大小寫敏感。建議統(tǒng)一用小寫,避免麻煩。

-- 推薦寫法
CREATE TABLE test_springboot (id INT, name VARCHAR(50));
-- 避免這種寫法,會帶來困擾
CREATE TABLE "Test_SpringBoot" ("Id" INT, "Name" VARCHAR(50));

六、生產(chǎn)環(huán)境建議

示例代碼跑通后,在實際項目中還需要注意幾點:

1. 使用連接池

Spring Boot默認使用HikariCP,配置如下:

spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.connection-timeout=30000

2. 密碼不要硬編碼

# 使用環(huán)境變量
spring.datasource.password=${KINGBASE_PASSWORD}
# 或使用配置中心

3. 事務(wù)管理

在Service層使用@Transactional注解:

@Service
public class UserService {
    @Autowired
    private UserDao userDao;
    @Transactional
    public void updateUserWithLog(User user, String log) {
        userDao.updateUser(user);
        // 記錄日志等其他操作
    }
}

寫在最后

從MySQL切換到金倉,Spring Boot項目需要改動的其實就兩處:pom.xml加驅(qū)動、application.properties改URL。如果代碼里沒有用數(shù)據(jù)庫特有的方言,基本能做到零修改遷移。

這次實戰(zhàn)經(jīng)歷也讓我對金倉的JDBC驅(qū)動有了更多信心——兼容性不錯,性能也穩(wěn)定。如果你的團隊正在做技術(shù)選型或國產(chǎn)化改造,不妨動手試試。

以上就是SpringBoot快速接入金倉數(shù)據(jù)庫的完整步驟的詳細內(nèi)容,更多關(guān)于SpringBoot接入金倉數(shù)據(jù)庫的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解Java編程JDialog窗體的用法及實例

    詳解Java編程JDialog窗體的用法及實例

    這篇文章主要介紹了Java編程中JDialog窗體的用法及實例,描述了其特征,具有一定參考價值,需要的朋友可以了解下。
    2017-09-09
  • java中循環(huán)刪除list中元素的方法總結(jié)

    java中循環(huán)刪除list中元素的方法總結(jié)

    下面小編就為大家?guī)硪黄猨ava中循環(huán)刪除list中元素的方法總結(jié)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • SpringMVC ModelAndView的用法使用詳解

    SpringMVC ModelAndView的用法使用詳解

    這篇文章主要介紹了SpringMVC ModelAndView的用法使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2019-12-12
  • Java使用easyExcel實現(xiàn)Excel文件解析

    Java使用easyExcel實現(xiàn)Excel文件解析

    這篇文章主要為大家詳細介紹了Java如何使用easyExcel實現(xiàn)Excel文件解析,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習一下
    2025-02-02
  • 如何使用Collections.reverse對list集合進行降序排序

    如何使用Collections.reverse對list集合進行降序排序

    這篇文章主要介紹了Java使用Collections.reverse對list集合進行降序排序,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Spring?Boot中的JdbcClient與JdbcTemplate使用對比分析

    Spring?Boot中的JdbcClient與JdbcTemplate使用對比分析

    這篇文章主要介紹了Spring Boot中的JdbcClient與JdbcTemplate使用對比分析,一起看看Spring Boot 中 JdbcClient 和 JdbcTemplate 之間的差異
    2024-01-01
  • Java實現(xiàn)高校教務(wù)系統(tǒng)

    Java實現(xiàn)高校教務(wù)系統(tǒng)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)高校教務(wù)系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 使用Java快速將Web中表格轉(zhuǎn)換成Excel的方法

    使用Java快速將Web中表格轉(zhuǎn)換成Excel的方法

    在平時做系統(tǒng)項目時,經(jīng)常會需要做導(dǎo)出功能,下面這篇文章主要給大家介紹了關(guān)于使用Java快速將Web中表格轉(zhuǎn)換成Excel的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • Java開發(fā)實現(xiàn)飛機大戰(zhàn)

    Java開發(fā)實現(xiàn)飛機大戰(zhàn)

    這篇文章主要為大家詳細介紹了Java開發(fā)實現(xiàn)飛機大戰(zhàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • mybatis 插件: 打印 sql 及其執(zhí)行時間實現(xiàn)方法

    mybatis 插件: 打印 sql 及其執(zhí)行時間實現(xiàn)方法

    下面小編就為大家?guī)硪黄猰ybatis 插件: 打印 sql 及其執(zhí)行時間實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06

最新評論

青冈县| 桃园市| 九台市| 津南区| 千阳县| 临高县| 株洲县| 万宁市| 仪征市| 综艺| 桃园县| 濮阳市| 张家口市| 镶黄旗| 渑池县| 望奎县| 沛县| 高要市| 双鸭山市| 新蔡县| 宝山区| 孝昌县| 宁国市| 怀化市| 永州市| 九龙城区| 门头沟区| 黔西| 读书| 米泉市| 犍为县| 孝感市| 新疆| 临夏市| 琼结县| 苍溪县| 江永县| 双流县| 海丰县| 台北县| 扎鲁特旗|