一、达梦数据库的安装和使用
1、达梦数据库下载
2、windows环境安装达梦数据库
二、mysql数据库 迁移至 达梦数据库
参考文章:mysql数据迁移至达梦数据库
在安装的tool目录下,查找相关的工具:
1、dm控制台工具:console
服务器配置又该有两种方式:①dm控制台工具修改;②配置文件修改。
方法一:服务器配置:设置系统兼容性(dm控制台工具),兼容mysql
方法二:(1)查找dm.ini文件
(2)dm.ini修改【#compatibility】的【compatible_mode】=4
(3)重启dameng服务
2、dm数据迁移工具:dts
在这里操作:mysql数据迁移至达梦数据库
注意:当迁移过程中出现下面问题时,如有触发器或者外键,需要先关掉触发器和外键,然后进行迁移,不然会导致迁移失败。
mysql的数据表转换成dm的数据表时,点击转换按钮。如下:
设置【1:迁移策略选项】
设置【2:列映射选项】
3、添加用户:如果导入的dm数据库需要和mysql的用户一样,添加root用户。
三、spring项目整合达梦数据库
1、配置java项目连接达梦,切换数据连接驱动
2、maven导入达梦数据库驱动包
3、表的实体类映射。【访问形式:模式名.表名】
4、xml文件:查询表【模式名.表名】
5、mysql字段类型与dm数据类型的转换。【dm:达梦数据库】
package com.company.common.core.annotation; /** * 数据库类型 * * @author kally * @date 2023/12/13 */ public enum dbtype { /** * 数据库类型(类型,描述) */ mysql("mysql", "mysql数据库"), mariadb("mariadb", "mariadb数据库"), oracle("oracle", "oracle11g及以下数据库(高版本推荐使用oracle_new)"), oracle_12c("oracle12c", "oracle12c+数据库"), db2("db2", "db2数据库"), h2("h2", "h2数据库"), hsql("hsql", "hsql数据库"), sqlite("sqlite", "sqlite数据库"), postgre_sql("postgresql", "postgre数据库"), sql_server2005("sqlserver2005", "sqlserver2005数据库"), sql_server("sqlserver", "sqlserver数据库"), dm("dm", "达梦数据库"), xu_gu("xugu", "虚谷数据库"), kingbase_es("kingbasees", "人大金仓数据库"), phoenix("phoenix", "phoenix hbase数据库"), gauss("zenith", "gauss 数据库"), click_house("clickhouse", "clickhouse 数据库"), gbase("gbase", "南大通用(华库)数据库"), gbase_8s("gbase-8s", "南大通用数据库 gbase 8s"), @deprecated gbasedbt("gbasedbt", "南大通用数据库"), @deprecated gbase_informix("gbase 8s", "南大通用数据库 gbase 8s"), sinodb("sinodb", "星瑞格数据库"), oscar("oscar", "神通数据库"), sybase("sybase", "sybase ase 数据库"), ocean_base("oceanbase", "oceanbase 数据库"), firebird("firebird", "firebird 数据库"), high_go("highgo", "瀚高数据库"), cubrid("cubrid", "cubrid数据库"), goldilocks("goldilocks", "goldilocks数据库"), csiidb("csiidb", "csiidb数据库"), sap_hana("hana", "sap_hana数据库"), impala("impala", "impala数据库"), vertica("vertica", "vertica数据库"), xcloud("xcloud", "行云数据库"), redshift("redshift", "亚马逊redshift数据库"), opengauss("opengauss", "华为 opengauss 数据库"), tdengine("tdengine", "tdengine数据库"), informix("informix", "informix数据库"), uxdb("uxdb", "优炫数据库"), lealone("lealone", "lealone数据库"), other("other", "其他数据库"); private final string db; private final string desc; public static dbtype getdbtype(string dbtype) { dbtype[] var1 = values(); int var2 = var1.length; for (int var3 = 0; var3 < var2; ++var3) { dbtype type = var1[var3]; if (type.db.equalsignorecase(dbtype)) { return type; } } return other; } public string getdb() { return this.db; } public string getdesc() { return this.desc; } /** * 数据库类型 * * @param db 数据库 * @param desc 描述 */ private dbtype(final string db, final string desc) { this.db = db; this.desc = desc; } }
6、达梦数据库分页插件
7、sql适配关键字列名
mysql使用反引号来区分列名和关键字;达梦数据库使用双引号来区分;实体类映射字段之前的修改。
mybatisplusconfig.java文件再加入下列代码,复制即可。
@bean public dmfieldcustomizer getdmfieldcustomizer() { return new dmfieldcustomizer(); } /** * 在mybatisplus加载进spring容器之前自定义某些配置 * * @author hetframe */ public static class dmfieldcustomizer implements mybatispluspropertiescustomizer { public dmfieldcustomizer() { log.info("加载dmfieldcustomizer..."); } @sneakythrows @override public void customize(mybatisplusproperties properties) { // 使用达梦数据库 if (arrays.tostring(properties.getmapperlocations()).contains("dm")) { log.info("使用达梦数据库"); //实体类的class list<class<?>> classlist = new arraylist<>(); pathmatchingresourcepatternresolver resolver = new pathmatchingresourcepatternresolver(); //找到所有实体类的class resource[] resources = resolver.getresources("classpath*:com/**/entity/**/*.class"); for (resource res : resources) { // 先获取resource的元信息,然后获取class元信息,最后得到 class 全路径 string clsname = new simplemetadatareaderfactory().getmetadatareader(res).getclassmetadata().getclassname(); // 通过名称加载 class<?> clazz = class.forname(clsname); classlist.add(clazz); } classlist.foreach(e -> { list<field> list = tableinfohelper.getallfields(e); list.foreach(field -> { tablefield tablefield = field.getannotation(tablefield.class); string metacolname; if (tablefield != null && stringutils.isnotblank(metacolname = tablefield.value()) && metacolname.contains("`")) { string newcolname = metacolname.replace("`", """); invocationhandler invocationhandler = proxy.getinvocationhandler(tablefield); try { field membervalues = invocationhandler.getclass().getdeclaredfield("membervalues"); membervalues.setaccessible(true); map membervaluesmap = (map) membervalues.get(invocationhandler); membervaluesmap.put("value", newcolname); log.info("将实体类映射字段{}修改为{}", metacolname, newcolname); } catch (nosuchfieldexception | illegalaccessexception exception) { throw new runtimeexception(exception); } } }); }); } else { log.info("使用mysql数据库"); } } } package com.company.common.framework.mybatis; import com.baomidou.mybatisplus.autoconfigure.mybatisplusproperties; /** * mybatispluspropertiescustomizer 用于在读取 properties 之后进行一些自定义操作 * * @author kally * @date 2023/12/13 */ public interface mybatispluspropertiescustomizer { /** * mysql中我们使用反引号来区分列名和关键字;但在达梦数据库中,使用双引号来区分。 * 而如果创建实体类在注解 @tablefield 中使用了反引号例如 @tablefield(`range`), * 这种我们改了的话,mysql 就用不了,不改达梦就用不了。所以从代码入手,在启动时用反射修改值。 * 达梦数据库某些关键字例如 audit,在 mysql 中不是关键字的,需要手动设置 @tablefield(`audit`)。 */ /** * mybatispluspropertiescustomizer 用于在读取 properties 之后进行一些自定义操作 * * @param properties {@link mybatisplusproperties} */ void customize(mybatisplusproperties properties); }
以上就是springboot项目整合达梦数据库详解(mysql转换达梦数据库)的详细内容,更多关于springboot整合达梦数据库的资料请关注代码网其它相关文章!
发表评论