最近做一个项目,因为国产化的需要,甲方要求使用人大金仓数据库。赶紧查了下MyBatisPlus可以适配,就打算搭建一套简单Springboot+MyBatisPlus+人大金仓数据库的环境,用来进行一些简单的验证。
Eclipse Oxygen
JAVA1.8
Springboot2.6.2
MyBatis3.5.2
人大金仓数据库kingbase8.6.0
这里就直接略过下载、安装和配置,除了金仓数据库相对陌生,其他的几个java开发者应该都非常熟悉了。金仓数据库安装也不难,官网下载安装包,如果是个人开发者的话,下载开发版授权文件,安装时选择授权文件。个人开发版的限制还是比较多,限制最大连接数是10,我用数据库管理工具连接,再用数据库迁移工具连的时候就报连接数超了。
我们要在金仓数据库中创建database,并且创建表,插入测试数据。
首先直接创建数据库
然后创建表,执行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]');
使用Eclipse新建maven项目。
pom文件配置如下:
4.0.0
com.sadoshi
kingbase
0.0.1-SNAPSHOT
war
org.springframework.boot
spring-boot-starter-parent
2.6.2
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter
com.baomidou
mybatis-plus-boot-starter
3.5.2
com.alibaba
druid-spring-boot-starter
1.1.10
org.projectlombok
lombok
1.18.20
com.kingbase8
kingbase8
8.6.0
org.springframework.boot
spring-boot-maven-plugin
上面这里会报个错,因为maven中央仓库是没有kingbase8的8.6.0版本,后面我们需要做一个到本地maven仓库里面。
在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替换成了金仓数据库的驱动。
在金仓数据库安装目录下找到kingbase8-8.6.0.jar。我们要把他安装到本地maven中,这样pom文件那里就不会报错
在命令行执行命令:
mvn install:install-file -DgroupId=com.kingbase8 -DartifactId=kingbase8 -Dversion=8.6.0 -Dpackaging=jar -Dfile=(kingbase的jar包路径)\kingbase8-8.6.0.jar
PS:有时候会报“The goal you specified requires a project to execute but there is no POM in this directory”的错误。试着把所有参数都加上双引号:
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 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{
}
启动App类,浏览器访问http://localhost:9999/getStudent。因为我前面application.yml设置Server端口是9999,所以访问端口是这个。
然后查看控制台:
成功打印学生信息。证明MyBatisPlus对接金仓数据库验证完成。
金仓数据库有些语法与mysql不同,比如说这个users的建表语句,我是通过数据库工具建表后生成的ddl,和MyBatisPlus官网例子mysql的建表语句还是有些差别。如果想使用一些成熟的框架作为底座,又被要求使用金仓数据库,可以先用mysql建好数据库,再通过金仓数据库的数据库迁移工具迁过去。比如我使用jeecg这个框架,就是先在mysql建好表,然后通过工具迁移过去。直接改建表sql太麻烦了,而且和mysql语法出入又多。