
org.nutz.spring.boot.dao.NutzDaoAutoConfiguration Maven / Gradle / Ivy
package org.nutz.spring.boot.dao;
import java.util.Map;
import javax.sql.DataSource;
import org.nutz.dao.Dao;
import org.nutz.dao.DaoInterceptor;
import org.nutz.dao.SqlManager;
import org.nutz.dao.Sqls;
import org.nutz.dao.impl.DaoRunner;
import org.nutz.dao.impl.FileSqlManager;
import org.nutz.dao.impl.NutDao;
import org.nutz.resource.Scans;
import org.nutz.spring.boot.dao.NutzDaoAutoConfigurationProperties.SqlManager.Mode;
import org.nutz.spring.boot.dao.NutzDaoAutoConfigurationProperties.SqlTemplate.Type;
import org.nutz.spring.boot.dao.sqlmanager.XmlSqlManager;
import org.nutz.spring.boot.dao.sqltpl.impl.beetl.BeetlSqlTpl;
import org.nutz.spring.boot.dao.sqltpl.impl.freemarker.FreeMarkerSqlTpl;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
/**
*
* @author Kerbores([email protected])
*
*/
@AutoConfiguration
@RequiredArgsConstructor
@ConditionalOnClass({Dao.class})
@ConditionalOnExpression("${nutz.dao.enabled:true}")
@AutoConfigureAfter({DataSourceAutoConfiguration.class})
@EnableConfigurationProperties(NutzDaoAutoConfigurationProperties.class)
@Import(SpringResourceLoactionConfiguration.class)
public class NutzDaoAutoConfiguration {
private final NutzDaoAutoConfigurationProperties properties;
private final SpringResourceLoaction springResourceLoaction;
@PostConstruct
public void initSqlTemplate() {
Scans.me().addResourceLocation(this.springResourceLoaction);
if (this.properties.getSqlTemplate().isEnable()) {
if (this.properties.getSqlTemplate().getType() == Type.FREEMARKER) {
Sqls.setSqlBorning(FreeMarkerSqlTpl.class);
} else {
Sqls.setSqlBorning(BeetlSqlTpl.class);
}
}
}
@Bean
@ConditionalOnMissingBean(DaoRunner.class)
DaoRunner daoRunner() {
return new SpringDaoRunner();
}
@Bean
@ConditionalOnMissingBean
SqlManager sqlManager() {
String[] paths = this.properties.getSqlManager().getPaths();
if (paths == null) {
paths = new String[]{"sqls"};
}
return this.properties.getSqlManager().getMode() == Mode.XML ? new XmlSqlManager(paths)
: new FileSqlManager(paths);
}
@Bean
@ConditionalOnMissingBean
Dao dao(DataSource dataSource, SqlManager sqlManager, DaoRunner daoRunner, ApplicationContext context) {
NutDao dao = new NutDao(dataSource, sqlManager);
dao.setRunner(daoRunner);
Map interceptors = context.getBeansOfType(DaoInterceptor.class);
interceptors.values().forEach(dao::addInterceptor);
if (this.properties.getInterceptor().isTime()) {
dao.addInterceptor("time");
}
return dao;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy