HBase 系列(十一)—— Spring/Spring Boot + Mybatis + Phoenix 整合
程序员文章站
2022-10-26 08:10:24
一、前言 使用 Spring+Mybatis 操作 Phoenix 和操作其他的关系型数据库(如 Mysql,Oracle)在配置上是基本相同的,下面会分别给出 Spring/Spring Boot 整合步骤,完整代码见本仓库: + "Spring + Mybatis + Phoenix" + "S ......
一、前言
使用 spring+mybatis 操作 phoenix 和操作其他的关系型数据库(如 mysql,oracle)在配置上是基本相同的,下面会分别给出 spring/spring boot 整合步骤,完整代码见本仓库:
二、spring + mybatis + phoenix
2.1 项目结构
2.2 主要依赖
除了 spring 相关依赖外,还需要导入 phoenix-core
和对应的 mybatis 依赖包
<!--mybatis 依赖包--> <dependency> <groupid>org.mybatis</groupid> <artifactid>mybatis-spring</artifactid> <version>1.3.2</version> </dependency> <dependency> <groupid>org.mybatis</groupid> <artifactid>mybatis</artifactid> <version>3.4.6</version> </dependency> <!--phoenix core--> <dependency> <groupid>org.apache.phoenix</groupid> <artifactid>phoenix-core</artifactid> <version>4.14.0-cdh5.14.2</version> </dependency>
2.3 数据库配置文件
在数据库配置文件 jdbc.properties
中配置数据库驱动和 zookeeper 地址
# 数据库驱动 phoenix.driverclassname=org.apache.phoenix.jdbc.phoenixdriver # zookeeper地址 phoenix.url=jdbc:phoenix:192.168.0.105:2181
2.4 配置数据源和会话工厂
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 开启注解包扫描--> <context:component-scan base-package="com.heibaiying.*"/> <!--指定配置文件的位置--> <context:property-placeholder location="classpath:jdbc.properties"/> <!--配置数据源--> <bean id="datasource" class="org.springframework.jdbc.datasource.drivermanagerdatasource"> <!--phoenix 配置--> <property name="driverclassname" value="${phoenix.driverclassname}"/> <property name="url" value="${phoenix.url}"/> </bean> <!--配置 mybatis 会话工厂 --> <bean id="sqlsessionfactory" class="org.mybatis.spring.sqlsessionfactorybean"> <property name="datasource" ref="datasource"/> <!--指定 mapper 文件所在的位置--> <property name="mapperlocations" value="classpath*:/mappers/**/*.xml"/> <property name="configlocation" value="classpath:mybatisconfig.xml"/> </bean> <!--扫描注册接口 --> <!--作用:从接口的基础包开始递归搜索,并将它们注册为 mapperfactorybean(只有至少一种方法的接口才会被注册;, 具体类将被忽略)--> <bean class="org.mybatis.spring.mapper.mapperscannerconfigurer"> <!--指定会话工厂 --> <property name="sqlsessionfactorybeanname" value="sqlsessionfactory"/> <!-- 指定 mybatis 接口所在的包 --> <property name="basepackage" value="com.heibaiying.dao"/> </bean> </beans>
2.5 mybtais参数配置
新建 mybtais 配置文件,按照需求配置额外参数, 更多 settings 配置项可以参考
<?xml version="1.0" encoding="utf-8" ?> <!doctype configuration public "-//mybatis.org//dtd config 3.0//en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!-- mybatis 配置文件 --> <configuration> <settings> <!-- 开启驼峰命名 --> <setting name="mapunderscoretocamelcase" value="true"/> <!-- 打印查询 sql --> <setting name="logimpl" value="stdout_logging"/> </settings> </configuration>
2.6 查询接口
public interface populationdao { list<uspopulation> queryall(); void save(uspopulation uspopulation); uspopulation querybystateandcity(@param("state") string state, @param("city") string city); void deletebystateandcity(@param("state") string state, @param("city") string city); }
<!doctype mapper public "-//mybatis.org//dtd mapper 3.0//en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.heibaiying.dao.populationdao"> <select id="queryall" resulttype="com.heibaiying.bean.uspopulation"> select * from us_population </select> <insert id="save"> upsert into us_population values( #{state}, #{city}, #{population} ) </insert> <select id="querybystateandcity" resulttype="com.heibaiying.bean.uspopulation"> select * from us_population where state=#{state} and city = #{city} </select> <delete id="deletebystateandcity"> delete from us_population where state=#{state} and city = #{city} </delete> </mapper>
2.7 单元测试
@runwith(springrunner.class) @contextconfiguration({"classpath:springapplication.xml"}) public class populationdaotest { @autowired private populationdao populationdao; @test public void queryall() { list<uspopulation> uspopulationlist = populationdao.queryall(); if (uspopulationlist != null) { for (uspopulation uspopulation : uspopulationlist) { system.out.println(uspopulation.getcity() + " " + uspopulation.getpopulation()); } } } @test public void save() { populationdao.save(new uspopulation("tx", "dallas", 66666)); uspopulation uspopulation = populationdao.querybystateandcity("tx", "dallas"); system.out.println(uspopulation); } @test public void update() { populationdao.save(new uspopulation("tx", "dallas", 99999)); uspopulation uspopulation = populationdao.querybystateandcity("tx", "dallas"); system.out.println(uspopulation); } @test public void delete() { populationdao.deletebystateandcity("tx", "dallas"); uspopulation uspopulation = populationdao.querybystateandcity("tx", "dallas"); system.out.println(uspopulation); } }
三、springboot + mybatis + phoenix
3.1 项目结构
3.2 主要依赖
<!--spring 1.5 x 以上版本对应 mybatis 1.3.x (1.3.1) 关于更多 spring-boot 与 mybatis 的版本对应可以参见 <a href="http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/">--> <dependency> <groupid>org.mybatis.spring.boot</groupid> <artifactid>mybatis-spring-boot-starter</artifactid> <version>1.3.2</version> </dependency> <!--phoenix core--> <dependency> <groupid>org.apache.phoenix</groupid> <artifactid>phoenix-core</artifactid> <version>4.14.0-cdh5.14.2</version> </dependency> <dependency>
spring boot 与 mybatis 版本的对应关系:
mybatis-spring-boot-starter 版本 | mybatis-spring 版本 | spring boot 版本 |
---|---|---|
1.3.x (1.3.1) | 1.3 or higher | 1.5 or higher |
1.2.x (1.2.1) | 1.3 or higher | 1.4 or higher |
1.1.x (1.1.1) | 1.3 or higher | 1.3 or higher |
1.0.x (1.0.2) | 1.2 or higher | 1.3 or higher |
3.3 配置数据源
在 application.yml 中配置数据源,spring boot 2.x 版本默认采用 hikari 作为数据库连接池,hikari 是目前 java 平台性能最好的连接池,性能好于 druid。
spring: datasource: #zookeeper 地址 url: jdbc:phoenix:192.168.0.105:2181 driver-class-name: org.apache.phoenix.jdbc.phoenixdriver # 如果不想配置对数据库连接池做特殊配置的话,以下关于连接池的配置就不是必须的 # spring-boot 2.x 默认采用高性能的 hikari 作为连接池 更多配置可以参考 https://github.com/brettwooldridge/hikaricp#configuration-knobs-baby type: com.zaxxer.hikari.hikaridatasource hikari: # 池中维护的最小空闲连接数 minimum-idle: 10 # 池中最大连接数,包括闲置和使用中的连接 maximum-pool-size: 20 # 此属性控制从池返回的连接的默认自动提交行为。默认为 true auto-commit: true # 允许最长空闲时间 idle-timeout: 30000 # 此属性表示连接池的用户定义名称,主要显示在日志记录和 jmx 管理控制台中,以标识池和池配置。 默认值:自动生成 pool-name: custom-hikari #此属性控制池中连接的最长生命周期,值 0 表示无限生命周期,默认 1800000 即 30 分钟 max-lifetime: 1800000 # 数据库连接超时时间,默认 30 秒,即 30000 connection-timeout: 30000 # 连接测试 sql 这个地方需要根据数据库方言差异而配置 例如 oracle 就应该写成 select 1 from dual connection-test-query: select 1 # mybatis 相关配置 mybatis: configuration: # 是否打印 sql 语句 调试的时候可以开启 log-impl: org.apache.ibatis.logging.stdout.stdoutimpl
3.4 新建查询接口
上面 spring+mybatis 我们使用了 xml 的方式来写 sql,为了体现 mybatis 支持多种方式,这里使用注解的方式来写 sql。
@mapper public interface populationdao { @select("select * from us_population") list<uspopulation> queryall(); @insert("upsert into us_population values( #{state}, #{city}, #{population} )") void save(uspopulation uspopulation); @select("select * from us_population where state=#{state} and city = #{city}") uspopulation querybystateandcity(string state, string city); @delete("delete from us_population where state=#{state} and city = #{city}") void deletebystateandcity(string state, string city); }
3.5 单元测试
@runwith(springrunner.class) @springboottest public class populationtest { @autowired private populationdao populationdao; @test public void queryall() { list<uspopulation> uspopulationlist = populationdao.queryall(); if (uspopulationlist != null) { for (uspopulation uspopulation : uspopulationlist) { system.out.println(uspopulation.getcity() + " " + uspopulation.getpopulation()); } } } @test public void save() { populationdao.save(new uspopulation("tx", "dallas", 66666)); uspopulation uspopulation = populationdao.querybystateandcity("tx", "dallas"); system.out.println(uspopulation); } @test public void update() { populationdao.save(new uspopulation("tx", "dallas", 99999)); uspopulation uspopulation = populationdao.querybystateandcity("tx", "dallas"); system.out.println(uspopulation); } @test public void delete() { populationdao.deletebystateandcity("tx", "dallas"); uspopulation uspopulation = populationdao.querybystateandcity("tx", "dallas"); system.out.println(uspopulation); } }
附:建表语句
上面单元测试涉及到的测试表的建表语句如下:
create table if not exists us_population ( state char(2) not null, city varchar not null, population bigint constraint my_pk primary key (state, city)); -- 测试数据 upsert into us_population values('ny','new york',8143197); upsert into us_population values('ca','los angeles',3844829); upsert into us_population values('il','chicago',2842518); upsert into us_population values('tx','houston',2016582); upsert into us_population values('pa','philadelphia',1463281); upsert into us_population values('az','phoenix',1461575); upsert into us_population values('tx','san antonio',1256509); upsert into us_population values('ca','san diego',1255540); upsert into us_population values('ca','san jose',912332);
更多大数据系列文章可以参见 github 开源项目: 大数据入门指南
上一篇: Linux指令(时间日期类)
下一篇: springboot2.0(二)
推荐阅读
-
Spring Boot整合mybatis并自动生成mapper和实体实例解析
-
Spring boot怎么整合Mybatis
-
spring boot整合mybatis+mybatis-plus的示例代码
-
Spring + Spring Boot + MyBatis + MongoDB的整合教程
-
Spring Boot整合mybatis(一)实例代码
-
spring Boot与Mybatis整合优化详解
-
Spring Boot + Kotlin整合MyBatis的方法教程
-
Spring Boot+Mybatis的整合过程
-
Spring boot怎么整合Mybatis
-
spring boot整合mybatis+mybatis-plus的示例代码