Commit 788a609f authored by 2539630746's avatar 2539630746

多数据源配置

parent 69c03080
...@@ -19,6 +19,30 @@ ...@@ -19,6 +19,30 @@
</properties> </properties>
<dependencies> <dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.32</version>
</dependency>
<dependency>
<groupId>com.yeejoin</groupId>
<artifactId>visual-component-api</artifactId>
<version>1.10.3</version>
</dependency>
<dependency> <dependency>
<groupId>commons-io</groupId> <groupId>commons-io</groupId>
<artifactId>commons-io</artifactId> <artifactId>commons-io</artifactId>
...@@ -178,27 +202,12 @@ ...@@ -178,27 +202,12 @@
</exclusions> </exclusions>
</dependency> </dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.6</version> <!-- 替换为最新版本 -->
</dependency>
<dependency> <dependency>
<groupId>com.google.code.gson</groupId> <groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId> <artifactId>gson</artifactId>
<version>2.8.9</version> <!-- 使用最新版本 --> <version>2.8.9</version> <!-- 使用最新版本 -->
</dependency> </dependency>
<dependency>
<groupId>com.yeejoin</groupId>
<artifactId>visual-component-api</artifactId>
<version>1.10.3</version>
</dependency>
</dependencies> </dependencies>
<dependencyManagement> <dependencyManagement>
......
...@@ -19,11 +19,10 @@ import java.net.InetAddress; ...@@ -19,11 +19,10 @@ import java.net.InetAddress;
@EnableAsync @EnableAsync
@EnableEurekaClient @EnableEurekaClient
@MapperScan(value = {"org.typroject.tyboot.*.*.face.orm.dao", @MapperScan(value = {"org.typroject.tyboot.*.*.face.orm.dao", "com.yeejoin.amos.api.*.face.orm.dao"})
"com.yeejoin.amos.api.*.face.orm.dao"},sqlSessionFactoryRef="sessionFactory")
@ComponentScan({"org.typroject", "com.yeejoin.amos"}) @ComponentScan({"org.typroject", "com.yeejoin.amos"})
@EnableFeignClients @EnableFeignClients
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) @SpringBootApplication
public class Application { public class Application {
private static final Logger log = LogManager.getLogger(Application.class); private static final Logger log = LogManager.getLogger(Application.class);
......
package com.yeejoin.amos.api.tool.config;
public class DatabaseContextHolder {
private static final ThreadLocal<DatabaseType> contextHolder = new ThreadLocal<>();
public static void setDatabaseType(DatabaseType type){
contextHolder.set(type);
}
public static DatabaseType getDatabaseType(){
return contextHolder.get();
}
}
package com.yeejoin.amos.api.tool.config;
public enum DatabaseType {
DATASOURCE_ATL("ATL", "1"),
DATASOURCE_AS("AS", "2");
DatabaseType(String name, String value) {
this.name = name;
this.value = value;
}
private String name;
private String value;
public String getName() {
return name;
}
public String getValue() {
return value;
}
}
package com.yeejoin.amos.api.tool.config;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DatabaseContextHolder.getDatabaseType();
}
}
package com.yeejoin.amos.api.tool.config;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import java.util.List;
@Configuration
public class GlobalConfig extends WebMvcConfigurationSupport {
@Override
protected void configureMessageConverters(List<HttpMessageConverter<?>> converters){
super.configureMessageConverters(converters);
converters.add(mappingJackson2HttpMessageConverter());
}
private MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(){
ObjectMapper objectMapper=new ObjectMapper();
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false);
//排除返回前端的Null对象
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
return new MappingJackson2HttpMessageConverter(objectMapper);
}
}
package com.yeejoin.amos.api.tool.config;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.env.Environment;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
@Configuration
public class MybatisConfig {
@Value("${spring.datasource.driver-class-name}")
private String dbDriver;
@Value("${spring.datasource.jdbc-url}")
private String dbUrl;
@Value("${spring.datasource.username}")
private String dbUsername;
@Value("${spring.datasource.password}")
private String dbPassword;
// MySQL
@Value("${spring.second-datasource.driver-class-name}")
private String dbDriver_workplatform;
@Value("${spring.second-datasource.jdbc-url}")
private String dbUrl_workplatform;
@Value("${spring.second-datasource.username}")
private String dbUsername_workplatform;
@Value("${spring.second-datasource.password}")
private String dbPassword_workplatform;
@Bean(name="primaryDataSource")
public DataSource dataSourceSqlServer() throws Exception{
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(dbDriver);
dataSource.setUrl(dbUrl);
dataSource.setUsername(dbUsername);
dataSource.setPassword(dbPassword);
return dataSource;
}
@Bean(name="dataSource-amos-studio")
public DataSource dataSourceMySQL() throws Exception{
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(dbDriver_workplatform);
dataSource.setUrl(dbUrl_workplatform);
dataSource.setUsername(dbUsername_workplatform);
dataSource.setPassword(dbPassword_workplatform);
return dataSource;
}
/**
* 1、创建动态数据源
* @throws Exception
* @Primary 该注解表示在同一个接口有多个类可以注入的时候,默认选择哪个,而不是让@Autowired报错
*/
@Bean(name="dynamicDataSource")
@Primary
public DynamicDataSource DataSource(@Qualifier("primaryDataSource") DataSource dataSourceATL,
@Qualifier("dataSource-amos-studio") DataSource dataSourceAS){
//将已知的所有数据源信息放进 AbstractRoutingDataSource 类的 targetDataSource 属性中.
Map<Object, Object> targetDataSource = new HashMap<>();
targetDataSource.put(DatabaseType.DATASOURCE_AS, dataSourceAS);
targetDataSource.put(DatabaseType.DATASOURCE_ATL, dataSourceATL);
DynamicDataSource dataSource = new DynamicDataSource();
dataSource.setTargetDataSources(targetDataSource);
dataSource.setDefaultTargetDataSource(dataSourceAS);
return dataSource;
}
/**
* 根据当前数据源创建SqlSessionFactory
* @throws Exception
*/
@Bean(name="sessionFactory")
public SqlSessionFactory sessionFactory(@Qualifier("dynamicDataSource")DynamicDataSource dataSource) throws Exception {
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
sessionFactoryBean.setMapperLocations(resolver.getResources("classpath:/mapper/*.xml"));
return sessionFactoryBean.getObject();
}
/**
* 手动修改数据源
* @param environment
*/
public static void setDataSourceByEnvironment(DatabaseType environment){
DatabaseContextHolder.setDatabaseType(environment);
}
}
package com.yeejoin.amos.api.tool.controller; package com.yeejoin.amos.api.tool.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.api.component.face.model.AdapterCategoryModel; import com.yeejoin.amos.api.component.face.model.AdapterCategoryModel;
import com.yeejoin.amos.api.component.face.service.AdapterCategoryService; import com.yeejoin.amos.api.component.face.service.AdapterCategoryService;
import com.yeejoin.amos.api.tool.face.model.VisualDesignerModel;
import com.yeejoin.amos.api.tool.face.service.VisualDesignerService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -13,6 +16,7 @@ import org.typroject.tyboot.core.restful.utils.ResponseHelper; ...@@ -13,6 +16,7 @@ import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel; import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.util.List; import java.util.List;
@RestController @RestController
@Api(tags = "平台通用分类") @Api(tags = "平台通用分类")
@RequestMapping(value = "/adapter") @RequestMapping(value = "/adapter")
...@@ -22,6 +26,9 @@ public class AdapterCategoryController { ...@@ -22,6 +26,9 @@ public class AdapterCategoryController {
@Autowired @Autowired
private AdapterCategoryService adapterCategoryService; private AdapterCategoryService adapterCategoryService;
@Autowired
private VisualDesignerService visualDesignerService;
/** /**
* 新增 * 新增
* @param adapterCategoryModel AdapterCategory平台通用分类 * @param adapterCategoryModel AdapterCategory平台通用分类
...@@ -54,7 +61,7 @@ public class AdapterCategoryController { ...@@ -54,7 +61,7 @@ public class AdapterCategoryController {
* @param sequenceNbr 编码 * @param sequenceNbr 编码
* @return Boolean * @return Boolean
*/ */
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false) @TycloudOperation(ApiLevel = UserType.AGENCY)
@DeleteMapping(value = "/{sequenceNbr}") @DeleteMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "DELETE", value = "根据sequenceNbr删除", notes = "根据sequenceNbr删除") @ApiOperation(httpMethod = "DELETE", value = "根据sequenceNbr删除", notes = "根据sequenceNbr删除")
public ResponseModel<Boolean> deleteBySequenceNbr(@PathVariable(value = "sequenceNbr") Long sequenceNbr) { public ResponseModel<Boolean> deleteBySequenceNbr(@PathVariable(value = "sequenceNbr") Long sequenceNbr) {
...@@ -77,12 +84,15 @@ public class AdapterCategoryController { ...@@ -77,12 +84,15 @@ public class AdapterCategoryController {
* 列表树形结构查询 * 列表树形结构查询
* @return List<AdapterCategoryModel> * @return List<AdapterCategoryModel>
*/ */
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false) @TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "列表树形结构查询", notes = "列表树形结构查询") @ApiOperation(httpMethod = "GET", value = "列表树形结构查询", notes = "列表树形结构查询")
@GetMapping(value = "/tree") @GetMapping(value = "/tree")
public ResponseModel<List<AdapterCategoryModel>> selectForTree(@RequestParam("categoryType") String categoryType) throws Exception { public ResponseModel<List<AdapterCategoryModel>> selectForTree(@RequestParam("categoryType") String categoryType) throws Exception {
if ("TEMPLATE".equals(categoryType)){
List<VisualDesignerModel> visualDesignerList = visualDesignerService.queryForVisualDesignerList();
return null;
}
return ResponseHelper.buildResponse(adapterCategoryService.queryAdapterCategoryForTree(false,categoryType,"")); return ResponseHelper.buildResponse(adapterCategoryService.queryAdapterCategoryForTree(false,categoryType,""));
} }
} }
package com.yeejoin.amos.api.tool.controller; package com.yeejoin.amos.api.tool.controller;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.api.tool.face.model.AmosToolTemplateModel; import com.yeejoin.amos.api.tool.face.model.AmosToolTemplateModel;
import com.yeejoin.amos.api.tool.face.model.AmosToolTemplateVoModel; import com.yeejoin.amos.api.tool.face.model.AmosToolTemplateVoModel;
...@@ -23,6 +24,7 @@ import java.util.List; ...@@ -23,6 +24,7 @@ import java.util.List;
@RequestMapping(value = "/scene") @RequestMapping(value = "/scene")
@Api(tags = "atl-场景案例") @Api(tags = "atl-场景案例")
@TycloudResource(module = "atl", value = "scene") @TycloudResource(module = "atl", value = "scene")
@DS("atl")
public class AmosToolTemplateController { public class AmosToolTemplateController {
@Autowired @Autowired
......
...@@ -98,7 +98,7 @@ public class ApiInfoResource { ...@@ -98,7 +98,7 @@ public class ApiInfoResource {
* @param sequenceNbr 主键 * @param sequenceNbr 主键
* @return Page<ApiInfoModel> * @return Page<ApiInfoModel>
*/ */
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@GetMapping(value = "/page") @GetMapping(value = "/page")
@ApiOperation(httpMethod = "GET",value = "分页查询", notes = "分页查询") @ApiOperation(httpMethod = "GET",value = "分页查询", notes = "分页查询")
public ResponseModel<Page<ApiInfoModel>> queryForPage( public ResponseModel<Page<ApiInfoModel>> queryForPage(
......
package com.yeejoin.amos.api.tool.controller; package com.yeejoin.amos.api.tool.controller;
import com.yeejoin.amos.api.tool.face.model.AdapterCategoryModel; import com.yeejoin.amos.api.component.face.model.AdapterCategoryModel;
import com.yeejoin.amos.api.tool.face.service.ApiSourceService; import com.yeejoin.amos.api.tool.face.service.ApiSourceService;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import org.typroject.tyboot.core.restful.utils.ResponseHelper; import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel; import org.typroject.tyboot.core.restful.utils.ResponseModel;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -14,6 +13,8 @@ import org.springframework.web.bind.annotation.*; ...@@ -14,6 +13,8 @@ import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.core.restful.doc.TycloudOperation; import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.foundation.enumeration.UserType; import org.typroject.tyboot.core.foundation.enumeration.UserType;
import java.util.List;
@CrossOrigin @CrossOrigin
@RestController @RestController
@Api(tags = "接口来源管理Api") @Api(tags = "接口来源管理Api")
...@@ -81,7 +82,7 @@ public class ApiSourceResource { ...@@ -81,7 +82,7 @@ public class ApiSourceResource {
* 列表全部数据查询 * 列表全部数据查询
* @return List<ApiSourceDto> * @return List<ApiSourceDto>
*/ */
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@ApiOperation(httpMethod = "GET", value = "列表全部数据查询", notes = "列表全部数据查询") @ApiOperation(httpMethod = "GET", value = "列表全部数据查询", notes = "列表全部数据查询")
@GetMapping(value = "/list") @GetMapping(value = "/list")
public ResponseModel<List<AdapterCategoryModel>> selectForList(@RequestParam("categoryType") String categoryType) { public ResponseModel<List<AdapterCategoryModel>> selectForList(@RequestParam("categoryType") String categoryType) {
......
...@@ -46,7 +46,7 @@ public class DataApiResource { ...@@ -46,7 +46,7 @@ public class DataApiResource {
* *
* @throws SQLException * @throws SQLException
*/ */
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@ApiOperation(value = "导出应用快搭增量脚本") @ApiOperation(value = "导出应用快搭增量脚本")
@RequestMapping(value = "/generateSQL", method = RequestMethod.GET) @RequestMapping(value = "/generateSQL", method = RequestMethod.GET)
public void generateSQL( public void generateSQL(
......
package com.yeejoin.amos.api.tool.controller; package com.yeejoin.amos.api.tool.controller;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.api.tool.face.model.AgencyModel; import com.yeejoin.amos.api.tool.face.model.AgencyModel;
import com.yeejoin.amos.api.tool.face.model.DatabaseConnectionModel; import com.yeejoin.amos.api.tool.face.model.DatabaseConnectionModel;
...@@ -27,6 +28,7 @@ import java.util.List; ...@@ -27,6 +28,7 @@ import java.util.List;
@Api(tags = "atl-数据库信息") @Api(tags = "atl-数据库信息")
@TycloudResource(module = "atl", value = "database_link") @TycloudResource(module = "atl", value = "database_link")
@RequestMapping(value = "/database_link") @RequestMapping(value = "/database_link")
@DS("atl")
public class DatabaseConnectionResource { public class DatabaseConnectionResource {
@Autowired @Autowired
...@@ -83,8 +85,6 @@ public class DatabaseConnectionResource { ...@@ -83,8 +85,6 @@ public class DatabaseConnectionResource {
@GetMapping(value = "/{sequenceNbr}") @GetMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "GET", value = "根据sequenceNbr查询单个", notes = "根据sequenceNbr查询单个") @ApiOperation(httpMethod = "GET", value = "根据sequenceNbr查询单个", notes = "根据sequenceNbr查询单个")
public ResponseModel<DatabaseConnectionModel> selectOne(@PathVariable Long sequenceNbr) throws Exception { public ResponseModel<DatabaseConnectionModel> selectOne(@PathVariable Long sequenceNbr) throws Exception {
// DatabaseConnectionModel databaseConnectionModel = databaseConnectionService.queryBySeq(sequenceNbr);
// databaseConnectionModel.setPassWord(AESUtils.decrypt(databaseConnectionModel.getPassWord()));
return ResponseHelper.buildResponse(databaseConnectionService.queryBySeq(sequenceNbr)); return ResponseHelper.buildResponse(databaseConnectionService.queryBySeq(sequenceNbr));
} }
......
package com.yeejoin.amos.api.tool.face.model; //package com.yeejoin.amos.api.tool.face.model;
//
import io.swagger.annotations.ApiModel; //import java.util.Collection;
import lombok.Data; //import java.util.Date;
import lombok.EqualsAndHashCode; //
import org.typroject.tyboot.core.rdbms.model.BaseModel; //import lombok.Data;
import java.util.Date; //import org.typroject.tyboot.core.foundation.utils.TreeNode;
//import org.typroject.tyboot.core.rdbms.model.BaseModel;
@Data //
@EqualsAndHashCode(callSuper = true) //@Data
@ApiModel(value="AdapterCategoryModel", description="") //public class AdapterCategoryModel extends BaseModel implements TreeNode<AdapterCategoryModel, Long> {
public class AdapterCategoryModel extends BaseModel { //
// private static final long serialVersionUID = 1L;
private String categoryType; // private String categoryType;
// private Long parentId;
private Long parentId; // private String categoryName;
// private String icon;
private String name; // private String categoryKey;
// private Integer sort;
private String icon; // private Boolean isDelete;
// private Date createDate;
private String code; // private String tempType;
// private String designerType;
private Integer sort; // private String cardWidth;
// private String cardHeight;
private String agencyCode; // private String extras;
// private Collection<AdapterCategoryModel> children;
private Boolean isDelete; //
// public Long getMyParentId() {
private Date createDate; // return this.parentId;
// }
private String extras; //
// public Long getMyId() {
} // return this.sequenceNbr;
// }
//
// public Collection<AdapterCategoryModel> getChildren() {
// return this.children;
// }
//
// public void setChildren(Collection<AdapterCategoryModel> collection) {
// this.children = collection;
// }
//
// public int compareTo(AdapterCategoryModel node) {
// return this.sort.equals(node.getSort()) ? this.getSequenceNbr().compareTo(node.getSequenceNbr()) : this.sort - node.sort;
// }
//
//
// protected boolean canEqual(Object other) {
// return other instanceof AdapterCategoryModel;
// }
//
//
// public AdapterCategoryModel() {
// }
//
// public String toString() {
// return "AdapterCategoryModel(categoryType=" + this.getCategoryType() + ", parentId=" + this.getParentId() + ", categoryName=" + this.getCategoryName() + ", icon=" + this.getIcon() + ", categoryKey=" + this.getCategoryKey() + ", sort=" + this.getSort() + ", isDelete=" + this.getIsDelete() + ", createDate=" + this.getCreateDate() + ", extras=" + this.getExtras() + ", children=" + this.getChildren() + ")";
// }
//}
package com.yeejoin.amos.api.tool.face.rowmapper; package com.yeejoin.amos.api.tool.face.rowmapper;
import com.yeejoin.amos.api.tool.face.model.AdapterCategoryModel; import com.yeejoin.amos.api.component.face.model.AdapterCategoryModel;
import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Timestamp; import java.sql.Timestamp;
...@@ -14,18 +13,12 @@ public class ApiSourceRowMapper implements RowMapper<AdapterCategoryModel> { ...@@ -14,18 +13,12 @@ public class ApiSourceRowMapper implements RowMapper<AdapterCategoryModel> {
@Override @Override
public AdapterCategoryModel mapRow(ResultSet rs, int rowNum) throws SQLException { public AdapterCategoryModel mapRow(ResultSet rs, int rowNum) throws SQLException {
AdapterCategoryModel adapterCategoryModel=new AdapterCategoryModel(); AdapterCategoryModel adapterCategoryModel=new AdapterCategoryModel();
adapterCategoryModel.setName(rs.getString("CATEGORY_NAME")); adapterCategoryModel.setCategoryName(rs.getString("CATEGORY_NAME"));
adapterCategoryModel.setCode(rs.getString("CATEGORY_KEY")); adapterCategoryModel.setCategoryKey(rs.getString("CATEGORY_KEY"));
adapterCategoryModel.setSequenceNbr(rs.getLong("SEQUENCE_NBR")); adapterCategoryModel.setSequenceNbr(rs.getLong("SEQUENCE_NBR"));
Timestamp timestamp = rs.getTimestamp("REC_DATE"); adapterCategoryModel.setExtras(rs.getString("EXTRAS"));
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); adapterCategoryModel.setCategoryType(rs.getString("CATEGORY_TYPE"));
String formattedDateTime = dateFormat.format(timestamp); adapterCategoryModel.setSort(rs.getInt("SORT"));
try {
adapterCategoryModel.setRecDate(dateFormat.parse(formattedDateTime));
} catch (ParseException e) {
throw new RuntimeException(e);
}
adapterCategoryModel.setRecUserId(rs.getString("REC_USER_ID"));
return adapterCategoryModel; return adapterCategoryModel;
} }
......
package com.yeejoin.amos.api.tool.face.service; package com.yeejoin.amos.api.tool.face.service;
import com.yeejoin.amos.api.tool.face.model.AdapterCategoryModel; import com.yeejoin.amos.api.component.face.model.AdapterCategoryModel;
import com.yeejoin.amos.api.tool.face.model.ApiSourceModel; import com.yeejoin.amos.api.tool.face.model.ApiSourceModel;
import com.yeejoin.amos.api.tool.face.orm.entity.ApiSource; import com.yeejoin.amos.api.tool.face.orm.entity.ApiSource;
import com.yeejoin.amos.api.tool.face.orm.dao.ApiSourceMapper; import com.yeejoin.amos.api.tool.face.orm.dao.ApiSourceMapper;
...@@ -26,8 +26,8 @@ public class ApiSourceService extends BaseService<ApiSourceModel, ApiSource, Api ...@@ -26,8 +26,8 @@ public class ApiSourceService extends BaseService<ApiSourceModel, ApiSource, Api
Integer result = jdbcTemplate.queryForObject("SELECT COUNT(*) FROM adapter_category WHERE CATEGORY_TYPE=?", new String[]{"API"}, Integer.class); Integer result = jdbcTemplate.queryForObject("SELECT COUNT(*) FROM adapter_category WHERE CATEGORY_TYPE=?", new String[]{"API"}, Integer.class);
String sql="INSERT INTO adapter_category (SEQUENCE_NBR,CATEGORY_TYPE,PARENT_ID,CATEGORY_NAME,CATEGORY_KEY,SORT,AGENCY_CODE,IS_DELETE,REC_USER_ID,REC_DATE,CREATE_DATE) " + String sql="INSERT INTO adapter_category (SEQUENCE_NBR,CATEGORY_TYPE,PARENT_ID,CATEGORY_NAME,CATEGORY_KEY,SORT,AGENCY_CODE,IS_DELETE,REC_USER_ID,REC_DATE,CREATE_DATE) " +
"VALUES (?,?,?,?,?,?,?,?,?,?,?)"; "VALUES (?,?,?,?,?,?,?,?,?,?,?)";
jdbcTemplate.update(sql,new Object[]{model.getSequenceNbr(),"API",0l,model.getName(), jdbcTemplate.update(sql,new Object[]{model.getSequenceNbr(),"API",0l,model.getCategoryName(),
model.getCode(),result+1,agencyCode==null?"":agencyCode,0,loginId,new Date(),new Date()}); model.getCategoryKey(),result+1,agencyCode==null?"":agencyCode,0,loginId,new Date(),new Date()});
return model; return model;
} }
...@@ -40,8 +40,8 @@ public class ApiSourceService extends BaseService<ApiSourceModel, ApiSource, Api ...@@ -40,8 +40,8 @@ public class ApiSourceService extends BaseService<ApiSourceModel, ApiSource, Api
public AdapterCategoryModel queryBySequenceNbr(Long sequenceNbr){ public AdapterCategoryModel queryBySequenceNbr(Long sequenceNbr){
JdbcTemplate jdbcTemplate=ToolUtils.getJdbcTemplate(); JdbcTemplate jdbcTemplate=ToolUtils.getJdbcTemplate();
String sql="SELECT * FROM adapter_category WHERE SEQUENCE_NBR=? AND IS_DELETE!=?"; String sql="SELECT * FROM adapter_category WHERE SEQUENCE_NBR=? AND IS_DELETE=?";
AdapterCategoryModel adapterCategoryModel = jdbcTemplate.queryForObject(sql,new Object[]{sequenceNbr,ToolUtils.IS_DELETE},new ApiSourceRowMapper()); AdapterCategoryModel adapterCategoryModel = jdbcTemplate.queryForObject(sql,new Object[]{sequenceNbr,!ToolUtils.IS_DELETE},new ApiSourceRowMapper());
return adapterCategoryModel; return adapterCategoryModel;
} }
...@@ -63,7 +63,7 @@ public class ApiSourceService extends BaseService<ApiSourceModel, ApiSource, Api ...@@ -63,7 +63,7 @@ public class ApiSourceService extends BaseService<ApiSourceModel, ApiSource, Api
JdbcTemplate jdbcTemplate=ToolUtils.getJdbcTemplate(); JdbcTemplate jdbcTemplate=ToolUtils.getJdbcTemplate();
String sql="SELECT * FROM adapter_category WHERE SEQUENCE_NBR=? AND IS_DELETE!=?"; String sql="SELECT * FROM adapter_category WHERE SEQUENCE_NBR=? AND IS_DELETE!=?";
AdapterCategoryModel model = jdbcTemplate.queryForObject(sql, new Object[]{sequenceNbr,ToolUtils.IS_DELETE},new ApiSourceRowMapper()); AdapterCategoryModel model = jdbcTemplate.queryForObject(sql, new Object[]{sequenceNbr,ToolUtils.IS_DELETE},new ApiSourceRowMapper());
return model.getCode()==null?"":model.getCode(); return model.getCategoryKey()==null?"":model.getCategoryKey();
} }
/** /**
...@@ -93,7 +93,7 @@ public class ApiSourceService extends BaseService<ApiSourceModel, ApiSource, Api ...@@ -93,7 +93,7 @@ public class ApiSourceService extends BaseService<ApiSourceModel, ApiSource, Api
public AdapterCategoryModel updateByModel(AdapterCategoryModel model) { public AdapterCategoryModel updateByModel(AdapterCategoryModel model) {
JdbcTemplate jdbcTemplate=ToolUtils.getJdbcTemplate(); JdbcTemplate jdbcTemplate=ToolUtils.getJdbcTemplate();
String sql="UPDATE adapter_category SET CATEGORY_NAME=?,CATEGORY_KEY=?,REC_DATE=? WHERE SEQUENCE_NBR=?"; String sql="UPDATE adapter_category SET CATEGORY_NAME=?,CATEGORY_KEY=?,REC_DATE=? WHERE SEQUENCE_NBR=?";
jdbcTemplate.update(sql,new Object[]{model.getName(),model.getCode(),new Date(),model.getSequenceNbr()}); jdbcTemplate.update(sql,new Object[]{model.getCategoryName(),model.getCategoryKey(),new Date(),model.getSequenceNbr()});
return model; return model;
} }
......
package com.yeejoin.amos.api.tool.face.service; package com.yeejoin.amos.api.tool.face.service;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.api.tool.face.model.*; import com.yeejoin.amos.api.tool.face.model.*;
...@@ -29,6 +30,7 @@ import java.util.Map; ...@@ -29,6 +30,7 @@ import java.util.Map;
*/ */
@Service @Service
@DS("atl")
public class DatabaseConnectionService extends BaseService<DatabaseConnectionModel, DataBaseLink, DataBaseLinkMapper> { public class DatabaseConnectionService extends BaseService<DatabaseConnectionModel, DataBaseLink, DataBaseLinkMapper> {
private static final Logger log = LogManager.getLogger(DatabaseConnectionService.class); private static final Logger log = LogManager.getLogger(DatabaseConnectionService.class);
...@@ -36,6 +38,10 @@ public class DatabaseConnectionService extends BaseService<DatabaseConnectionMod ...@@ -36,6 +38,10 @@ public class DatabaseConnectionService extends BaseService<DatabaseConnectionMod
@Autowired @Autowired
private DataSource dataSource; private DataSource dataSource;
@Autowired
private DataBaseLinkMapper dataBaseLinkMapper;
/** /**
* 新增 * 新增
*/ */
...@@ -132,4 +138,5 @@ public class DatabaseConnectionService extends BaseService<DatabaseConnectionMod ...@@ -132,4 +138,5 @@ public class DatabaseConnectionService extends BaseService<DatabaseConnectionMod
return this.queryForList("", false); return this.queryForList("", false);
} }
} }
...@@ -2,6 +2,7 @@ package com.yeejoin.amos.api.tool.face.service; ...@@ -2,6 +2,7 @@ package com.yeejoin.amos.api.tool.face.service;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.yeejoin.amos.api.tool.enums.PictureType; import com.yeejoin.amos.api.tool.enums.PictureType;
import com.yeejoin.amos.api.tool.enums.SourceEnum; import com.yeejoin.amos.api.tool.enums.SourceEnum;
import com.yeejoin.amos.api.tool.face.model.DatabaseConnectionModel; import com.yeejoin.amos.api.tool.face.model.DatabaseConnectionModel;
...@@ -41,6 +42,7 @@ import java.util.zip.ZipOutputStream; ...@@ -41,6 +42,7 @@ import java.util.zip.ZipOutputStream;
* @since 2022-08-16 * @since 2022-08-16
*/ */
@Component @Component
@DS("atl")
public class StudioResourceService extends BaseService<StudioResourceModel, StudioResource, StudioResourceMapper> { public class StudioResourceService extends BaseService<StudioResourceModel, StudioResource, StudioResourceMapper> {
/** /**
......
...@@ -4,36 +4,28 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; ...@@ -4,36 +4,28 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.api.tool.face.model.ToolLibraryDetailModel; import com.yeejoin.amos.api.tool.face.model.ToolLibraryDetailModel;
import com.yeejoin.amos.api.tool.face.model.ToolLibraryModel; import com.yeejoin.amos.api.tool.face.model.ToolLibraryModel;
import com.yeejoin.amos.api.tool.face.model.ToolLibraryTreeModel; import com.yeejoin.amos.api.tool.face.model.ToolLibraryTreeModel;
import com.yeejoin.amos.api.tool.face.orm.dao.MorphicWidgetGroupMapper;
import com.yeejoin.amos.api.tool.face.orm.dao.ToolLibraryMapper; import com.yeejoin.amos.api.tool.face.orm.dao.ToolLibraryMapper;
import com.yeejoin.amos.api.tool.face.orm.entity.MorphicWidgetGroup;
import com.yeejoin.amos.api.tool.face.orm.entity.TableColumn; import com.yeejoin.amos.api.tool.face.orm.entity.TableColumn;
import com.yeejoin.amos.api.tool.face.orm.entity.ToolLibrary; import com.yeejoin.amos.api.tool.face.orm.entity.ToolLibrary;
import com.yeejoin.amos.api.tool.utils.DatabaseUtils; import com.yeejoin.amos.api.tool.utils.DatabaseUtils;
import com.yeejoin.amos.api.tool.utils.MultiDataSourceUtil;
import com.yeejoin.amos.api.tool.utils.SqlExportUtils; import com.yeejoin.amos.api.tool.utils.SqlExportUtils;
import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateFormatUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil; import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService; import org.typroject.tyboot.core.rdbms.service.BaseService;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.io.*; import java.io.*;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.sql.Connection; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.*; import java.util.*;
@Service @Service
// @DS("amos-studio")
public class ToolLibraryService extends BaseService<ToolLibraryModel, ToolLibrary, ToolLibraryMapper> { public class ToolLibraryService extends BaseService<ToolLibraryModel, ToolLibrary, ToolLibraryMapper> {
@Autowired private DataSource dataSource=new MultiDataSourceUtil().getDataSource();
@Qualifier("dataSource-amos-studio")
private DataSource dataSource;
/** /**
* 由一级到二级 * 由一级到二级
......
...@@ -6,13 +6,10 @@ import com.yeejoin.amos.api.tool.face.model.VisualDesignerModel; ...@@ -6,13 +6,10 @@ import com.yeejoin.amos.api.tool.face.model.VisualDesignerModel;
import com.yeejoin.amos.api.tool.face.orm.dao.VisualDesignerMapper; import com.yeejoin.amos.api.tool.face.orm.dao.VisualDesignerMapper;
import com.yeejoin.amos.api.tool.face.orm.entity.VisualDesigner; import com.yeejoin.amos.api.tool.face.orm.entity.VisualDesigner;
import com.yeejoin.amos.api.tool.utils.ToolUtils; import com.yeejoin.amos.api.tool.utils.ToolUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.rdbms.service.BaseService; import org.typroject.tyboot.core.rdbms.service.BaseService;
import javax.sql.DataSource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
......
package com.yeejoin.amos.api.tool.utils;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
public class MultiDataSourceUtil {
private static final String driverClassName="com.mysql.cj.jdbc.Driver";
private static final String jdbcUrl="jdbc:mysql://172.16.3.18:3306/amos_studio?useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai";
private static final String userName="root";
private static final String password="Yeejoin@2020";
public DataSource getDataSource(){
HikariDataSource hikariDataSource = new HikariDataSource();
hikariDataSource.setJdbcUrl(jdbcUrl);
hikariDataSource.setDriverClassName(driverClassName);
hikariDataSource.setUsername(userName);
hikariDataSource.setPassword(password);
return hikariDataSource;
}
}
package com.yeejoin.amos.api.tool.utils; package com.yeejoin.amos.api.tool.utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource; import javax.sql.DataSource;
@Configuration
public class ToolUtils { public class ToolUtils {
public static final Boolean IS_DELETE=true; public static final Boolean IS_DELETE = true;
private static JdbcTemplate jdbcTemplate=new JdbcTemplate(); private static JdbcTemplate jdbcTemplate = new JdbcTemplate();
@Autowired public void setDataSource() {
@Qualifier("dataSource-amos-studio") MultiDataSourceUtil multiDataSourceUtil = new MultiDataSourceUtil();
private DataSource dataSource; DataSource dataSource = multiDataSourceUtil.getDataSource();
@Autowired
public void ToolUtils(){
jdbcTemplate.setDataSource(dataSource); jdbcTemplate.setDataSource(dataSource);
} }
public static JdbcTemplate getJdbcTemplate(){ public static JdbcTemplate getJdbcTemplate() {
ToolUtils toolUtils = new ToolUtils();
toolUtils.setDataSource();
return jdbcTemplate; return jdbcTemplate;
} }
public static int getSort(String categoryType) {
Integer result = jdbcTemplate.queryForObject("SELECT COUNT(*) FROM adapter_category WHERE CATEGORY_TYPE=?", new String[]{categoryType}, Integer.class);
return result + 1;
}
} }
spring.datasource.jdbc-url=jdbc:mysql://172.16.3.18:3306/amos_tool_library?allowMultiQueries=true #spring.datasource.jdbc-url=jdbc:mysql://172.16.3.18:3306/amos_tool_library?allowMultiQueries=true
spring.datasource.username=root #spring.datasource.username=root
spring.datasource.password=Yeejoin@2020 #spring.datasource.password=Yeejoin@2020
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver #spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.type=com.zaxxer.hikari.HikariDataSource #spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=3 #spring.datasource.hikari.minimum-idle=3
spring.datasource.hikari.maximum-pool-size=10 #spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.auto-commit=true #spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000 #spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=DatebookHikariCP #spring.datasource.hikari.pool-name=DatebookHikariCP
spring.datasource.hikari.max-lifetime=1800000 #spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.connection-timeout=30000 #spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.connection-test-query=SELECT 1 #spring.datasource.hikari.connection-test-query=SELECT 1
#
#spring.second-datasource.jdbc-url=jdbc:mysql://172.16.3.18:3306/amos_studio_delete?allowMultiQueries=true
#spring.second-datasource.username=root
#spring.second-datasource.password=Yeejoin@2020
#spring.second-datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#spring.second-datasource.type=com.zaxxer.hikari.HikariDataSource
#spring.second-datasource.hikari.minimum-idle=3
#spring.second-datasource.hikari.maximum-pool-size=10
#spring.second-datasource.hikari.auto-commit=true
#spring.second-datasource.hikari.idle-timeout=30000
#spring.second-datasource.hikari.pool-name=DatebookHikariCP
#spring.second-datasource.hikari.max-lifetime=1800000
#spring.second-datasource.hikari.connection-timeout=30000
#spring.second-datasource.hikari.connection-test-query=SELECT 1
spring.second-datasource.jdbc-url=jdbc:mysql://172.16.3.18:3306/amos_studio_delete?allowMultiQueries=true spring.datasource.dynamic.primary=as
spring.second-datasource.username=root spring.datasource.dynamic.strict=false
spring.second-datasource.password=Yeejoin@2020 spring.datasource.dynamic.hikari.max-pool-size=100
spring.second-datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.dynamic.hikari.connection-timeout=30000
spring.second-datasource.type=com.zaxxer.hikari.HikariDataSource spring.datasource.dynamic.datasource.atl.driver-class-name=com.mysql.cj.jdbc.Driver
spring.second-datasource.hikari.minimum-idle=3 spring.datasource.dynamic.datasource.atl.url=jdbc:mysql://172.16.3.18:3306/amos_tool_library?useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
spring.second-datasource.hikari.maximum-pool-size=10 spring.datasource.dynamic.datasource.atl.username=root
spring.second-datasource.hikari.auto-commit=true spring.datasource.dynamic.datasource.atl.password=Yeejoin@2020
spring.second-datasource.hikari.idle-timeout=30000
spring.second-datasource.hikari.pool-name=DatebookHikariCP spring.datasource.dynamic.datasource.as.driver-class-name=com.mysql.cj.jdbc.Driver
spring.second-datasource.hikari.max-lifetime=1800000 spring.datasource.dynamic.datasource.as.url=jdbc:mysql://172.16.3.18:3306/amos_studio?useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
spring.second-datasource.hikari.connection-timeout=30000 spring.datasource.dynamic.datasource.as.username=root
spring.second-datasource.hikari.connection-test-query=SELECT 1 spring.datasource.dynamic.datasource.as.password=Yeejoin@2020
mybatis-plus.configuration.map-underscore-to-camel-case=true
#eureka #eureka
eureka.instance.hostname=172.16.3.18 eureka.instance.hostname=172.16.3.18
......
...@@ -29,7 +29,6 @@ spring.second-datasource.hikari.max-lifetime=1800000 ...@@ -29,7 +29,6 @@ spring.second-datasource.hikari.max-lifetime=1800000
spring.second-datasource.hikari.connection-timeout=30000 spring.second-datasource.hikari.connection-timeout=30000
spring.second-datasource.hikari.connection-test-query=SELECT 1 spring.second-datasource.hikari.connection-test-query=SELECT 1
#eureka #eureka
eureka.instance.hostname=172.16.3.18 eureka.instance.hostname=172.16.3.18
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:10001/eureka/ eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:10001/eureka/
......
...@@ -14,14 +14,17 @@ logging.config=classpath:logback-${spring.profiles.active}.xml ...@@ -14,14 +14,17 @@ logging.config=classpath:logback-${spring.profiles.active}.xml
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
mybatis-plus.configuration.map-underscore-to-camel-case=true mybatis-plus.configuration.map-underscore-to-camel-case=true
spring.datasource.type=com.zaxxer.hikari.HikariDataSource datasource.atl.username=root
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.maximum-pool-size=25 #spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.auto-commit=true #spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.idle-timeout=30000 #spring.datasource.hikari.maximum-pool-size=25
spring.datasource.hikari.pool-name=DatebookHikariCP #spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.max-lifetime=120000 #spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.connection-timeout=30000 #spring.datasource.hikari.pool-name=DatebookHikariCP
spring.datasource.hikari.connection-test-query=SELECT 1 #spring.datasource.hikari.max-lifetime=120000
#spring.datasource.hikari.connection-timeout=30000
#spring.datasource.hikari.connection-test-query=SELECT 1
<?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.yeejoin.amos.api.tool.face.orm.dao.AdapterCategoryMapper">
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment