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();
posted @ 2020-09-19 15:34  紫月java  阅读(2378)  评论(0编辑  收藏  举报