All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.nutz.spring.boot.dao.NutzDaoAutoConfiguration Maven / Gradle / Ivy

There is a newer version: 3.4.1
Show newest version
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