MVC框架实现8---Smart框架*Mapper类实现

package com.smart.mapping;

import com.smart.config.ActionDefine;

public interface ActionDefineMapper {

	public ActionDefine mapping( String actionName );
}


package com.smart.mapping;

import java.util.Map;
import java.util.Set;

import com.smart.config.ActionDefine;
import com.smart.context.SmartContext;

public class DefaultActionDefineMapper implements ActionDefineMapper {

	private static final DefaultActionDefineMapper mapper = new DefaultActionDefineMapper();
	
	private DefaultActionDefineMapper(){}
	
	@Override
	public ActionDefine mapping(String actionName) {
		Map<String,ActionDefine> actions = SmartContext.getContext().getConfigContext()
				.getActions();
		Set<String> keys = actions.keySet();
		for( String key : keys){
			ActionDefine ad = (ActionDefine)actions.get(key);
			if( actionName.equals(ad.getName())){
				return ad;
			}
		}
		return null;
	}

	public static DefaultActionDefineMapper getMapper() {
		return mapper;
	}
	
	

}

package com.smart.mapping;


public interface  ActionMapper {

	public Object mapping( String actionName );

}

package com.smart.mapping;

import com.smart.config.ActionDefine;
import com.smart.exception.NoSuchActionDefineException;
import com.smart.exception.ReflectionClassNotFoundException;
import com.smart.exception.ReflectionIllegalAccessException;
import com.smart.exception.ReflectionInstantiationException;

public class DefaultActionMapper implements ActionMapper {
	
	private final static DefaultActionMapper actionMapper = new DefaultActionMapper();

	private DefaultActionMapper(){}
	
	@Override
	public Object mapping(String actionName) {
		
		ActionDefine actionDefine = DefaultActionDefineMapper.getMapper().mapping(actionName);
		if( actionDefine == null )
			throw new NoSuchActionDefineException(" no such ActionDefine exits ");
		
		Object obj = null;
		try {
			obj = Class.forName(actionDefine.getClazz()).newInstance();
		} catch (InstantiationException e) {
			throw new ReflectionInstantiationException(e);
		} catch (IllegalAccessException e) {
			throw new ReflectionIllegalAccessException(e);
		} catch (ClassNotFoundException e) {
			throw new ReflectionClassNotFoundException(e);
		}
		
		return obj;
	}

	public static DefaultActionMapper getActionmapper() {
		return actionMapper;
	}
}

package com.smart.mapping;

import com.smart.forwarder.Forwarder;

public interface ForwarderMapper {
	public Forwarder mapping( String clazz,String name );
}

package com.smart.mapping;

import java.util.List;
import java.util.Map;

import com.smart.config.ActionDefine;
import com.smart.config.ForwarderDefine;
import com.smart.context.SmartContext;
import com.smart.forwarder.DefaultForwarder;
import com.smart.forwarder.Forwarder;

public class DefaultForwarderMapper implements ForwarderMapper {

	private final static DefaultForwarderMapper mapper = new DefaultForwarderMapper();
	
	private DefaultForwarderMapper(){}
	
	@Override
	public Forwarder mapping(String clazz,String name) {
		Map<String,ActionDefine> actions = SmartContext.getContext()
				.getConfigContext().getActions();
		ActionDefine ad = (ActionDefine)actions.get(clazz);
		List<ForwarderDefine> fds = ad.getFdList();
		for( ForwarderDefine fd : fds){
			if( fd.getName().equals(name)){
				return new DefaultForwarder(fd.getPath());
			}
		}
		
		return null;
	}

	public static DefaultForwarderMapper getMapper() {
		return mapper;
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是使用Ruoyi框架实现Sharding-JDBC分表的步骤: 1. 引入Sharding-JDBC依赖 在pom.xml文件中添加Sharding-JDBC的依赖: ```xml <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-core</artifactId> <version>4.1.1</version> </dependency> ``` 2. 配置数据源 在application.yml中配置数据源信息,如下所示: ```yaml spring: datasource: # 主库 master: url: jdbc:mysql://localhost:3306/db_master?serverTimezone=UTC&useSSL=false&characterEncoding=utf-8 username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver # 从库 slave: url: jdbc:mysql://localhost:3306/db_slave?serverTimezone=UTC&useSSL=false&characterEncoding=utf-8 username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver shardingsphere: datasource: names: master,slave # 配置主从库 master-slave-rules: ms: master-data-source-name: master slave-data-source-names: slave load-balance-algorithm-type: round_robin # 配置数据分片规则 sharding: tables: user_info: # 分库键 database-strategy: inline: sharding-column: user_id algorithm-expression: ds${user_id % 2} # 分表键 table-strategy: inline: sharding-column: order_id algorithm-expression: t_order_${order_id % 2} actual-data-nodes: master.user_info_$->{0..1} key-generator: column: id type: SNOWFLAKE ``` 3. 创建数据表 创建两个数据库db_master和db_slave,每个数据库中创建user_info表,表结构如下: ```sql CREATE TABLE `user_info` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `user_id` bigint(20) NOT NULL COMMENT '用户ID', `order_id` bigint(20) NOT NULL COMMENT '订单ID', `name` varchar(50) NOT NULL COMMENT '姓名', `age` int(11) NOT NULL COMMENT '年龄', `address` varchar(200) DEFAULT NULL COMMENT '地址', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户信息表'; ``` 4. 创建Mapper接口 在Ruoyi框架中,通常使用MyBatis-Plus进行数据库操作,因此需要创建对应的Mapper接口,如下所示: ```java public interface UserInfoMapper extends BaseMapper<UserInfo> { } ``` 5. 测试分库分表 在代码中使用Sharding-JDBC进行数据库操作,如下所示: ```java @Service public class UserServiceImpl implements IUserService { @Autowired private UserInfoMapper userInfoMapper; @Override public void addUser(UserInfo userInfo) { userInfoMapper.insert(userInfo); } @Override public List<UserInfo> getUserList() { return userInfoMapper.selectList(null); } } ``` 以上就是使用Ruoyi框架实现Sharding-JDBC分表的步骤。需要注意的是,Sharding-JDBC不支持使用MyBatis-Plus的自动填充功能,因此需要手动设置分表键的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值