HybernateのSQLQueryとQueryのプレースホルダを参照してください。
HybernateはSQLQuery(特定のデータベースプラットフォームに関するsql文)とQuery(hql)の照会方法をサポートしています。もちろんCriteriaオブジェクトの照会方法もあります。本文ではSQLQueryとQueryのいくつかの方法と注意事項を紹介します。
SQLQuery
1、照会結果はmapにマッピングされます。:param参照
呼び出しの例:
2、照会結果はエンティティにマッピングされます。:param転送参
呼び出しの例:
また、次のような方法で、エンティティリストを取得することもできます。
3、クエリの結果は、mapまたはエンティティにマッピングされますか?参を回す
呼び出しの例:
HQL文でデータを調べたら、検索結果もSQLQueryタイプと同じです。は、setsResult Transformerをサポートし、クエリ結果をエンティティリストまたはmapリスト にマッピングする。は、set Parameters(?参) を介してサポートされている。 setParameeter/set Param引数List(:param传参) は、addEntityがエンティティーにマッピングされることをサポートしていない(hql本明細書はエンティティーと結合されているので) 。
また、HiberanteクエリはCriteriaとExampleの2つの方法をサポートしています。
SQLQuery
1、照会結果はmapにマッピングされます。:param参照
public List
戻ってきたデータは、mapタイプのリストです。パラメータは、mapを介して渡されます。パラメータの種類は、paramです。呼び出しの例:
String sql="select id,user_name,create_date_time from tbl_user where code=:code"
Map<String,Object> params=new HashMap<>();
params.put("code","test");
List<Map<String,Object>> users=this.findMapBySql(sql,params);
実体に転化する集合が必要なら、自分で処理する必要があります。2、照会結果はエンティティにマッピングされます。:param転送参
public List find(String sql, Map params, Class clazz) {
SQLQuery query = this.getCurrentSession().createSQLQuery(sql);
query=getSqlQueryByMap(query,params);
query.setResultTransformer(Transformers.aliasToBean(clazz));
return query.list();
}
リターンされたデータはエンティティのリストであり、パラメータはmapを通じて伝達され、パラメータのタイプは:paramであり、データベースフィールドはマッピングされたエンティティフィールドと一対一に対応しなければならず、またgetter/setter方法があります。そうでなければエラーが発生します。呼び出しの例:
String sql="select id,user_name,create_date_time from tbl_user where code=:code"
Map<String,Object> params=new HashMap<>();
params.put("code","test");
List<User> users=this.find(sql,params,User.class);
User本体にはuser_が必要です。name、create_date_timeの属性定義は、userNameではなく、createDateTimeであり、もちろん別名を制定することによって解決できます。また、次のような方法で、エンティティリストを取得することもできます。
public List findBySql(String sql, Class<T> clazz) {
SQLQuery sqlQuery = this.getCurrentSession().createSQLQuery(sql);
sqlQuery.addEntity(clazz);
return sqlQuery.list();
}
同様にエンティティリストを取得する場合、以下の方法は、データベースフィールド名に対応するエンティティ属性名、例えばsql->user_を検索することである。nameは、entity->userNameにマッピングされます。 :
@Transientのエンティティは、値を与えられません。対応するクエリ結果は、entityに注入されません。3、クエリの結果は、mapまたはエンティティにマッピングされますか?参を回す
public List findMapBySql(String sql, Object[] params, Type[] types, Class clazz) {
SQLQuery query = this.getCurrentSession().createSQLQuery(sql);
if (clazz != null) {
query.setResultTransformer(Transformers.aliasToBean(clazz));
} else {
query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
}
query.setParameters(params, types);
return query.list();
}
戻ってきたデータはリストであり、clazzパラメータに基づいて、戻ってきたmapタイプのリストか、それともエンティティリストかを判断し、パラメータは?
プレースホルダを使用しています。呼び出しの例:
String sql="select id,user_name,create_date_time from tbl_user where code like ? and id in (?,?,?)"
Object[] params=new Object[]{"%test%",1,3,5};
Type[] types=new Type[]{Hibernate.String,Hibernate,Integer,Hibernate.Integer,Hibernate.Integer};
List
QueryHQL文でデータを調べたら、検索結果もSQLQueryタイプと同じです。
また、HiberanteクエリはCriteriaとExampleの2つの方法をサポートしています。