zoukankan      html  css  js  c++  java
  • Configuration注解

    1.说明

    Configuration注解的出现就是为了替换xml文件
    java配置是通过@Configuration和@Bean注解实现了

    @Configuration注解,声明当前是一个配置类,相当于是spring中的一个xml文件
    @Bean 注解: 作用在方法上,声明当前方法的返回值是一个Bean

    2.使用范例

    数据库配置

    package fama.cost.dao.datasource;
    
    import com.baomidou.mybatisplus.annotation.DbType;
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.core.MybatisConfiguration;
    import com.baomidou.mybatisplus.core.config.GlobalConfig;
    import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
    import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
    import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
    import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
    import com.zaxxer.hikari.HikariDataSource;
    import fama.cost.common.utils.Constants;
    import fama.cost.dao.utils.PropertyUtils;
    import org.apache.ibatis.logging.stdout.StdOutImpl;
    import org.apache.ibatis.mapping.DatabaseIdProvider;
    import org.apache.ibatis.mapping.VendorDatabaseIdProvider;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.type.JdbcType;
    import org.mybatis.spring.SqlSessionTemplate;
    import org.mybatis.spring.annotation.MapperScan;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.core.io.support.ResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    
    import java.util.Properties;
    
    
    
    @Configuration
    @MapperScan("fama.cost.*.mapper")
    public class SpringConnectionFactory {
    
        private static final Logger logger = LoggerFactory.getLogger(SpringConnectionFactory.class);
    
        @Bean
        public MybatisPlusInterceptor paginationInterceptor() {
            MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
            interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
            return interceptor;
        }
    
        @Bean(destroyMethod="")
        public HikariDataSource dataSource() {
    
            HikariDataSource hikariDataSource = new HikariDataSource();
            
            hikariDataSource.setDriverClassName(PropertyUtils.getString(Constants.SPRING_DATASOURCE_DRIVER_CLASS_NAME));
            hikariDataSource.setJdbcUrl(PropertyUtils.getString(Constants.SPRING_DATASOURCE_URL));
            hikariDataSource.setUsername(PropertyUtils.getString(Constants.SPRING_DATASOURCE_USERNAME));
            hikariDataSource.setPassword(PropertyUtils.getString(Constants.SPRING_DATASOURCE_PASSWORD));
            hikariDataSource.setConnectionTestQuery(PropertyUtils.getString(Constants.SPRING_DATASOURCE_VALIDATION_QUERY,"SELECT 1"));
            hikariDataSource.setConnectionTimeout(PropertyUtils.getLong(Constants.SPRING_DATASOURCE_CONNECTION_TIMEOUT,30000));
            hikariDataSource.setMaximumPoolSize(PropertyUtils.getInt(Constants.SPRING_DATASOURCE_MAX_POOL_SIZE, 10));
            hikariDataSource.setIdleTimeout(PropertyUtils.getLong(Constants.SPRING_DATASOURCE_IDLE_TIMEOUT,180000));
            hikariDataSource.setAutoCommit(PropertyUtils.getBoolean(Constants.SPRING_DATASOURCE_DEFAULT_AUTO_COMMIT,true));
            hikariDataSource.setMaxLifetime(PropertyUtils.getLong(Constants.SPRING_DATASOURCE_MAX_LIFE_TIME,1800000));
            return hikariDataSource;
        }
    
        @Bean
        public DataSourceTransactionManager transactionManager() {
            return new DataSourceTransactionManager(dataSource());
        }
    
        @Bean
        public SqlSessionFactory sqlSessionFactory() throws Exception {
            MybatisConfiguration configuration = new MybatisConfiguration();
    //        configuration.setLogImpl(StdOutImpl.class);
            configuration.setMapUnderscoreToCamelCase(true);
            configuration.setCacheEnabled(false);
            configuration.setCallSettersOnNulls(true);
            configuration.setJdbcTypeForNull(JdbcType.NULL);
            configuration.addInterceptor(paginationInterceptor());
            MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
            sqlSessionFactoryBean.setConfiguration(configuration);
            sqlSessionFactoryBean.setDataSource(dataSource());
    
            GlobalConfig.DbConfig dbConfig = new GlobalConfig.DbConfig();
            dbConfig.setIdType(IdType.AUTO);
            GlobalConfig globalConfig = new GlobalConfig();
            globalConfig.setDbConfig(dbConfig);
            sqlSessionFactoryBean.setGlobalConfig(globalConfig);
            sqlSessionFactoryBean.setTypeAliasesPackage("fama.cost.dao.entity");
            ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
            sqlSessionFactoryBean.setMapperLocations(resolver.getResources("fama/cost/dao/mapper/*Mapper.xml"));
    //        sqlSessionFactoryBean.setTypeEnumsPackage("fama.cost.*.fama.cost.api.enums");
            sqlSessionFactoryBean.setTypeEnumsPackage("fama.cost.*.enums");
            sqlSessionFactoryBean.setDatabaseIdProvider(databaseIdProvider());
            return sqlSessionFactoryBean.getObject();
        }
    
        @Bean
        public SqlSession sqlSession() throws Exception{
            return new SqlSessionTemplate(sqlSessionFactory());
        }
    
        @Bean
        public DatabaseIdProvider databaseIdProvider(){
            DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
            Properties properties = new Properties();
            properties.setProperty("MySQL", "mysql");
            databaseIdProvider.setProperties(properties);
            return databaseIdProvider;
        }
    }
    
    

    2.sql 关系

    dataSource -> sqlSessionFactory -> sqlSession

    dataSource -> transactionManager

    原创:做时间的朋友
  • 相关阅读:
    Restful风格
    SpringMVC概念、原理及搭建
    Mybatis搭建
    HttpServletRequest、HttpServletResponse、Cookie、Session
    Servlet基础
    Spring整合Mybatis
    PHP代码标识
    IOC及Bean容器
    框架
    Spring概况
  • 原文地址:https://www.cnblogs.com/PythonOrg/p/14837300.html
Copyright © 2011-2022 走看看