DbSqlBuilder dbsql = sql(pageSql); DbOomQuery query = query(dbsql); query.setMaxRows(pageSize); query.setFetchSize(pageSize); query.setMap(params); List<T> list = query.list(pageSize, target); query.close(); query = query(dbsql); query.setMap(params); long count = query.executeCount(); query.close();
/** * Closes results set or whole query. */ protected void close(final ResultSetMapper rsm, final boolean closeQuery) { if (closeQuery) { close(); } else { closeResultSet(rsm.getResultSet()); } }
/** * Finds generated key column of given type. */ public <T> T findGeneratedKey(final Class<T> type) { return find(new Class[] {type}, false, getGeneratedColumns()); }
protected <T> T find(final Class[] types, final boolean close, ResultSet resultSet) { if (resultSet == null) { resultSet = execute(); } ResultSetMapper rsm = createResultSetMapper(resultSet); Iterator<T> iterator = new DbListIterator<>(this, types, rsm, false); T result = null; if (iterator.hasNext()) { result = iterator.next(); } close(rsm, close); return result; }
assertEquals(1, dbOom.entities().insert(new Girl(1, "Anna", "swim")).query().autoClose().executeUpdate()); assertEquals(1, dbOom.entities().insert(new Girl(2, "Sandra", "piano")).query().autoClose().executeUpdate()); assertEquals(0, session.getTotalQueries()); DbOomQuery q2 = DbOomQuery.query(dbOom.entities().insert(new Girl(3, "Monica", null))); q2.setDebugMode(); assertEquals("insert into GIRL (ID, NAME) values (:girl.id, :girl.name)", q2.getQueryString()); q2.init(); assertEquals("insert into GIRL (ID, NAME) values (3, 'Monica')", q2.getQueryString()); assertEquals(1, q2.autoClose().executeUpdate()); assertTrue(q2.isClosed()); assertEquals(1, dbOom.entities().insert(new BadBoy(Integer.valueOf(1), "Johny", Integer.valueOf(3))).query().autoClose().executeUpdate()); assertEquals(0, session.getTotalQueries()); DbOomQuery q = DbOomQuery.query("select * from GIRL order by ID"); Girl girl = q.find(Girl.class); checkGirl1(girl); assertTrue(q.isActive()); girl = q.find(new QueryMapper<Girl>() { @Override public Girl process(ResultSet resultSet) throws SQLException { assertTrue(q.isActive()); IdName idName = q.find(IdName.class); assertNotNull(idName);
DbOomQuery q = DbOomQuery.query("select * from GIRL where ID=1"); Girl girl = q.find(Girl.class); checkGirl1(girl); assertTrue(q.isActive()); IdName idName = q.find(IdName.class); assertNotNull(idName); assertEquals(1, idName.id); q.find(); // this will fail since no entity is registered! fail("error"); } catch (DbOomException doex) { girl = q.find(); checkGirl1(girl); q.close(); q = DbOomQuery.query("insert into GIRL (NAME) values('Janna')"); q.setGeneratedColumns(); q.executeUpdate(); long key = q.getGeneratedKey(); assertEquals(4, key); q.close(); q = DbOomQuery.query("insert into GIRL (NAME) values('Janna2')"); q.setGeneratedColumns("ID", "TIME"); q.executeUpdate();
@Test void testMapRows2Types_entityAware_List() { DbOomQuery q = DbOomQuery.query(sql(TSQL)); List<Girl2> result2 = q.withHints("g", "g.boys").entityAwareMode(true).list(1, Girl2.class, Boy.class); assertEquals(1, result2.size()); Girl2 girl1 = result2.get(0); assertNotNull(girl1.getBoys()); assertEquals(2, girl1.getBoys().size()); }
@Test void testMapRows2Types_entityAware_Max() { DbOomQuery q = DbOomQuery.query(sql(TSQL)); Set<Girl2> set1 = q.withHints("g", "g.boys").entityAwareMode(true).listSet(1, Girl2.class, Boy.class); assertEquals(1, set1.size()); for (Girl2 girl : set1) { if (girl.id.equals(2)) { assertEquals(2, girl.getBoys().size()); } else { fail("error"); } } }
/** * Updates single entity. */ public void update(final Object entity) { query(dbOom.entities().updateAll(entity)).autoClose().executeUpdate(); }
@Test void testMapRows2Types_useCache_useHints_1perRow() { DbOomQuery q = DbOomQuery.query(sql(TSQL)); List<Girl2> result2 = q.withHints("g", "g.boys").cacheEntities(true).list(Girl2.class, Boy.class); assertEquals(3, result2.size()); Girl2 girl1 = result2.get(0); Girl2 girl2 = result2.get(1); Girl2 girl3 = result2.get(2); assertTrue(girl1.equals(girl2)); assertTrue(girl1 == girl2); assertFalse(girl3 == girl1); assertNotNull(girl1.getBoys()); assertEquals(2, girl1.getBoys().size()); assertNotNull(girl3.getBoys()); assertEquals(1, girl3.getBoys().size()); assertEquals("Hugo", girl3.getBoys().get(0).name); }
@SuppressWarnings({"unchecked"}) protected <T> Set<T> listSet(Class[] types, final int max, final boolean close) { final Set<T> result = new LinkedHashSet<>(initialCollectionSize(max)); ResultSetMapper rsm = executeAndBuildResultSetMapper(); if (types == null) { types = rsm.resolveTables(); Object row = resolveRowResults(objects); close(rsm, close); return result;
assertEquals(1, dbOom.entities().insert(new Room(1, "Room1")).query().executeUpdate()); assertEquals(1, dbOom.entities().insert(new Room(2, "Room2")).query().executeUpdate()); assertEquals(1, dbOom.entities().insert(new Boy4(1, 1, "Oleg")).query().executeUpdate()); assertEquals(1, dbOom.entities().insert(new Boy4(2, 2, "Stephene")).query().executeUpdate()); assertEquals(1, dbOom.entities().insert(new Boy4(3, 2, "Joe")).query().executeUpdate()); assertEquals(1, dbOom.entities().insert(new Girl4(1, 1, "Anna")).query().executeUpdate()); assertEquals(1, dbOom.entities().insert(new Girl4(2, 2, "Sandra")).query().executeUpdate()); assertEquals(1, dbOom.entities().insert(new Girl4(3, 3, "Jossy")).query().executeUpdate()); DbOomQuery dbOomQuery = DbOomQuery.query(sql( "select $C{room.*}, $C{boy.*}, $C{girl.*} " + "from $T{Room room} join $T{Boy4 boy} on $room.id=$boy.roomId " + )); List<Object[]> results = dbOomQuery.autoClose().list(Room.class, Boy4.class, Girl4.class); dbOomQuery = DbOomQuery.query(sql( "select $C{room.*}, $C{room.boys:boy.*}, $C{room.boys.girl:girl.*} " + "from $T{Room room} join $T{Boy4 boy} on $room.id=$boy.roomId " + .entityAwareMode(true) .autoClose(); List<Room> rooms = dbOomQuery.list(Room.class, Boy4.class, Girl4.class);
@Test void testMapRows2Types_entityAware_Find_LEFT() { DbOomQuery q = DbOomQuery.query(sql(TSQL_LEFT)); Girl2 girl0 = q.withHints("g", "g.boys").entityAwareMode(true).find(Girl2.class, Boy.class); assertNull(girl0.getBoys()); }
@Test void testMapRows2Types_entityAware_Iterator() { DbOomQuery q = DbOomQuery.query(sql(TSQL)); Iterator<Girl2> iterator = q.withHints("g", "g.boys").entityAwareMode(true).iterate(Girl2.class, Boy.class); assertTrue(iterator.hasNext()); assertTrue(iterator.hasNext()); assertTrue(iterator.hasNext()); Girl2 girl1 = iterator.next(); assertNotNull(girl1.getBoys()); assertEquals(2, girl1.getBoys().size()); assertTrue(iterator.hasNext()); Girl2 girl3 = iterator.next(); assertNotNull(girl3.getBoys()); assertEquals(1, girl3.getBoys().size()); assertFalse(iterator.hasNext()); }
/** * Counts number of all entities. */ public long count(final Class entityType) { return query(dbOom.entities().count(entityType)).autoClose().executeCount(); }
String[] joinHints = sqlgen.getJoinHints(); if (joinHints != null) { withHints(joinHints); DbEntityColumnDescriptor dec = param.getColumnDescriptor(); if (dec == null) { setObject(paramName, param.getValue()); } else { resolveColumnDbSqlType(connection, dec); setObject(paramName, param.getValue(), dec.getSqlTypeClass(), dec.getDbSqlType());
@Test void testMapRows2Types_useCache_noHints() { DbOomQuery q = DbOomQuery.query(sql(TSQL)); List<Object[]> result = q.cacheEntities(true).list(Girl2.class, Boy.class); assertEquals(3, result.size()); Girl2 girl1 = (Girl2) result.get(0)[0]; Girl2 girl2 = (Girl2) result.get(1)[0]; Girl2 girl3 = (Girl2) result.get(2)[0]; assertTrue(girl1.equals(girl2)); assertTrue(girl1 == girl2); assertFalse(girl3 == girl1); Boy boy1 = (Boy) result.get(0)[1]; Boy boy2 = (Boy) result.get(1)[1]; Boy boy3 = (Boy) result.get(2)[1]; assertTrue(boy1.id != boy2.id); assertFalse(boy1 == boy2); assertFalse(boy2 == boy3); assertNull(girl1.getBoys()); assertNull(girl3.getBoys()); }
query.close(); } else { query.closeResultSet(resultSetMapper.getResultSet()); Object row = query.resolveRowResults(objects);