天天看点

springboot中使用mybatis封装phoenix

使用hbase api来访问hbase的时候,如果字段太多,写起来的是很枯燥的

使用phoenix访问hbase,可以支持sql,相当于jdbc。用mybatis封装phoenix后,可以自动管理字段的映射,在一表超级多字段的情况下,可以减少工作量。

mybatis封装phoenix只需要一个配置类就可以搞定了

本项目是使用maven构建的

这里使用的是mybatis-plus

首先添加依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <version>2.0.3</version>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.0.6</version>
        </dependency>

        <dependency>
            <groupId>org.apache.phoenix</groupId>
            <artifactId>phoenix-core</artifactId>
            <version>4.13.0-HBase-1.3</version>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.0.4.Final</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>
           

创建一个config类来配置

@Configuration
@PropertySource(value = "classpath:application.yml")
@MapperScan(basePackages = {
        "com.ma.phoenix.test.dao"
    },
    sqlSessionFactoryRef = HBasePhoenixDataSourceConfig.HBASEPHOENIX_SQL_SESSION_FACTORY
)
public class HBasePhoenixDataSourceConfig {

    static final String HBASEPHOENIX_SQL_SESSION_FACTORY = "hbasePhoenixSqlSessionFactory";
    static final String MAPPER_LOCATION = "classpath:com/ma/phoenix/test/dao/*.xml";


    @Value("${spring.datasource.phoenix.jdbc-url}")
    private String url;

    @Value(value = "${spring.datasource.phoenix.driver-class-name}")
    private String driverClass;


    /**
     * 1.获取数据源
     * @return
     */
    @Bean(name = "hBasePhoenixDataSource")
    public DataSource hBasePhoenixDataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        //dataSource.setConnectProperties(properties);
        dataSource.setUrl(url);
        dataSource.setDriverClassName(driverClass);
        return dataSource;
    }

    /**
     * 2.创建事务管理
     * @param dataSource
     * @return
     */
    @Bean(name = "hbasePhoenixTransactionManager")
    public DataSourceTransactionManager hbasePhoenixTransactionManager(
            @Qualifier("hBasePhoenixDataSource")DataSource dataSource){
        return new DataSourceTransactionManager(dataSource);
    }

    /**
     * 3.创建 session工厂
     * @param dataSource
     * @return
     * @throws Exception
     */
    @Bean(name = HBASEPHOENIX_SQL_SESSION_FACTORY)
    public SqlSessionFactory hbasePhoenixSqlSessionFactory(
            @Qualifier("hBasePhoenixDataSource")DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources(HBasePhoenixDataSourceConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }

    public static void main(String[] args) throws IOException {
        Resource[] resources = new PathMatchingResourcePatternResolver()
                .getResources(HBasePhoenixDataSourceConfig.MAPPER_LOCATION);
        System.out.println(resources.length);
    }


}
           

在配置文件application.yml中添加进数据源信息

spring:
  datasource:
    phoenix:
      jdbc-url: jdbc:phoenix:xx.xx.xx.xx
      driver-class-name: org.apache.phoenix.jdbc.PhoenixDriver
           

xx.xx.xx.xx 是hbase所在的服务器ip地址

springboot中使用mybatis封装phoenix

@Configuration 是一定要的注解

@PropertySource(value = “classpath:application.yml”) 这个用来获取资源文件,可以是properties文件

@MapperScan中

basePackages 用来指定映射接口的包路径,可以写多个,用逗号","分割开

sqlSessionFactoryRef 指定创建的sqlSessionFactory

springboot中使用mybatis封装phoenix

MybatisSqlSessionFactoryBean 还可以配置其他参数,例如指定mybatis的总配置文件的路径等等

main方法是用来获取MAPPER_LOCATION 下的xml映射文件数量的,由于不是放在资源文件夹中,需要在pom.xml文件中添加配置

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>
</build>
           

到这里就ok啦

继续阅读