【分享】测试JFinal对接国产达梦数据库-完成CRUD

上一节:【分享】测试JFinal对接国产达梦数据库-安装达梦

本节我们主要来使用JFinal去完成达梦数据库的CRUD操作。

我们Java应用项目如果要使用数据库服务,需要使用JDBC标准去连接和使用。

Mysql Oracle等国外产品都有对应的JDBC驱动实现。

国产达梦数据库也有自己的JDBC实现,但是没有再maven仓库提交,安装后在安装目录下能找到各种语言的实现。

找到安装目录下的drivers目录

image.png

里面就有我们需要的JDBC的实现。

image.png

我们用的就是这个DmJdbcDriver18.jar

image.png

上面还有一个方言dialect的实现包。

里面看了一下都是Hibernate相关的方言,暂且不理会。


下面开始JFinal的集成。

我没有创建Java Web工程,创建的是一个普通java工程。

image.png

image.png

需要的依赖Jar就这么几个:

image.png


写一个DmTest.java去测试

package com.jfinalxueyuan.test;

import java.util.List;

import com.jfinal.kit.JsonKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.CaseInsensitiveContainerFactory;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
import com.jfinal.plugin.activerecord.dialect.AnsiSqlDialect;
import com.jfinal.plugin.druid.DruidPlugin;
/**
 * JFinal对接达梦数据库初步测试CRUD
 * 使用Db+Record模式
 * 
 * @ClassName:  DmTest   
 * @author: JFinal学院-小木 QQ:909854136 
 * @date:   2020年9月13日   
 * 
 */
public class DmTest {
	String url = "jdbc:dm://localhost:5236";
	String username = "SYSDBA";
	String password = "xiaomu2020";
	DruidPlugin druidPlugin=null;
	ActiveRecordPlugin arp=null;
	
	public boolean start() {
		druidPlugin=new DruidPlugin(url, username, password);
		arp=new ActiveRecordPlugin(druidPlugin);
		arp.setDialect(new AnsiSqlDialect());
		arp.setShowSql(true);
		arp.setDevMode(true);
		arp.setContainerFactory(new CaseInsensitiveContainerFactory(true));
		boolean success=druidPlugin.start();
		if(success) {
			success=arp.start();
		}
		return success;
	}
	
	
	public static void main(String[] args) {
			DmTest test = new DmTest();
			//启动连接
			boolean success=test.start();
			if(success) {
				try {
					// 插入数据
					System.out.println("--- 插入 ---");
					test.insertTable();
					
					//查询
					System.out.println("--- 显示插入结果 ---");
					test.queryTable();
					
					//修改
					System.out.println("--- 修改 ---");
					test.updateTable();
					
					//查询
					System.out.println("--- 显示修改结果 ---");
					test.queryTable();
					 
					//删除
					System.out.println("--- 删除 ---");
					test.deleteTable();
					
					//在删除后查询
					System.out.println("--- 在删除后查询 ---");
					test.queryTable();
					
				} finally {
					test.stop();
				}
			}
			
	}

	
	/**
	 * 结束
	 */
	private void stop() {
		arp.stop();
		druidPlugin.stop();
		
	}

	/**
	 * 删除数据
	 */
	private void deleteTable() {
		System.out.println("=====DOING:执行数据删除=====");
		int count=Db.update("delete from DMHR.CITY where CITY_ID='DY'");
		if(count==1) {
			System.out.println("=====SUCCESS:数据删除成功=====");
		}else {
			System.out.println("=====ERROR:数据删除失败=====");
		}
	}


	/**
	 * 修改更新数据
	 */
	private void updateTable() {
		System.out.println("=====DOING:执行数据更新=====");
		int count=Db.update("update DMHR.CITY set CITY_NAME='东营_修改后' where CITY_ID='DY'");
		if(count==1) {
			System.out.println("=====SUCCESS:数据修改成功=====");
		}else {
			System.out.println("=====ERROR:数据修改失败=====");
		}
	}


	/**
	 * 查询数据
	 */
	private void queryTable() {
		System.out.println("=====DOING:执行数据查询=====");
		List<Record> records=Db.find("select * from DMHR.CITY");
		if(records!=null&&records.size()>0) {
			System.out.println("=====SUCCESS:数据查询成功=====");
			int index=0;
			for(Record record:records) {
				index++;
				System.out.println(index+":"+JsonKit.toJson(record));
			}
		}else {
			System.out.println("=====RESULT:暂无数据=====");
		}
	}



	/**
	 * 插入数据
	 */
	private void insertTable() {
		System.out.println("=====DOING:执行数据插入=====");
		Record record=new Record();
		record.set("CITY_ID", "DY");
		record.set("CITY_NAME", "东营");
		record.set("REGION_ID", 1);
		boolean success=Db.save("DMHR.CITY", record);
		if(success) {
			System.out.println("=====SUCCESS:数据插入成功=====");
			System.out.println(record.toJson());
		}else {
			System.out.println("=====ERROR:数据插入失败=====");
		}
	}
	
	

 
}


使用JFinal去连接达梦数据库做了CRUD操作,其中配置的DruidPlugin和ActiveRecordPlugin目前来看和Mysql的数据库配置暂时没有特别差异,标准的JDBC实现。

那么,方言这里就单独设置了一下,大小写不敏感设置一下。

image.png

最后执行Main方法,测试一下CRUD:整个日志输出正常无误!!!

