template和数据源配置

有关模板(template)的理解

一般使用模板(template)来操作数据库的话,都需要给template设置一个连接工厂,告诉这个模板从什么地方获取连接,比如像RedisTemplate、HibernateTemplate(hibernate3)

@Bean
public RedisTemplate<String, Product> redisTemplate(RedisConnectionFactory cf){
	RedisTemplate<String, Product> redis = new RedisTemplate<>();
	redis.setConnectionFactory(cf);
	return redis;
}
// HibernateTemplate的构造函数
public HibernateTemplate(SessionFactory sessionFactory) {
        this.setSessionFactory(sessionFactory);        
}

// 同时Session工厂bean的配置如下
 @Bean
 public LocalSessionFactoryBean sessionFactory(DataSource dataSource){
      LocalSessionFactoryBean sfb = new LocalSessionFactoryBean();
      sfb.setDataSource(dataSource);
      sfb.setMappingResources(new String[]{"Spitter.hbm.xml"});
      Properties props = new Properties();
      props.setProperty("dialect", "org.hibernate.dialect.H2Dialcet");
      sfb.setHibernateProperties(props);
      return sfb;
  }
// 使用LocalSessionFactoryBean来构建HibernateTemplate

配置mybatis

遇到一个问题,就是mybatis的配置<setting name="mapUnderscoreToCamelCase" value="true" />不生效,经过分析,发现之前的代码中配置过SqlSessionFactory,但是没有给SqlSessionFactory配置Configuration,所以不生效。最后自己写了个数据源配置。这种写法参考于
https://gitee.com/dlutysc/springboot-learning-example/tree/master/springboot-mybatis-mutil-datasource

//@Configuration
@ConfigurationProperties(prefix = "my.datasource")
@MapperScan(basePackages = {DataSourceConfig.PACKAGE}, sqlSessionFactoryRef = "mySqlSessionFactory")
@Component
@Data
public class DataSourceConfig {

    static final String PACKAGE = "gov.df.myepay.dao";
    static final String MAPPER_LOCATION = "classpath:gov/df/myepay/dao/*.xml";
//    @Value("${my.datasource.jdbcUrl}")
    private String jdbcurl;

//    @Value("${my.datasource.username}")
    private String username;

//    @Value("${my.datasource.password}")
    private String password;

//    @Value("${my.datasource.driverClassName}")
    private String driverClassName;

//    @Value("${my.datasource.maximum-pool-size}")
    private int maximumPoolSize;

//    @Value("${my.datasource.minimum-idle}")
    private int minimumIdle;

    @Bean(name = "myDataSource")
    public DataSource myDataSource() {
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setJdbcUrl(jdbcurl);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        dataSource.setMaximumPoolSize(maximumPoolSize);
        dataSource.setMinimumIdle(minimumIdle);
        return dataSource;
    }

    @Bean(name = "myTransactionManager")
    public DataSourceTransactionManager clusterTransactionManager() {
        return new DataSourceTransactionManager(myDataSource());
    }

    @Bean(name = "mySqlSessionFactory")
    public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("myDataSource") DataSource myDataSource)
            throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(myDataSource);
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources(DataSourceConfig.MAPPER_LOCATION));
        org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
        configuration.setMapUnderscoreToCamelCase(true);
        sessionFactory.setConfiguration(configuration);
        return sessionFactory.getObject();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_40804971/article/details/108187026
今日推荐