spring工具类SpringContextUtils与DBConfig配置

@Component
public class SpringContextUtils implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SpringContextUtils.applicationContext = applicationContext;
    }

    public static Object getBean(String name) throws BeansException {
        try{
            return applicationContext.getBean(name);
        }catch(BeansException e){
            return null;
        }
    }

}

DBConfig:

/**
 * @author: yxz
 * @version: 1.0
 * @date: 
 */
public class DBConfig {

    private CommonHibernateDao mainHibernateDao = null;

    private CommonJdbcDao mainJdbcDao = null;

    private List<CommonHibernateDao> hibernateDaos = null;

    private List<CommonJdbcDao> jdbcDaos = null;

    private Map<String ,Integer> dbKeys = new HashMap<>();

    private static boolean useContext = false;
    private static final ThreadLocal<Integer> CURRENT_INDEX = new ThreadLocal<Integer>(){
        @Override
        protected Integer initialValue() {
            return 0;
        }
    };

    public static void clear(){
        useContext = true;
        CURRENT_INDEX.remove();
    }

    public void setDbKeys(Map<String, Integer> dbKeys) {
        this.dbKeys = dbKeys;
    }

    public int getDbIndex(String dbKey){
        if(this.dbKeys==null){
            return -1;
        }
        if(this.dbKeys.containsKey(dbKey)){
            return this.dbKeys.get(dbKey);
        }
        return -1;
    }

    public void setSessionFactory(SessionFactory sessionFactory) {

        mainHibernateDao = new CommonHibernateDaoImpl();
        mainHibernateDao.setSessionFactory(sessionFactory);

        hibernateDaos = new ArrayList<CommonHibernateDao>();
        hibernateDaos.add(mainHibernateDao);

        if (mainJdbcDao == null) {
            DataSource dataSource = SessionFactoryUtils.getDataSource(sessionFactory);
            if (dataSource != null) {
                setDataSource(dataSource);
            }
        }

    }

    public void setDataSource(DataSource dataSource) {

        mainJdbcDao = new CommonJdbcDaoImpl();
        mainJdbcDao.setDataSource(dataSource);
        mainJdbcDao.setDataBaseType(checkDataBaseType(dataSource));

        jdbcDaos = new ArrayList<CommonJdbcDao>();
        jdbcDaos.add(mainJdbcDao);

    }

    public void setSessionFactorys(List<SessionFactory> sessionFactorys) {
        List<DataSource> dataSources = new ArrayList<>();
        boolean noDs = (jdbcDaos==null || jdbcDaos.size() == 0);
        if (sessionFactorys.size() > 0) {
            hibernateDaos = new ArrayList<CommonHibernateDao>();
            for (int i = 0; i < sessionFactorys.size(); i++) {
                CommonHibernateDao commonHibernateDao = new CommonHibernateDaoImpl();
                commonHibernateDao.setSessionFactory(sessionFactorys.get(i));
                hibernateDaos.add(commonHibernateDao);
                if (i == 0) {
                    mainHibernateDao = commonHibernateDao;
                }
                if (noDs) {
                    DataSource dataSource = SessionFactoryUtils.getDataSource(sessionFactorys.get(i));
                    if (dataSource != null) {
                        dataSources.add(dataSource);
                    }
                }
            }

            if (noDs) {
                setDataSources(dataSources);
            }
        }
    }

    public void setDataSources(List<DataSource> dataSources) {
        if (dataSources.size() > 0) {
            jdbcDaos = new ArrayList<CommonJdbcDao>();
            for (int i = 0; i < dataSources.size(); i++) {
                CommonJdbcDao commonJdbcDao = new CommonJdbcDaoImpl();
                commonJdbcDao.setDataSource(dataSources.get(i));
                commonJdbcDao.setDataBaseType(checkDataBaseType(dataSources.get(i)));
                jdbcDaos.add(commonJdbcDao);
                if (i == 0) {
                    mainJdbcDao = commonJdbcDao;
                }
            }
        }
    }


