template和数据源配置

本文探讨了模板在操作数据库中的角色,强调了为模板设置数据源的重要性,以确保能够正确连接到数据库,如RedisTemplate、HibernateTemplate和JdbcTemplate。同时,文章详细介绍了在配置Mybatis时遇到的问题,指出当SqlSessionFactory缺少Configuration配置时,会导致配置不生效,并分享了解决方案,即自定义数据源配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有关模板(template)的理解

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

@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();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值