主要思路:
DataSource --> SqlSessionFactory --> SqlSessionTemplate
第一方式:
定义多套 DataSource --> SqlSessionFactory --> SqlSessionTemplate
https://blog.csdn.net/u012343297/article/details/78835185
每套放置在不同的 package 下面,使用来确定bean @Qualifier
https://blog.csdn.net/neosmith/article/details/61202084
使用 AOP 动态切换
第二种方式:
在不影响原来的一套的设计前提下,增加对另一个库的访问。
1 配置一个新的 SqlSessionTemplate
@Bean(name = "uumsqlSessionTemplate") public SqlSessionTemplate uumsqlSessionTemplate() throws Exception { Properties props = new Properties(); props.put("driverClassName", driverClassName); props.put("url", dbUrl); props.put("username", userName); props.put("password", password); DataSource dataSource = DruidDataSourceFactory.createDataSource(props); SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:com/mapping/*.xml")); bean.setDataSource(dataSource); return new SqlSessionTemplate(bean.getObject()); }
2. 写一个 mapper, 使用 注解@Select 或者 写一个对应的 xml
public interface CustomUUMMapper { @Select("SELECT role.`name` as description, role.`code` as rolename from uum_t_role as role where role.id in " + "(SELECT ur.role_id from uum_r_user_role as ur where ur.user_id in " + "(SELECT u.id from uum_t_user as u where u.username = #{username})" + ")") List<UUMUserRole> selectUserRolesByName(@Param("username")String username); }
3. 写一个 servcie ,使用上述 mapper, 此过程需要用到 第一步创建的 @bean SqlSessionTemplate
@Service
public class UUMService {
CustomUUMMapper uumMapper;
@Autowired
@Qualifier("uumsqlSessionTemplate")
SqlSessionTemplate sqlUUMSessionTemplate;
/**
*
*/
@PostConstruct
public void init() {
sqlUUMSessionTemplate.getConfiguration().addMapper(CustomUUMMapper.class);
uumMapper = sqlUUMSessionTemplate.getMapper(CustomUUMMapper.class);
}
/**
*
* @param name
* @return
*/
public List<UUMUserRole> getAllRolesByUserName(String name){
return uumMapper.selectUserRolesByName(name);
}
}
Done......