    /**
     * 判断数据库类型
     *
     * @param dataSource
     * @return
     */
    DataBaseType checkDataBaseType(DataSource dataSource) {
        Connection connection = null;
        try {
            connection = dataSource.getConnection();
            String driveClass = connection.getMetaData().getDriverName().toLowerCase();
            if (driveClass.contains("mysql")) {
                return DataBaseType.MYSQL;
            } else if (driveClass.contains("oracle")) {
                return DataBaseType.ORACLE;
            } else {
                return DataBaseType.UNDEFINE;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(connection!=null){
                try{
                    connection.close();
                }catch(Exception ignore){
                }
            }
        }
        return DataBaseType.UNKNOWN;
    }

    CommonJdbcDao getJdbcDao(int dbIndex) {
        if (dbIndex < 0) {
            dbIndex = CURRENT_INDEX.get();
            if(dbIndex==0){
                return mainJdbcDao;
            }
        }
        if (dbIndex >= jdbcDaos.size()) {
            throw new DatabaseException("无效的数据源索引号");
        }
        return jdbcDaos.get(dbIndex);
    }

    CommonHibernateDao getHibernateDao(int dbIndex) {
        if (dbIndex < 0) {
            dbIndex = CURRENT_INDEX.get();
            if(dbIndex==0){
                return mainHibernateDao;
            }
        }
        if (dbIndex >= hibernateDaos.size()) {
            throw new DatabaseException("无效的数据源索引号");
        }
        return hibernateDaos.get(dbIndex);
    }


    /**
     * 切换数据库
     *
     * @param dbIndex
     */
    int switchTo(int dbIndex) {
        int hSize = hibernateDaos.size();
        int jSize = jdbcDaos.size();
        if (dbIndex < 0 || (dbIndex >= jSize && dbIndex >= hSize)) {
            throw new DatabaseException("无效的数据源索引号");
        }
        int oldDB = CURRENT_INDEX.get();
        CURRENT_INDEX.set(dbIndex);
        return oldDB;
    }

    /**
     * 切换到主库
     */
    @Deprecated
    void switchToMain() {
        reset();
    }

    /**
     * 切换到主库
     */
    void reset() {
        CURRENT_INDEX.set(0);
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mybatis-Plus是一个优秀的Mybatis增强工具,它可以极大地简化Mybatis的开发流程,提高开发效率。下面是一个基于Mybatis-Plus的工具类示例: ```java public class MybatisPlusUtils { /** * 获取MybatisPlus的全局配置对象 * @return GlobalConfig对象 */ public static GlobalConfig getGlobalConfig() { GlobalConfig globalConfig = new GlobalConfig(); //设置主键自增策略 globalConfig.setSqlInjector(new AutoSqlInjector()); globalConfig.setDbConfig(new GlobalConfig.DbConfig() .setLogicDeleteValue("1") .setLogicNotDeleteValue("0") .setIdType(IdType.AUTO)); return globalConfig; } /** * 获取MybatisPlus的数据源对象 * @param driver 数据库驱动 * @param url 数据库连接URL * @param username 数据库用户名 * @param password 数据库密码 * @return DataSource对象 */ public static DataSource getDataSource(String driver, String url, String username, String password) { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(driver); dataSource.setUrl(url); dataSource.setUsername(username); dataSource.setPassword(password); return dataSource; } /** * 获取MybatisPlus的SqlSessionFactory对象 * @param dataSource 数据源对象 * @param globalConfig 全局配置对象 * @return SqlSessionFactory对象 */ public static SqlSessionFactory getSqlSessionFactory(DataSource dataSource, GlobalConfig globalConfig) { MybatisConfiguration configuration = new MybatisConfiguration(); //开启驼峰命名规则 configuration.setMapUnderscoreToCamelCase(true); //将全局配置对象添加到Mybatis配置对象中 configuration.setGlobalConfig(globalConfig); SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); return builder.build(configuration, new MybatisPlusInterceptor[]{new PaginationInterceptor()}, dataSource); } /** * 获取MybatisPlus的SqlSession对象 * @param sqlSessionFactory SqlSessionFactory对象 * @return SqlSession对象 */ public static SqlSession getSqlSession(SqlSessionFactory sqlSessionFactory) { return sqlSessionFactory.openSession(); } } ``` 使用该工具类,可以方便地获取Mybatis-Plus所需的全局配置、数据源、SqlSessionFactory和SqlSession对象。在使用时,只需要传入相应的参数即可。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值