这里分享一下Springboot整合phoenix+mybatis的简单示例,项目结构如下:
1.首先在hbase中创建一张表,sql语句如下:
CREATE TABLE IF NOT EXISTS "user"(
id VARCHAR primary key,
username VARCHAR,
age VARCHAR);
2.在pom.xml中引入相应的坐标;
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.0</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.phoenix/phoenix-core -->
<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-core</artifactId>
<version>4.14.0-HBase-1.2</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
3.在application.yml中导入相应的配置;
spring:
datasource:
driverClassName: org.apache.phoenix.jdbc.PhoenixDriver
url:jdbc:phoenix: IP地址:2181
mybatis:
mapper-locations: classpath:mappers/*.xml
4.User实体类代码如下:
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {
private String userId;
private String userName;
private String age;
}
5.UserMapper.xml代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.demo.mapper.UserMapper">
<resultMap id="userMap" type="com.demo.pojo.User">
<id column="id" property="userId"></id>
<result column="username" property="userName"></result>
<result column="age" property="age"></result>
</resultMap>
<update id="addUser" parameterType="com.demo.pojo.User">
UPSERT INTO "user" VALUES (#{userId}, #{userName}, #{age})
</update>
<select id="getUserById" parameterType="String" resultMap="userMap">
SELECT * FROM "user" WHERE id=#{userId}
</select>
<select id="getAllUser" resultMap="userMap">
SELECT * FROM "user"
</select>
</mapper>
6.UserMapper接口代码如下:
@Mapper
public interface UserMapper {
int addUser(User user);
User getUserById(String userId);
List<User> getAllUser();
}
7.启动类:
@SpringBootApplication
public class Appstart {
public static void main(String[] args) {
ConfigurableApplicationContext app = SpringApplication.run(Appstart.class, args);
UserMapper userMapper = app.getBean(UserMapper.class);
//添加
userMapper.addUser(new User("1","xiaochen","7"));
userMapper.addUser(new User("2","xiaowu","7"));
userMapper.addUser(new User("3","xiaoli","7"));
//查询某个用户
User userById = userMapper.getUserById("1");
System.out.println(userById);
//查询所有
List<User> allUser = userMapper.getAllUser();
System.out.println(allUser);
}
}
总结:整体感觉和整合mysql、oracle这些数据库类似,修改驱动,url及相应sql即可;但整合phoenix有一点不好,就是坐标引入了好多jar包。最后处理一下日志中的报错:
报错1:
找不到winutils.exe,下载hadoop-common-2.2.0-bin-master.zip 解压后,在代码中添加如下系统配置:
System.setProperty("hadoop.home.dir","hadoop-common的目录\\hadoop-common-2.2.0-bin-master");
报错2:
找到ConnectionQueryServicesImpl 拷贝一份该类源码,复制到项目中,注释掉该日志打印代码。