हालांकि MyBatis को इसे बनाने के बाद क्वेरी निष्पादित करने के लिए डिज़ाइन किया गया था, फिर भी आप इसकी आवश्यकता के अनुसार इसके कॉन्फ़िगरेशन और "ज्ञान के अंदर" का उपयोग कर सकते हैं।
माइबेटिस एक बहुत अच्छा ढांचा है, दुर्भाग्यवश इसमें दस्तावेज़ों की तरफ कमी है, इसलिए स्रोत कोड आप मित्र हैं। यदि आप चारों ओर खुदाई करते हैं तो आपको इन कक्षाओं में टक्कर लेनी चाहिए: org.apache.ibatis.mapping.MappedStatement
और org.apache.ibatis.mapping.BoundSql
जो गतिशील एसक्यूएल बनाने में महत्वपूर्ण खिलाड़ी हैं।
MySQL तालिका user
इस डेटा के साथ उस में:
name login
----- -----
Andy a
Barry b
Cris c
User
वर्ग:
package pack.test;
public class User {
private String name;
private String login;
// getters and setters ommited
}
UserService
इंटरफ़ेस:
package pack.test;
public interface UserService {
// using a different sort of parameter to show some dynamic SQL
public User getUser(int loginNumber);
}
UserService.xml
नक्शाकार फ़ाइल यहाँ एक मूल उपयोग उदाहरण है :
<mapper namespace="pack.test.UserService">
<select id="getUser" resultType="pack.test.User" parameterType="int">
<!-- dynamic change of parameter from int index to login string -->
select * from user where login = <choose>
<when test="_parameter == 1">'a'</when>
<when test="_parameter == 2">'b'</when>
<otherwise>'c'</otherwise>
</choose>
</select>
</mapper>
sqlmap-config.file
:
package pack.test;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class AppTester {
private static String CONFIGURATION_FILE = "sqlmap-config.xml";
public static void main(String[] args) throws Exception {
Reader reader = null;
SqlSession session = null;
try {
reader = Resources.getResourceAsReader(CONFIGURATION_FILE);
session = new SqlSessionFactoryBuilder().build(reader).openSession();
UserService userService = session.getMapper(UserService.class);
// three users retreived from index
for (int i = 1; i <= 3; i++) {
User user = userService.getUser(i);
System.out.println("Retreived user: " + user.getName() + " " + user.getLogin());
// must mimic the internal statement key for the mapper and method you are calling
MappedStatement ms = session.getConfiguration().getMappedStatement(UserService.class.getName() + ".getUser");
BoundSql boundSql = ms.getBoundSql(i); // parameter for the SQL statement
System.out.println("SQL used: " + boundSql.getSql());
System.out.println();
}
} finally {
if (reader != null) {
reader.close();
}
if (session != null) {
session.close();
}
}
}
}
और परिणाम:
Retreived user: Andy a
SQL used: select * from user where login = 'a'
Retreived user: Barry b
SQL used: select * from user where login = 'b'
Retreived user: Cris c
SQL used: select * from user where login = 'c'
हो सकता है, यह वास्तविक मूल्य के बजाय पता चलता '?'। जैसे 'जहां लॉगिन =?'। इस पर चारों ओर कोई काम? धन्यवाद (मैं मैपर वर्ग का उपयोग नहीं कर रहा हूं) – agpt