使用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地址

@Configuration 是一定要的注解
@PropertySource(value = “classpath:application.yml”) 这个用来获取资源文件,可以是properties文件
@MapperScan中
basePackages 用来指定映射接口的包路径,可以写多个,用逗号","分割开
sqlSessionFactoryRef 指定创建的sqlSessionFactory
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啦