@Test public void testNonUniqueIndexWithMultimap() { Handle h = dbRule.getSharedHandle(); h.execute("create table user (id int, name varchar)"); h.prepareBatch("insert into user (id, name) values (?, ?)") .add(1, "alice") .add(2, "bob") .add(3, "alice") .execute(); Multimap<String, User> usersByName = h.createQuery("select * from user") .setMapKeyColumn("name") .registerRowMapper(ConstructorMapper.factory(User.class)) .collectInto(new GenericType<Multimap<String, User>>() {}); assertThat(usersByName.apply("alice")).hasSize(2).containsExactly( new User(1, "alice"), new User(3, "alice") ); assertThat(usersByName.apply("bob")).hasSize(1).containsExactly( new User(2, "bob") ); }
@Test public void joinRow() { h.execute("create table user (id int, name varchar)"); h.execute("create table phone (id int, user_id int, phone varchar)"); h.prepareBatch("insert into user (id, name) values (?, ?)") .add(1, "alice") .add(2, "bob") .add(3, "cathy") .execute(); h.prepareBatch("insert into phone (id, user_id, phone) values (?, ?, ?)") .add(10, 1, "555-0001") .add(20, 2, "555-0002") .add(30, 3, "555-0003") .execute(); // tag::joinRow[] String sql = "select u.id u_id, u.name u_name, p.id p_id, p.phone p_phone " + "from user u left join phone p on u.id = p.user_id"; Map<User, Phone> map = h.createQuery(sql) .registerRowMapper(ConstructorMapper.factory(User.class, "u")) .registerRowMapper(ConstructorMapper.factory(Phone.class, "p")) .collectInto(new GenericType<Map<User, Phone>>() {}); // end::joinRow[] assertThat(map).containsOnly( entry(new User(1, "alice"), new Phone(10, "555-0001")), entry(new User(2, "bob"), new Phone(20, "555-0002")), entry(new User(3, "cathy"), new Phone(30, "555-0003"))); }
@Test public void uniqueIndex() { h.execute("create table user (id int, name varchar)"); h.prepareBatch("insert into user (id, name) values (?, ?)") .add(1, "alice") .add(2, "bob") .add(3, "cathy") .add(4, "dilbert") .execute(); // tag::uniqueIndex[] Map<Integer, User> map = h.createQuery("select * from user") .setMapKeyColumn("id") .registerRowMapper(ConstructorMapper.factory(User.class)) .collectInto(new GenericType<Map<Integer, User>>() {}); // end::uniqueIndex[] assertThat(map).containsOnly( entry(1, new User(1, "alice")), entry(2, new User(2, "bob")), entry(3, new User(3, "cathy")), entry(4, new User(4, "dilbert"))); }
.setMapKeyColumn(null) .setMapValueColumn(null) .registerRowMapper(ConstructorMapper.factory(User.class, "u")) .registerRowMapper(ConstructorMapper.factory(Phone.class, "p")) .collectInto(new GenericType<Map<User, Phone>>() {}); assertThat(map).containsOnly(
@Test public void joinRow() { h.execute("create table user (id int, name varchar)"); h.execute("create table phone (id int, user_id int, phone varchar)"); h.prepareBatch("insert into user (id, name) values (?, ?)") .add(1, "alice") .add(2, "bob") .execute(); h.prepareBatch("insert into phone (id, user_id, phone) values (?, ?, ?)") .add(10, 1, "555-0001") .add(11, 1, "555-0002") .add(20, 2, "555-0003") .execute(); // tag::joinRow[] String sql = "select u.id u_id, u.name u_name, p.id p_id, p.phone p_phone " + "from user u left join phone p on u.id = p.user_id"; Multimap<User, Phone> map = h.createQuery(sql) .registerRowMapper(ConstructorMapper.factory(User.class, "u")) .registerRowMapper(ConstructorMapper.factory(Phone.class, "p")) .collectInto(new GenericType<Multimap<User, Phone>>() {}); // end::joinRow[] Multimap<User, Phone> expected = ImmutableListMultimap.<User, Phone>builder() .putAll(new User(1, "alice"), new Phone(10, "555-0001"), new Phone(11, "555-0002")) .put(new User(2, "bob"), new Phone(20, "555-0003")) .build(); assertThat(map).isEqualTo(expected); }
/** * from {@link org.jdbi.v3.core.mapper.MapEntryMapperTest} */ @Test public void uniqueIndex() { Handle h = dbRule.getSharedHandle(); h.execute("create table user (id int, name varchar)"); h.prepareBatch("insert into user (id, name) values (?, ?)") .add(1, "alice") .add(2, "bob") .add(3, "cathy") .add(4, "dilbert") .execute(); Map<Integer, User> map = h.createQuery("select * from user") .setMapKeyColumn("id") .registerRowMapper(ConstructorMapper.factory(User.class)) .collectInto(new GenericType<Map<Integer, User>>() {}); assertThat(map).containsOnly( Tuple.of(1, new User(1, "alice")), Tuple.of(2, new User(2, "bob")), Tuple.of(3, new User(3, "cathy")), Tuple.of(4, new User(4, "dilbert"))); }
@Test public void index() { h.execute("create table user (id int, manager_id int, name varchar)"); h.prepareBatch("insert into user (id, manager_id, name) values (?, ?, ?)") .add(1, 0, "alice") .add(2, 1, "bob") .add(3, 1, "cathy") .add(4, 3, "dilbert") .execute(); // tag::index[] Multimap<Integer, User> map = h.createQuery("select id, manager_id, name from user") .setMapKeyColumn("manager_id") .registerRowMapper(ConstructorMapper.factory(User.class)) .collectInto(new GenericType<Multimap<Integer, User>>() {}); // end::index[] Multimap<Integer, User> expected = ImmutableListMultimap.<Integer, User>builder() .put(0, new User(1, "alice")) .putAll(1, new User(2, "bob"), new User(3, "cathy")) .put(3, new User(4, "dilbert")) .build(); assertThat(map).isEqualTo(expected); }
@Test public void joinRow() { h.execute("create table user (id int, name varchar)"); h.execute("create table phone (id int, user_id int, phone varchar)"); h.prepareBatch("insert into user (id, name) values (?, ?)") .add(1, "alice") .add(2, "bob") .execute(); h.prepareBatch("insert into phone (id, user_id, phone) values (?, ?, ?)") .add(10, 1, "555-0001") .add(11, 1, "555-0002") .add(20, 2, "555-0003") .execute(); // tag::joinRow[] String sql = "select u.id u_id, u.name u_name, p.id p_id, p.phone p_phone " + "from user u left join phone p on u.id = p.user_id"; Multimap<User, Phone> map = h.createQuery(sql) .registerRowMapper(ConstructorMapper.factory(User.class, "u")) .registerRowMapper(ConstructorMapper.factory(Phone.class, "p")) .collectInto(new GenericType<Multimap<User, Phone>>() {}); // end::joinRow[] Multimap<User, Phone> expected = ImmutableListMultimap.<User, Phone>builder() .putAll(new User(1, "alice"), new Phone(10, "555-0001"), new Phone(11, "555-0002")) .put(new User(2, "bob"), new Phone(20, "555-0003")) .build(); assertThat(map).isEqualTo(expected); }
@Test public void index() { h.execute("create table user (id int, manager_id int, name varchar)"); h.prepareBatch("insert into user (id, manager_id, name) values (?, ?, ?)") .add(1, 0, "alice") .add(2, 1, "bob") .add(3, 1, "cathy") .add(4, 3, "dilbert") .execute(); // tag::index[] Multimap<Integer, User> map = h.createQuery("select id, manager_id, name from user") .setMapKeyColumn("manager_id") .registerRowMapper(ConstructorMapper.factory(User.class)) .collectInto(new GenericType<Multimap<Integer, User>>() {}); // end::index[] Multimap<Integer, User> expected = ImmutableListMultimap.<Integer, User>builder() .put(0, new User(1, "alice")) .putAll(1, new User(2, "bob"), new User(3, "cathy")) .put(3, new User(4, "dilbert")) .build(); assertThat(map).isEqualTo(expected); }