九月 13, 2020 1:47:59 下午 com.alibaba.druid.pool.DruidDataSource info
信息: {dataSource-1} inited
--- 插入 ---
=====DOING:执行数据插入=====
Sql: insert into DMHR.CITY(city_id, city_name, region_id) values(?, ?, ?)
=====SUCCESS:数据插入成功=====
{"city_id":"DY","city_name":"东营","id":15,"region_id":1}
--- 显示插入结果 ---
=====DOING:执行数据查询=====
Sql: select * from DMHR.CITY
=====SUCCESS:数据查询成功=====
1:{"city_id":"BJ ","city_name":"北京","region_id":1}
2:{"city_id":"SJZ","city_name":"石家庄","region_id":1}
3:{"city_id":"SH ","city_name":"上海","region_id":2}
4:{"city_id":"NJ ","city_name":"南京","region_id":2}
5:{"city_id":"GZ ","city_name":"广州","region_id":3}
6:{"city_id":"HK ","city_name":"海口","region_id":3}
7:{"city_id":"WH ","city_name":"武汉","region_id":4}
8:{"city_id":"CS ","city_name":"长沙","region_id":4}
9:{"city_id":"SY ","city_name":"沈阳","region_id":5}
10:{"city_id":"XA ","city_name":"西安","region_id":6}
11:{"city_id":"CD ","city_name":"成都","region_id":7}
12:{"city_id":"DY ","city_name":"东营","region_id":1}
--- 修改 ---
=====DOING:执行数据更新=====
Sql: update DMHR.CITY set CITY_NAME='东营_修改后' where CITY_ID='DY'
=====SUCCESS:数据修改成功=====
--- 显示修改结果 ---
=====DOING:执行数据查询=====
Sql: select * from DMHR.CITY
=====SUCCESS:数据查询成功=====
1:{"city_id":"BJ ","city_name":"北京","region_id":1}
2:{"city_id":"SJZ","city_name":"石家庄","region_id":1}
3:{"city_id":"SH ","city_name":"上海","region_id":2}
4:{"city_id":"NJ ","city_name":"南京","region_id":2}
5:{"city_id":"GZ ","city_name":"广州","region_id":3}
6:{"city_id":"HK ","city_name":"海口","region_id":3}
7:{"city_id":"WH ","city_name":"武汉","region_id":4}
8:{"city_id":"CS ","city_name":"长沙","region_id":4}
9:{"city_id":"SY ","city_name":"沈阳","region_id":5}
10:{"city_id":"XA ","city_name":"西安","region_id":6}
11:{"city_id":"CD ","city_name":"成都","region_id":7}
12:{"city_id":"DY ","city_name":"东营_修改后","region_id":1}
--- 删除 ---
=====DOING:执行数据删除=====
Sql: delete from DMHR.CITY where CITY_ID='DY'
=====SUCCESS:数据删除成功=====
--- 在删除后查询 ---
=====DOING:执行数据查询=====
Sql: select * from DMHR.CITY
=====SUCCESS:数据查询成功=====
1:{"city_id":"BJ ","city_name":"北京","region_id":1}
2:{"city_id":"SJZ","city_name":"石家庄","region_id":1}
3:{"city_id":"SH ","city_name":"上海","region_id":2}
4:{"city_id":"NJ ","city_name":"南京","region_id":2}
5:{"city_id":"GZ ","city_name":"广州","region_id":3}
6:{"city_id":"HK ","city_name":"海口","region_id":3}
7:{"city_id":"WH ","city_name":"武汉","region_id":4}
8:{"city_id":"CS ","city_name":"长沙","region_id":4}
9:{"city_id":"SY ","city_name":"沈阳","region_id":5}
10:{"city_id":"XA ","city_name":"西安","region_id":6}
11:{"city_id":"CD ","city_name":"成都","region_id":7}
九月 13, 2020 1:47:59 下午 com.alibaba.druid.pool.DruidDataSource info
信息: {dataSource-1} closing ...
九月 13, 2020 1:47:59 下午 com.alibaba.druid.pool.DruidDataSource info
信息: {dataSource-1} closed


OK,JFinal也可以玩儿国产数据库了!!


有问题 加我微信:

mumengmeng


image.png


评论区

山东小木

2020-09-14 16:32

Druid支持达梦数据库

混世顽童

2020-09-15 11:25

@山东小木 用Oracle的方言会更好,model的save使用序列主键时,可以返回主键值

山东小木

2020-09-15 11:37

@混世顽童 可以自己定制方言也行

混世顽童

2020-09-15 17:53

@山东小木 jfinal里有些地方会判断数据库方言是否是Oracle(isOracle),自己定制的话也要返回是Oracle,还不如直接使用Oracle的方言。达梦官方宣传与Oracle兼容达到99%了,直接使用Oracle方言也没什么问题

山东小木

2020-09-15 20:49

@混世顽童 代码得做到无风险才行 需要jfinal底层支持 或者自行扩展啊

陈云

2020-09-17 11:15

@echo off

title AppStartYsyallXmj


set MAIN_CLASS=com.yusvn.AppStartYsyallXmj
set APP_BASE_PATH=%~dp0
set CP=%APP_BASE_PATH%config;%APP_BASE_PATH%lib\*
java -Xverify:none %JAVA_OPTS% -cp %CP% %MAIN_CLASS%


endlocal & popd
pause

你好 写了个bat运行报错 在eclipse运行正常,这是什么原因了
could not create the Java virtual Machine

A fatal exception has occurred.Program will exit.@山东小木