在springboot中可以用的sql装载器

	private static Logger logger = LoggerFactory.getLogger(SqlResourceResolver.class);

	/**
	 * 添加sql模板
	 * @param arp
	 * @param sqlFilePath
	 */
	public static void addSqlTemplate(ActiveRecordPlugin arp,String sqlFilePath) {
		logger.info("装载sql模板");
		try {
			ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
			Resource[] resources = resolver.getResources(sqlFilePath+"/*");
			if (resources!=null&&resources.length>0) {
				for (Resource resource : resources) {
					//只读取.sql后缀名的sql文件
					if (resource.getFilename().contains(".sql")) {
						if (".sql".equals(resource.getFilename().substring(resource.getFilename().length()-4, resource.getFilename().length()))) {
							String content = getContent(resource.getFile());
							if (StrUtil.isNotBlank(content)) {
								arp.addSqlTemplate(new StringSource(content, true));
								logger.info("添加[{}]到ActiveRecordPlugin",resource.getFilename());
							}
						}
					}
				}
			}
		} catch (Exception e) {
			logger.error("装载sql模板时出错",e);
			e.printStackTrace();
		}
	}
	/**
	 * 
	 * @Title: getContent
	 * @Description: 根据文件读取内容
	 * @param: @param file
	 * @param: @return 参数说明
	 * @return: String 返回类型
	 * @throws
	 */
	private static String getContent(File file){
		try {
			FileReader fileReader = new FileReader(file,"UTF-8");
			return fileReader.readString();
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("读取文件内容时出错",e);
			return null;
		}
	}

使用方法

public ActiveRecordPlugin activeRecordPlugin() {
		logger.info("设置ActiveRecord");
		ActiveRecordPlugin arp = new ActiveRecordPlugin(transactionAwareDataSourceProxy());
		arp.setDialect(new MysqlDialect());
		arp.setShowSql(true);
		//多个sql文件自动装载
		SqlResourceResolver.addSqlTemplate(arp, "sql");
		//sql文件映射器
		_MappingKit.mapping(arp);
		arp.start();
		return arp;

	}

项目地址:demo

亲测打包后可用

评论区

JFinal

2020-01-14 17:24

arp.addSqlTemplate(ISource) 这个是专门用于扩展任意来源的 sql 模板的,赞

mr_wangyan

2020-02-21 09:04

你的demo的事物控制有用吗???我很好奇,jfinal的orm好像不支持Transactional注解吧。

小李子a

2020-02-24 14:41

@mr_wangyan 有用的,在datasourceConfig中配置了

小李子a

2020-04-07 09:49

@mr_wangyan 有用的,原生的是不支持,但是配置了transactionAwareDataSourceProxy然后配置DataSourceTransactionManager就可以了,测试过了

热门分享

扫码入社