2011-08-08 6 views
8

मैं हाइबरनेट जैसी दृढ़ता परत की तलाश नहीं कर रहा हूं, मैं बस एसक्यूएल-स्ट्रिंग उत्पन्न करना चाहता हूं और उन्हें PreparedStatement के साथ संगत होना चाहिए। मैंने Squiggle जैसे पुस्तकालयों की कोशिश की है, लेकिन यह केवल SELECT का समर्थन करता है, मैं भी सम्मिलित और अद्यतन उत्पन्न करना चाहता हूं।जावा में एसक्यूएल तार उत्पन्न करने का अच्छा तरीका?

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

मैं जानता हूँ कि इस तरह के this के रूप में सवाल है कि मेरे जैसे एक बहुत हैं, वहाँ मौजूद है, लेकिन वे काफी पूछना न:

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

कि इस स्ट्रिंग उत्पन्न होगा: एक आदर्श उपयोग की तरह कुछ होगा वही बात जो मैं करता हूं।

चीयर्स,

+1

यदि आप पहले से ही जानते हैं कि समान प्रश्न हैं, तो यह * महान * है कि आप हमें उनके बारे में बताते हैं। लेकिन हमें बता रहा है ** क्यों ** ये प्रश्न आप जो चाहते हैं वह बेहतर नहीं होगा! –

+0

इसे लिखने में आपकी समस्या क्या है? –

+2

हाइबरनेट के साथ समस्या क्या है, इसकी महान ... – NimChimpsky

उत्तर

9

मनमानी एसक्यूएल के लिए, jOOQ का उपयोग करें। jOOQ वर्तमान में SELECT, INSERT, UPDATE, DELETE, TRUNCATE, और MERGE का समर्थन करता है। आप इस तरह एसक्यूएल बना सकते हैं:

// 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(); 

समर्थित वाक्यविन्यास काफी समृद्ध है। तुम भी आप iBatis पर विचार किया है, खंड के लिए समर्थन जैसे ON DUPLICATE KEY UPDATE, FOR UPDATE, LOCK IN SHARE MODE, आदि

अधिक जानकारी के लिए

http://www.jooq.org

+0

क्या मेरी टेबल के लिए कक्षाएं उत्पन्न किए बिना इसका उपयोग करने का कोई तरीका है? – wutzebaer

+0

@wutzebaer: * सादे एसक्यूएल * संबंधित मैनुअल पेज देखें: http://www.jooq.org/doc/2.5/manual/sql-building/plain-sql/ –

2

आप निश्चित SQLBuilder पर एक नज़र रखना चाहिए। यह एक बहुत ही धाराप्रवाह एपीआई का उपयोग कर सरल, अभी तक पूर्ण, एसक्यूएल पीढ़ी की अनुमति देता है।

+0

क्या SQLBuilder अभी भी सक्रिय है? हाल के इतिहास में बहुत सारे अपडेट नहीं दिख रहे हैं ... https://sourceforge.net/projects/openhms/files/sqlbuilder/ –

+0

क्या यह काम करता है? मेरा मतलब है, मुझे नहीं पता, मैंने इसका इस्तेमाल नहीं किया है। लेकिन अगर यह काम करता है, तो कौन परवाह करता है अगर यह सक्रिय है? –

+0

वैसे यह निर्भर करता है, यदि ओपी त्वरित और गंदे नौकरियों के लिए एक उपकरण की तलाश में है, या यदि उसे किसी अन्य समय के लिए इस निर्णय के साथ रहने की जरूरत है। उदाहरण के लिए, Xalan ले लो। यह बहुत अच्छी तरह से काम करता है लेकिन यह बिल्कुल सक्रिय नहीं है। कुछ महत्वपूर्ण खुले मुद्दे हैं जिन्हें शायद कभी संबोधित नहीं किया जाएगा ...: -/ –

0

यहाँ एक अंग पर बाहर जाने को देखने मिलेगा? यह पृथ्वी क्वेरी मैपिंग ढांचे के लिए एक वास्तविक नीचे है (मैं इसे किसी भी तरह से एक ओआरएम ढांचे को कॉल करने में संकोच करता हूं)। आप इस तरह एक्सएमएल फाइल बनाने के लिए:

<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); 
    } 

जो आप वसंत के साथ तार कर सकते हैं:

<!-- 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> 

the full petstore example भी देखें।

मैं iBatis का एक विशिष्ट प्रशंसक नहीं हूं लेकिन यह इस विशिष्ट मामले में आपकी आवश्यकताओं को पूरा कर सकता है।

संबंधित मुद्दे