序文
私は最近、ローカリゼーションの必要性から、A 党が全国人民代表大会の金倉データベースの使用を要求したプロジェクトに取り組みました。MyBatisPlus が適応できることを早速確認したので、簡単な検証のために Springboot+MyBatisPlus+Renda Jincang データベース環境を構築する予定です。
環境
エクリプス・オキシン
JAVA1.8
スプリングブート2.6.2
MyBatis3.5.2
全国人民代表大会金倉データベース kingbase8.6.0
環境を構築する
ここでは、ダウンロード、インストール、構成については省略します。ただし、Jincang データベースは比較的馴染みがなく、他の何人かの Java 開発者はよく知っているはずです。Jincang データベースのインストールは難しくありません。公式 Web サイトからインストール パッケージをダウンロードします。個人開発者の場合は、開発版の認証ファイルをダウンロードし、インストール中に認証ファイルを選択します。個人開発版はまだ制限が多く、最大接続数は10ですが、データベース管理ツールを使って接続しているのですが、データベース移行ツールを使って接続すると接続数を超えてしまいます。
データベースの準備
Jincang データベースにデータベースを作成し、テーブルを作成し、テスト データを挿入したいと考えています。
まずデータベースを直接作成します
次に、テーブルを作成し、SQL ステートメントを実行して users テーブルを作成します。user キーワードが競合するため、テーブル名には users が使用されます。
CREATE TABLE "public".users (
id bigint AUTO_INCREMENT NOT NULL,
name varchar(30) NOT NULL,
age integer NOT NULL,
email varchar(50) NOT NULL
);
ALTER TABLE "public".users SET
TABLESPACE "sys_default";
COMMENT ON
COLUMN "public".users.id IS '主键';
COMMENT ON
COLUMN "public".users.name IS '姓名';
COMMENT ON
COLUMN "public".users.age IS '年龄';
COMMENT ON
COLUMN "public".users.email IS '邮箱';
ALTER TABLE "public".users ADD CONSTRAINT con_public_users_constraint_1 PRIMARY KEY (id) ENABLE VALIDATE;
データを挿入します:
INSERT INTO users (id, name, age, email) VALUES
(1, 'Jone', 18, '[email protected]'),
(2, 'Jack', 20, '[email protected]'),
(3, 'Tom', 28, '[email protected]'),
(4, 'Sandy', 21, '[email protected]'),
(5, 'Billie', 24, '[email protected]');
新しい Maven プロジェクトを作成する
Eclipse を使用して新しい Maven プロジェクトを作成します。
pom ファイルは次のように構成されます。
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sadoshi</groupId>
<artifactId>kingbase</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.2</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
<dependency>
<groupId>com.kingbase8</groupId>
<artifactId>kingbase8</artifactId>
<version>8.6.0</version>
</dependency>
</dependencies>
<!--插件 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Maven 中央ウェアハウスには kingbase8 のバージョン 8.6.0 がないため、後でローカル Maven ウェアハウスにバージョン 8.6.0 を作成する必要があるため、上記でエラーが報告されます。
application.ym 内のプロジェクトで、データベース接続などを含むいくつかの構成を実行します。
server:
port: 9999
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.kingbase8.Driver
url: jdbc:kingbase8://127.0.0.1:54321/mybatisplus_test
username: system
password: 12345678
druid:
stat-view-servlet:
enabled: false
driverClassName は Jincang データベースのドライバーに置き換えられることに注意してください。
kingbase8 jar をローカル Maven にインストールする
Jincang データベースのインストール ディレクトリで kingbase8-8.6.0.jar を見つけます。pom ファイルにエラーが発生しないように、ローカル Maven にインストールしたいと考えています。
コマンドラインでコマンドを実行します。
mvn install:install-file -DgroupId=com.kingbase8 -DartifactId=kingbase8 -Dversion=8.6.0 -Dpackaging=jar -Dfile=(kingbase的jar包路径)\kingbase8-8.6.0.jar
PS: 「指定した目標を実行するにはプロジェクトが必要ですが、このディレクトリに POM がありません」というエラーが報告される場合があります。すべての引数を二重引用符で囲んでみてください。
mvn install:install-file "-DgroupId=com.kingbase8" "-DartifactId=kingbase8" "-Dversion=8.6.0" "-Dpackaging=jar" "-Dfile=(kingbase的jar包路径)\kingbase8-8.6.0.jar"
コードを書く
前面准备工作都做好了,接下来要写业务代码。
创建主类App,加上@MapperScan注解扫描指定目录下的mapper:
package kingdb;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("kingdb.mapper")
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
创建一个测试用控制类HelloController,一会测试的时候访问“/getStudent”这个路径,看控制台能否打印出学生列表:
package kingdb.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import kingdb.entity.User;
import kingdb.mapper.UserMapper;
@RestController
public class HelloController {
@Autowired
private UserMapper userMapper;
@RequestMapping("/test")
public String test() {
return "test";
}
@RequestMapping("/getStudent")
public String getStudent() {
List<User> userList = userMapper.selectList(null);
userList.forEach(System.out::println);
return "getStudent";
}
}
创建实体类User,这里使用@TableName注解指定实体类对应的数据库表名:
package kingdb.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("users")
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
创建Mapper类:
package kingdb.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import kingdb.entity.User;
public interface UserMapper extends BaseMapper<User>{
}
测试
启动App类,浏览器访问http://localhost:9999/getStudent。因为我前面application.yml设置Server端口是9999,所以访问端口是这个。
然后查看控制台:
成功打印学生信息。证明MyBatisPlus对接金仓数据库验证完成。
小结
金仓数据库有些语法与mysql不同,比如说这个users的建表语句,我是通过数据库工具建表后生成的ddl,和MyBatisPlus官网例子mysql的建表语句还是有些差别。如果想使用一些成熟的框架作为底座,又被要求使用金仓数据库,可以先用mysql建好数据库,再通过金仓数据库的数据库迁移工具迁过去。比如我使用jeecg这个框架,就是先在mysql建好表,然后通过工具迁移过去。直接改建表sql太麻烦了,而且和mysql语法出入又多。