PostgreSQL hstore
public class BatchSearchUtil { /** * 注意:因为select的只有id,所以可用的也就只有id,其他字段如果想获取值,要在select后加字段名称,不然会报错 * @param lot * @param line * @param date * @param pi * @return */ public static List<Batch> serchBatch(String lot,String line,String date,String pi) { List<Batch> batchIdList = new ArrayList<Batch>(); String sql = "select b.id from t_batch b where ext::hstore @> 'lot=>" + lot + ",line=>" + line + ",pi=>" + pi + ",date=>" + date + "'"; RawSql rawSql = RawSqlBuilder.parse(sql).create(); Query<Batch> query = Ebean.find(Batch.class); batchIdList = query.setRawSql(rawSql).findList(); return batchIdList; } public static List<Batch> serchBatch(String pi) { List<Batch> batchIdList = new ArrayList<Batch>(); String sql = "select b.id,b. from t_batch b where ext::hstore @> 'pi=>" + pi +"'"; RawSql rawSql = RawSqlBuilder.parse(sql).create(); Query<Batch> query = Ebean.find(Batch.class); batchIdList = query.setRawSql(rawSql).findList(); return batchIdList; } } 先前曾跟大家说起过ext字段的用法,简单提到PostgreSQL对这种key/value数据类型的强大支持,但并没有举例,现在补上:
create extension hstore; --对当前数据库启用hstore扩展,支持key/value的就是该扩展 create table a(id bigint,ext text,primary key (id)); --注意ext字段不一定要是hstore类型的,这里的text相当于varchar insert into a values(1,'x=>1,y=>2,z=>"z"'); --这段字符串就是hstore的标准写法 select ext::hstore from a; --这里的::hstore是PG的语法用于将text/varchar转换为hstore数据类型 select * from a where ext::hstore -> 'x'='1'; --查出所有ext中x这个键对应的值为1的记录 select * from a where ext::hstore ? 'y'; --查出所有ext具备y这个键的记录 select * from a where ext::hstore @> 'x=>1,y=2'::hstore; --查出所有同时满足x=1、y=2的记录 update a set ext = (ext::hstore||'d=>"d"'::hstore)::text where id = 1; --更新记录1,追加(或更新)一组key/value(d=>"d") (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |