package me.prettyprint.cassandra.dao; import java.util.HashMap; import java.util.Map; import me.prettyprint.cassandra.serializers.StringSerializer; import me.prettyprint.hector.api.Keyspace; import me.prettyprint.hector.api.beans.HColumn; import me.prettyprint.hector.api.beans.Rows; import me.prettyprint.hector.api.exceptions.HectorException; import me.prettyprint.hector.api.factory.HFactory; import me.prettyprint.hector.api.mutation.Mutator; import me.prettyprint.hector.api.query.ColumnQuery; import me.prettyprint.hector.api.query.MultigetSliceQuery; import me.prettyprint.hector.api.query.QueryResult; import static me.prettyprint.hector.api.factory.HFactory.*; /** * Really easy way to get started when you are just dealing with String data */ public class SimpleCassandraDao { protected String columnFamilyName; protected Keyspace keyspace; private final StringSerializer serializer = StringSerializer.get(); /** * Insert a new value keyed by key * * @param key Key for the value * @param value the String value to insert */ public void insert(final String key, final String columnName, final String value) { createMutator(keyspace, serializer).insert( key, columnFamilyName, createColumn(columnName, value, serializer, serializer)); } /** * Get a string value. * * @return The string value; null if no value exists for the given key. */ public String get(final String key, final String columnName) throws HectorException { ColumnQuery<String, String, String> q = HFactory.createColumnQuery(keyspace, serializer, serializer, serializer); QueryResult<HColumn<String, String>> r = q.setKey(key). setName(columnName). setColumnFamily(columnFamilyName). execute(); HColumn<String, String> c = r.get(); return c != null ? c.getValue() : null; } /** * Get multiple values * @param keys * @return */ public Map<String, String> getMulti(String columnName, String... keys) { MultigetSliceQuery<String, String,String> q = createMultigetSliceQuery(keyspace, serializer, serializer, serializer); q.setColumnFamily(columnFamilyName); q.setKeys(keys); q.setColumnNames(columnName); QueryResult<Rows<String,String,String>> r = q.execute(); Rows<String,String,String> rows = r.get(); Map<String, String> ret = new HashMap<String, String>(keys.length); for (String k: keys) { HColumn<String, String> c = rows.getByKey(k).getColumnSlice().getColumnByName(columnName); if (c != null && c.getValue() != null) { ret.put(k, c.getValue()); } } return ret; } /** * Insert multiple values for a given columnName */ public void insertMulti(String columnName, Map<String, String> keyValues) { Mutator<String> m = createMutator(keyspace, serializer); for (Map.Entry<String, String> keyValue: keyValues.entrySet()) { m.addInsertion(keyValue.getKey(), columnFamilyName, createColumn(columnName, keyValue.getValue(), keyspace.createClock(), serializer, serializer)); } m.execute(); } /** * Delete multiple values */ public void delete(String columnName, String... keys) { Mutator<String> m = createMutator(keyspace, serializer); for (String key: keys) { m.addDeletion(key, columnFamilyName, columnName, serializer); } m.execute(); } public void setColumnFamilyName(String columnFamilyName) { this.columnFamilyName = columnFamilyName; } public void setKeyspace(Keyspace keyspace) { this.keyspace = keyspace; } }