Jequel looks pretty nifty: http://www.jequel.de/
It uses a fluent interface, so it's easy to read, almost like natural SQL (from the docs):
SqlString sql = select(ARTICLE.OID)
.from(ARTICLE, ARTICLE_COLOR)
.where(ARTICLE.OID.eq(ARTICLE_COLOR.ARTICLE_OID)
.and(ARTICLE.ARTICLE_NO.is_not(NULL)));
It also supports executing queries against a DataSource with parameters, so it handles creation of parameterized queries as well.
http://www.hibernate.org/ Вероятно, самая мощная библиотека ORM для Java. Это может сделать гораздо больше, чем просто сопоставление запросов. Таким образом, вы можете легко реализовать это где-то еще в вашем приложении. Для вашего случая это можно сделать так:
public class LookupCodeName
{
private String code;
private String name;
/*... getter-setters ... */
}
public class someBL {
public List<LookupCodeName> returnSomeEntity() {
SQLQuery sqlQuery = (SQLQuery)((HibernateSession)em).getHibernateSession()
.createSQLQuery( "SELECT st.name as name, st.code as code FROM someTable st")
.addScalar("code")
.addScalar("name")
.setResultTransformer(Transformers.aliasToBean(LookupCodeName.class));
}
return (List<LookupCodeName>)sqlQuery.list();
}
Apache Empire-db - это уровень абстракции реляционной базы данных и компонент персистентности данных, который позволяет разработчикам применять гораздо более ориентированный на SQL подход в разработке приложений, чем традиционные объектно-реляционные структуры отображения ( ORM).
Подробнее здесь: https://empire-db.apache.org/
Quaere
Если вы не хотите отображать строковые запросы, вы должны аннотировать свой класс как объект и связать его с таблицей, тогда вы можете использовать спящий режим или постоянство Java. Однако пример будет слишком сложным. Но в конце ваш запрос будет выглядеть примерно так:
найти список объектов:
Criteria c = createCreteria(entityManager, StockMarket.class);
// you can add "where" clause by using c.add(Restrictions);
// like this: c.add(Restrictions.ilike("name", "%somename%"); where "name" is your entity's field
List<StockMarket> smList = c.list();
найти объект по идентификатору:
StockMarket sm = entityManager.find(StockMarket.class, id);
Querydsl Поддерживает запрос на SQL, JPA и JDO Backends.
Приведенный выше пример становится:
query.from(stockmarket).where(stockmarket.corp.eq(someVar))
.orderBy(stockmarket.date.desc())
.list(stockmarket.date, stockmarket.quote);
Querydsl использует генерацию кода через APT для зеркала схемы SQL для типов запросов Java. Таким образом, запросы полностью безопасны (или », или« совместимый схема »с SQL).
Я сопровождающий Querydsl, поэтому этот ответ предвзятый.
Я опубликовал сравнение Querydsl в другие рамки здесь .