spring4.0.2+mybatis3.2.4+sharding-jdbc1.4.2实现分库分表、读写分离及事物支持

当当sharding-jdbc的使用公司挺多的,今天就整理下sharding-jdbc最新的配置及使用,包含实现分库分表、主从及事物支持范围。

1、pom文件引用


		UTF-8
	    4.0.2.RELEASE
		3.2.4
	    1.4.2
	


			com.dangdang
			sharding-jdbc-core
			${sharding-jdbc.version}
		
		
			com.dangdang
			sharding-jdbc-config-spring
			${sharding-jdbc.version}
		
2、spring配置
       spring-database.xml



	
		
	
		
		
		

		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
	
	
	
		
		
		

		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
	


	
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
	

	
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
	
	


     spring-sharding.xml
     


    
	

    
    
    
        
        
    
    
    
     
        
        
    

    
    

    

    

    
        
            
                
            
        
    

    
    
        
    

    
		



    3、分库规则实现
        
 /**
     * sql 中关键字 匹配符为 =的时候,表的路由函数
     * @param availableTargetNames
     * @param shardingValue
     * @return
     */
    public String doEqualSharding(Collection availableTargetNames, ShardingValue shardingValue) {
        for (String each : availableTargetNames) {
            if (each.endsWith(shardingValue.getValue() % 2 + "")) {
                return each;
            }
        }
        throw new IllegalArgumentException();
    }

    /**
     * sql 中关键字 匹配符为 in 的时候,表的路由函数
     * @param availableTargetNames
     * @param shardingValue
     * @return
     */
    public Collection doInSharding(Collection availableTargetNames, ShardingValue shardingValue) {
        Collection result = new LinkedHashSet(availableTargetNames.size());
        for (Integer value : shardingValue.getValues()) {
            for (String tableName : availableTargetNames) {
                if (tableName.endsWith(value % 2 + "")) {
                    result.add(tableName);
                }
            }
        }
        return result;
    }

      分表规则实现:
       
 /**
     * sql 中 = 操作时,table的映射
     * @param tableNames
     * @param shardingValue
     * @return
     */
    public String doEqualSharding(Collection tableNames, ShardingValue shardingValue) {
        for (String each : tableNames) {
            if (each.endsWith(shardingValue.getValue() % 3 + "")) {
                return each;
            }
        }
        throw new IllegalArgumentException();
    }

    /**
     * sql 中 in 操作时,table的映射
     * @param tableNames
     * @param shardingValue
     * @return
     */
    public Collection doInSharding(Collection tableNames, ShardingValue shardingValue) {
        Collection result = new LinkedHashSet(tableNames.size());
        for (Integer value : shardingValue.getValues()) {
            for (String tableName : tableNames) {
                if (tableName.endsWith(value % 3 + "")) {
                    result.add(tableName);
                }
            }
        }
        return result;
    }

    本来想详细描述下的, 但是时间有限,这里我就把demo分享给大家,大家有疑问的地方,我们一起探讨沟通。如不正确的地方,也希望能留言指正,谢谢  demo下载地址:http://download.csdn.net/download/yufei_java/10140530   

你可能感兴趣的:(中间件,分)