赞
踩
1.spring-config-mybatis.xml文件加入方言支持(只列出必要字段)
- <!-- 配置方言 -->
- <bean name="databaseIdProvider" class="org.apache.ibatis.mapping.VendorDatabaseIdProvider" >
- <property name="properties">
- <map>
- <entry key="MySQL" value="mysql"></entry>
- <entry key="ORACLE" value="oracle"></entry>
- <entry key="Zenith" value="gaussdb"></entry><!-- 高斯数据库 -->
- </map>
- </property>
- </bean>
-
-
- <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
- <property name="databaseIdProvider" ref="databaseIdProvider" /> <!-- 配置方言 -->
- <!-- 其他配置 请参见项目代码 -->
- </bean>

配置说明:key:数据库类型-mybatis可以根据数据源类型自动识别
value:mapper xml文件中用到,后续说明
自动识别数据源类型备注:
MyBatis 接口:org.apache.ibatis.mapping.VendorDatabaseIdProvider#getDatabaseProductName
实现该接口 java.sql.DatabaseMetaData
Mysql实现类:com.mysql.jdbc.DatabaseMetaData#getDatabaseProductName : return "MySQL"
2.Mapper说明
2.1 因为mapper XML 文件不支持继承,(一个接口中的方法在XML文件中必须有实现-否则启动报错),
所以采用 Mapper.java 接口类继承的方式
3.Mapper支持 案例说明
数据库驱动 | 引入 新数据库驱动文件(高斯数据库) | ||||
数据源 变更 | <!-- GaussDB 高斯数据库不能有下边的配置,否则报错 --> | ||||
分页说明 | 经过测试 高斯数据库支持 limit 操作,如下: select id, trace_account, business_type, tache_type, industry_code from zt_trace_data_store where del_flag=0 and trace_account = 'jmm' order by create_time desc LIMIT 5, 5
MyBatis 分页插件可用:(com.github.pagehelper.PageInterceptor) | ||||
数据库-语法变更 | 部分预发差异
| ||||
案例-现有接口 |
| ||||
案例-现有接口实现Mapper |
| ||||
案例-Mapper类继承 | 继承类 空实现即可 - 目的是为了后续可以单独写 mapper.xml 切记:将项目中用到 TraceDataStoreExtMapper 的地方都替换成 TraceDataStoreExtDialectMapper | ||||
案例-Mapper.xml 实现 | 备注: 只比原始配置多了一个 databaseId="mysql" 当数据源是MySQL时会自动加载该配置 databaseId 说明: MyBatis 会加载不带 databaseId 属性和带有匹配当前数据库 databaseId 属性的所有语句。 | ||||
案例-测试结论 | 1.TraceDataStoreExtDialectMapper类对应的xml配置可以为空或只写符合业务的sql配置(打破了之前必须要填写所有接口方法的限制) 2.当databaseId跟数据源匹配时对应 sql xml 被加载 3.当databaseId跟数据源不匹配时 加载原始xml配置(被继承者的) 4.当 TraceDataStoreExtDialectMapper 的 databaseId 为空时加载继承者(TraceDataStoreExtDialectMapper)的 xml配置 (相当于重写) | ||||
改造目录结 | 多方言支持可以采用该方式-分别实现各自的 databaseId 对应的配置 已经过测试可行; |
99.java原生代码调用数据库简单案例(测试)
- package com.jd.bt.middle.service;
-
- import java.sql.*;
-
- public class GaussDBTest {
-
- private static Connection connection = null;
- private static PreparedStatement preState = null;
- private static ResultSet resultSet = null;
-
- private static final String username = "jr";
- private static final String passwd = "data****_123";
-
- private static Connection getConnection() {
- String driver = "com.huawei.gauss.jdbc.ZenithDriver"; //数据库连接描述符。
- String sourceURL = "jdbc:zenith:@127.0.0.1:3358?useSSL=true";
- Connection conn = null;
- try { //加载数据库驱动。
- Class.forName(driver).newInstance();
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- try {
- //创建数据库连接。
- conn = DriverManager.getConnection(sourceURL,username,passwd);
- System.out.println("Connection 成功!\n");
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- return conn;
- };
-
- private static void executeSqlQuery(String sql,Object ... args )throws Exception{
- connection = getConnection();
- preState = connection.prepareStatement(sql);
- if(null!=args){
- for(int i=1;i<=args.length;i++){
- Object value = args[i-1];
- if(value instanceof String){
- preState.setString(i, String.valueOf(value));//1是指sql语句中第一个?, 2是指第一个?的values值
- }else if(value instanceof Integer){
- preState.setInt(i,Integer.valueOf(value.toString()));
- }else if(value instanceof Long){
- preState.setLong(i,Long.valueOf(value.toString()));
- }else{
- throw new RuntimeException("参数格式异常");
- }
- }
- }
- boolean execute = preState.execute();
- System.out.println("执行结果:"+execute);
- resultSet = preState.getResultSet();
- }
-
- private static void printResult(String ... fieldName)throws Exception{
- try{
- System.out.println("\n================打印结果如下================");
- while (resultSet.next()) {
- for(String item : fieldName){
- String val = resultSet.getString(item);
- System.out.print(item+":"+ val + " ");
- }
- System.out.println(); //打印输出结果集
- }
- System.out.println("================打印结果如上================\n");
- }catch(Exception e){
- e.printStackTrace();
- }finally {
- try {
- if (resultSet!=null && !resultSet.isClosed()){
- resultSet.close();
- }
- if (connection!=null && !connection.isClosed()) {
- connection.close();
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
-
- public static void main(String[] args)throws Exception {
-
- try{
- // executeSql("select * from ADM_TABLESPACES where tablespace_name = ?","SYDB_RESOURCE" );
- // printResult("tablespace_name","datafile_count");
-
- // executeSqlQuery("select * from ZT_TRACE_DATA_STORE where id = ?",1 );
- // printResult("trace_account","sku_id");
-
- Long id = System.currentTimeMillis();
- executeSqlQuery("insert into zt_trace_data_store (id,trace_account,business_type,tache_type,industry_code,sku_id) values (?,?,?,?,?,?)",id,"ofc",3,4,"jdbiz",69000001);
- // printResult("trace_account","sku_id");
-
- executeSqlQuery("select * from ZT_TRACE_DATA_STORE where trace_account = ?", "ofc" );
- printResult("id","trace_account","industry_code");
- }catch(Exception e){
- e.printStackTrace();
- }
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。