概述
平台实现对数据库的访问,主要是采用Mybatis与Mybatis plus 实现对数据库的表的读写。
Mybatis的版本与Mybatis plus 的版本如下所示:
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.1</version></dependency>
因Mybatis的自带Mybatis的版本与本平台使用的版本有差别,因此在使用Mybatis plus时,需要排除其mybatis的版本。
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><exclusions><exclusion><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId></exclusion></exclusions></dependency>
ORM 封装模块
数据库的访问在不同的应用的子模块均需要使用该模块,为了简化在不同的模块的使用,把该模块进行了抽取,实现了分布式的事务的声明,不同的类型的数据库的访问,包括多数据源的切换访问,参考jpaas-db-spring-boot-starter的实现。

应用模块引入
在应用模块若需要实现ORM的模块的引用,即只需要在应用的pom文件引入:
<dependency><groupId>com.redxun</groupId><artifactId>jpaas-db-spring-boot-starter</artifactId><version>1.2.RELEASE</version></dependency>
应用使用示例
application.yml
在该文件中主要是配置数据源,分布式事务,mybatis映射文件的扫描路径等,如:
server:port: 7301## 缺省的数据源defaultDs:string:url: ${bpm.datasource.url}username: ${bpm.datasource.username}password: ${bpm.datasource.password}driver-class-name: ${bpm.datasource.driver}connection-init-sqls: ${bpm.datasource.connection}validationQuery: select 1filters: statint:initialSize: 5minIdle: 5maxActive: 10maxPoolPreparedStatementPerConnectionSize: 20long:maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000boolean:testWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: true# Mybatis的映射文件路径mybatis:mapper-locations: classpath:/mapper/**/*Mapper.xml# 分布式事务的配置seata:enabled: trueapplication-id: ${spring.application.name}tx-service-group: bpm_tx_groupenable-auto-data-source-proxy: trueregistry:type: nacosnacos:application: seata-serverserver-addr: ${nacos.address}group: DEFAULT_GROUPuserName: nacospassword: nacosconfig:type: nacosnacos:namespace:serverAddr: ${nacos.address}group: SEATA_GROUPcluster: defaultuserName: nacospassword: nacos
Mybatis数据库访问映射文件
不同的表对应的mybatis的文件放置在resources/mappper目录下,如:

如BpmDef的Mapper的文件如下所示:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.redxun.bpm.core.mapper.BpmDefMapper"><sql id="fields">DEF_ID_,TREE_ID_,NAME_,KEY_,DESCP_ ,ACT_DEF_ID_,ACT_DEP_ID_ ,STATUS_ ,VERSION_ ,IS_MAIN_ , MAIN_DEF_ID_,BO_DEF_IDS_ ,ICON_ ,COLOR_,FORMAL_,TENANT_ID_ ,CREATE_DEP_ID_,CREATE_BY_ ,CREATE_TIME_ ,UPDATE_BY_ ,UPDATE_TIME_</sql><select id="query" resultType="com.redxun.bpm.core.entity.BpmDef" parameterType="java.util.Map">select <include refid="fields"></include>from bpm_def<where><if test="@rx.Ognl@isNotEmpty(w.whereSql)">${w.whereSql}</if></where><if test="@rx.Ognl@isNotEmpty(w.orderBySql)">ORDER BY ${w.orderBySql}</if><if test="@rx.Ognl@isEmpty(w.orderBySql)">ORDER BY DEF_ID_ DESC</if></select><select id="getMainByKey" resultType="com.redxun.bpm.core.entity.BpmDef" parameterType="java.util.Map">select <include refid="fields"></include> from bpm_def where key_=#{key} and is_main_='YES'</select><select id="getMaxVersion" parameterType="java.util.Map" resultType="java.lang.Integer">select max(version_) from bpm_def where key_=#{key}</select><update id="updateMainDefIdIsMain" parameterType="java.util.Map">update bpm_def set is_main_=#{w.isMain,jdbcType=VARCHAR}, main_def_id_=#{w.newMainDefId,jdbcType=VARCHAR} where main_def_id_=#{w.oldMainDefId,jdbcType=VARCHAR}</update><select id="getAllVersionsByMainDefId" resultType="com.redxun.bpm.core.entity.BpmDef" parameterType="java.util.Map">select * from bpm_def where main_def_id_=#{mainDefId} order by version_ desc</select></mapper>
Mapper访问类定义
基于Mybatis新的定义,可以只需要定义访问接口即可,但需要映射以上Mappper的xml文件的Key,如下所示:
package com.redxun.bpm.core.mapper;import com.redxun.bpm.core.entity.BpmDef;import org.apache.ibatis.annotations.Mapper;import com.redxun.common.base.db.BaseDao;import org.apache.ibatis.annotations.Param;import java.util.List;import java.util.Map;/*** 流程定义数据库访问层*/@Mapperpublic interface BpmDefMapper extends BaseDao<BpmDef> {/*** 获得某个流程的主版本* @param key* @return*/BpmDef getMainByKey(String key);/*** 更新流程定义* @param params*/void updateMainDefIdIsMain(@Param("w") Map<String, Object> params);/*** 获取当前流程中最大的版本* @param mainDefId* @return*/Integer getMaxVersion(String mainDefId);/*** 根据流程Id获得流程的所有版本号与DefId* @param mainDefId* @return*/List<BpmDef> getAllVersionsByMainDefId(String mainDefId);}
【说明】:
在需要定义参数的Key,需要在参数中使用@Param(“参数Key”)进行定义。
方法名必须与Mapper中的xml中的id一致
在业务类中使用Mapper类
/*** [流程定义]业务服务类*/@Service@Slf4jpublic class BpmDefService extends SuperServiceImpl<BpmDefMapper, BpmDef> implements BaseService<BpmDef> {@Resourceprivate BpmDefMapper bpmDefMapper;//...}
文档更新时间: 2021-07-19 18:39 作者:zyg