Mybatis動態連線資料庫
阿新 • • 發佈:2020-09-19
目錄
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();