10

Hibernate のような永続化レイヤーを探しているわけではありません。SQL 文字列を生成したいだけで、PreparedStatement. Squiggleなどのライブラリを試しましたが、サポートしているのは のみSELECTです。挿入と更新も生成したいと思います。理想的な使用法は次のようなものです。

generateInsertOn("myTable").addValue("value1").addValue("value2").generate();

次の文字列が生成されます。

"INSERT INTO myTable (value1, value2) VALUES(?, ?)"

こののように、私の質問によく似た質問が存在することは知っていますが、私と同じことを尋ねているわけではありません。

4

3 に答える 3

13

任意の SQL の場合は、jOOQを使用します。jOOQ は現在SELECTINSERTUPDATEDELETETRUNCATE、および をサポートしていますMERGE。次のように SQL を作成できます。

// Since you're not executing the SQL, set connection to null
Connection connection = null;
Factory create = new MySQLFactory(connection);
String sql1 = create.select(A, B, C)
                    .from(MY_TABLE)
                    .where(A.equal(5))
                    .and(B.greaterThan(8))
                    .getSQL();

String sql2 = create.insertInto(MY_TABLE)
                    .values(A, 1)
                    .values(B, 2)
                    .getSQL();

String sql3 = create.update(MY_TABLE)
                    .set(A, 1)
                    .set(B, 2)
                    .where(C.greaterThan(5))
                    .getSQL();

サポートされている構文は非常に豊富です。、、、などの句もサポートされていON DUPLICATE KEY UPDATEます。FOR UPDATELOCK IN SHARE MODE

詳細については、

http://www.jooq.org

(免責事項、私はjOOQの背後にある会社で働いています)

于 2011-08-09T06:31:36.300 に答える
3

あなたは間違いなく SQLBuilderを見てください。非常に流暢な API を使用して、シンプルでありながら完全な SQL 生成を可能にします。

于 2011-08-08T14:01:24.343 に答える
0

ここで手足を出して、iBatisを検討しましたか? これは、現実的なクエリ マッピング フレームワークです (ORM フレームワークと呼ぶのはためらいがあります)。次のような XML ファイルを作成する必要があります。

<mapper namespace="org.mybatis.jpetstore.persistence.ProductMapper">    
  <cache />    
  <select id="getProduct" parameterType="string" resultType="Product">
    SELECT
      PRODUCTID,
      NAME,
      DESCN as description,
      CATEGORY as categoryId
    FROM PRODUCT
    WHERE PRODUCTID = #{productId}
  </select>   
</mapper>

次のようなマッパーを配線します。

public interface ProductMapper {
  Product getProduct(String productId);
}

これにより、次のようなサービスからデータにアクセスできます。

  @Autowired
  private ProductMapper productMapper;  

  public Product getProduct(String productId) {
    return productMapper.getProduct(productId);
  }

Springで接続できるもの:

<!-- enable autowire -->
<context:annotation-config />

<!-- enable transaction demarcation with annotations -->
<tx:annotation-driven />

<!-- define the SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="typeAliasesPackage" value="org.mybatis.jpetstore.domain" />
</bean>

<!-- scan for mappers and let them be autowired -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="org.mybatis.jpetstore.persistence" />
</bean>

完全なペットストアの例も参照してください。

私は iBatis の明確なファンではありませんが、この特定のケースではニーズに合うかもしれません。

于 2011-08-09T08:36:52.837 に答える