iBatisのIMHOは手書きのDAOとDTOを作成することをお勧めしますJDBCは完全に時代遅れです。
私は自分のSQLを別のSQLファイルに保存しておき、必要なときに正しいSQLを取得しました。私はもはやそれを使用しない...これは、実際のJavaコードでSQLよりわずかに優れているだけなので。
次のようにSQLファイルの構文は次のとおりです。次に
-- I added comments like this...
[id] {
any SQL statement... (quite frankly any text).
}
[id2] {
...
}
...
、以下の簡単なParserクラス:
public class SQLParser {
private static Logger logger = LoggerUtility.getLogger(SQLParser.class);
private String raw;
private Map<String, String> sql;
public SQLParser(InputStream is) {
sql = new HashMap<String, String>();
try {
read(is);
parse();
} catch (IOException e) {
logger.debug(LoggerCodes.TRACE, "Input Stream could not be successfull read!");
}
}
private void read(InputStream is) throws IOException {
StringBuilder builder = new StringBuilder();
BufferedReader in = new BufferedReader(new InputStreamReader(is));
String line = in.readLine();
while (line != null) {
builder.append(line + "\n");
line = in.readLine();
}
raw = builder.toString();
}
public String getSql(String sqlId) {
return sql.get(sqlId);
}
public PreparedStatement getSql(Connection connection, String sqlId) throws SQLException {
String statement = sql.get(sqlId);
return connection.prepareStatement(statement);
}
private void parse() {
if (raw == null) {
logger.debug(LoggerCodes.TRACE, "No String to parse for SQL statements!");
return;
}
String regex = "\\.*\\[(\\S*)\\]\\s*\\{\\s*([^\\}]*)\\s*\\}";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(raw);
while (m.find()) {
String key = m.group(1);
String body = m.group(2);
logger.debug("Adding " + key + " to SQL map.");
sql.put(key, body.trim());
}
}
}
その後、単純に上記の新しいインスタンスを作成して呼び出すsqlParser .getSql(id)を実行して、正しいSQLを取得します。
既に尋ねられています。http://stackoverflow.com/questions/660609/sql-parser-library-for-java –
http://stackoverflow.com/q/660609/108341 –
http:// stackoverflow。 com/questions/660609/sql-parser-library-for-java –