私はSQLに外部的にSQLを格納するいくつかのBean定義をXMLに持っています。私はMap<String,String>
としてKotlinにそれらを注入したいと思っていますが、これまでのところ私はそれをMap<Any,Any>
として注入することができました。ここでタイプの安全を確保する方法はありますか? Map<Any,Any>
としてそれを注入すると、ゲットーを感じる。私は逃げることができSpring Injecting util:型安全性を備えたKotlinのマップ
私は私が見つけた豆を満たさない取得Map<String,String>
を試したり、Map<String,Any>
... Javaでは
例XML
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<util:map id="brandSql" key-type="java.lang.String" value-type="java.lang.String">
<entry key="selectBrands">
<value type="java.lang.String">
<![CDATA[
SELECT
ID,
NAME
FROM BRAND
]]>
</value>
</entry>
</util:map>
</beans>
サービスへの注射
@Service
open class JdbcBrandService @Autowired constructor(
private val namedJdbcTemplate: NamedParameterJdbcTemplate
): BrandService {
companion object {
val logger = LoggerFactory.getLogger(JdbcBrandService::class.java)
}
@Autowired
@Qualifier(value = "brandSql")
private lateinit var queries: Map<Any,Any>
/// methods and what not go here
}
次のようなことをしていますが、Kotlinのタイプシステムはこれよりも厳しいと思われます。
@RestController
public class JavaBrandController {
private final Map<String, String> brandSql;
@Autowired
public JavaBrandController(@Qualifier("brandSql") Map sql) {
this.brandSql = sql;
}
@GetMapping("/javaBrands")
public Map getBrandSql() {
return this.brandSql;
}
}
MapをSQLの@Qualifierとともに使用すると、より多くのまたはより小さいここでは標準的な操作手順を示していますが、私は外部のSQLクエリの方が良い方法を公開していますが、クエリの中には500-1000行しかないものがあります。私はあなたのソリューションを試して、それはうまくいきます!これは、KotlinとSpringがまだ統合していない場所の1つと思われますが、この方法では型の安全性が確保され、コード内でキャストを行うことが回避されます。 –
greyfox
@greyfoxもしあなたがクエリを保存する別の方法を探しているなら、私はこの質問と答えのソリューションが好きです:https://codereview.stackexchange.com/questions/140938/reading-sql-file-using-injection-ユーティリティーリーダー – ESala