zoukankan      html  css  js  c++  java
  • Mybatis动态连接数据库

    Mybatis动态连接数据库

    根据url,用户名密码,手动连接数据库,而不是只能在项目启动的时候连接
    参考:

    /**
    * 获取SqlSessionFactory
    */
        private SqlSessionFactory getSqlSessionFactory(Long id) throws Exception {
            DbInfo dbInfo = getById(id);
            PooledDataSource dataSource = new PooledDataSource();
            dataSource.setDriver("com.mysql.cj.jdbc.Driver");
            dataSource.setUrl(String.format(JDBC_URL, dbInfo.getAddr(), dbInfo.getPort(), dbInfo.getDbName()));
            dataSource.setUsername(dbInfo.getUName());
            dataSource.setPassword(dbInfo.getUPass());
            ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
            //配置mapper路径
            Resource[] resources = resolver.getResources("classpath:/mapper/**/*.xml");
            MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
            sqlSessionFactoryBean.setMapperLocations(resources);
            sqlSessionFactoryBean.setDataSource(dataSource);
            sqlSessionFactoryBean.setConfiguration(new MybatisConfiguration());
            return sqlSessionFactoryBean.getObject();
        }
    

    调用

    • 调用mapper中的方法
        public List<JSONObject> getAllTable(Long id) throws Exception {
            SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(id);
            SqlSession sqlsession = sqlSessionFactory.openSession();
            DbInfoMapper mapper = sqlsession.getMapper(DbInfoMapper.class);
            List<JSONObject> sql = mapper.getList();
            return sql;
        }
    
    • 通用的mapper

    DynamicMapper

    public interface DynamicMapper {
        List<Map<String, Object>> selectSql(@Param("tableName") String tableName, @Param("fields") String fields, @Param("whereCondition") String whereCondition, @Param("orderCondition") String orderCondition);
    
        Integer insertSql(@Param("tableName") String tableName, @Param("result") String result);
    
        Integer updateSql(@Param("tableName") String tableName, @Param("result") String result, @Param("whereCondition") String whereCondition);
    
        Integer deleteSql(@Param("tableName") String tableName, @Param("whereCondition") String whereCondition);
    }
    

    DynamicMapper.xml

    <mapper namespace="com.camellibby.pangu.openapi.mapper.DynamicMapper">
    	<select id="selectSql" resultType="java.util.LinkedHashMap">
    		select ${fields} from ${tableName}
    		<if test="whereCondition != null and whereCondition != ''">
    			where ${whereCondition}
    		</if>
    		<if test="orderCondition != null and orderCondition != ''">
    			order by ${orderCondition}
    		</if>
    	</select>
    
    	<insert id="insertSql">
    		insert into ${tableName} ${result}
    	</insert>
    
    	<update id="updateSql">
    		UPDATE ${tableName} SET ${result} WHERE ${whereCondition}
    	</update>
    
    	<delete id="deleteSql">
    		delete from ${tableName} WHERE ${whereCondition}
    	</delete>
    </mapper>
    
    
            SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(id);
            SqlSession sqlsession = sqlSessionFactory.openSession();
            DbInfoMapper mapper = sqlsession.getMapper(DbInfoMapper.class);
            DynamicMapper dynamicMapper = sqlsession.getMapper(DynamicMapper.class);
            List<Map<String, Object>> users = dynamicMapper.selectSql(
                    "users",
                    "username, password, enabled",
                    "enabled=0",
                    "username"
            );
            users.forEach(user -> user.keySet().forEach(key -> System.out.println(key + ":" + user.get(key))));
    
            // 调用数据库操作方法
            sqlsession.close();
    
  • 相关阅读:
    Uva 11401 数三角形
    Uva 11538 象棋中的皇后
    数学基础——基本计数方法
    八数码问题
    python 爬poj.org的题目
    python 爬图片
    hiho 第135周 九宫
    Uva 11464 偶数矩阵
    BZOJ 1001 [BeiJing2006]狼抓兔子
    LA 3708 墓地雕塑
  • 原文地址:https://www.cnblogs.com/ziyue7575/p/13696435.html
Copyright © 2011-2022 走看看