/** * 级联查询,驱动表的选择字段指定,其他表自动 * * @throws SQLException */ @Test public void testSelectColumnsInCascade() throws SQLException { Query<Person> t1 = QB.create(Person.class); // 只选择指定的列 Selects select = QB.selectFrom(t1); select.column(t1, "schoolId"); select.columns(t1, "name,age,cell"); select.column(t1, "id"); List<Person> map = db.select(t1.getInstance()); Person p = map.get(0); assertTrue(!p.getScores().isEmpty()); assertTrue(!p.getFriends().isEmpty()); for (Score score : p.getScores()) { assertNotNull(score.getTestTime()); } System.out.println("===========result:" + map.size() + "=============="); }
/** * 在一对多的关联中使用对子表的过滤条件 * * @throws SQLException */ @Test public void testFilterInOneToManyRef() throws SQLException { ORMConfig.getInstance().setCacheDebug(true); System.out.println("=========== testFilterInOneToManyRef Start =========="); // 无过滤条件的 Person p1 = new Person(); p1.getQuery().addCondition(Person.Field.id, 1); Person result = db.load(p1); assertEquals(6, result.getScores().size()); // 添加过滤条件的 Person p = new Person(); p.getQuery().addCondition(Person.Field.id, 1); p.getQuery().addCascadeCondition(QB.in(Score.Field.subject, new String[] {"语文", "化学", "英语"})); result = db.load(p); assertEquals(3, result.getScores().size()); System.out.println("=========== testFilterInOneToManyRef End =========="); }
@Test public void testDeleteCascade() throws SQLException { Transaction db = this.db.startTransaction(); Person p = new Person(); p.setAge(20); db.select(p); System.out.println(p.getScores()); db.deleteCascade(p); db.rollback(true); }
private void checkResult1(List<Person> result) { assertEquals(2, result.size()); Person p1 = result.get(0); assertTrue(p1.getName().startsWith("爸爸")); assertTrue(p1.getScores().size() == 6); assertEquals(80, CollectionUtils.findFirst(p1.getScores(), "subject", "英语").getScore()); assertEquals(90, CollectionUtils.findFirst(p1.getScores(), "subject", "物理").getScore()); assertEquals(50, CollectionUtils.findFirst(p1.getScores(), "subject", "电脑").getScore()); assertEquals(70, CollectionUtils.findFirst(p1.getScores(), "subject", "算数").getScore()); assertEquals(60, CollectionUtils.findFirst(p1.getScores(), "subject", "语文").getScore()); assertEquals(100, CollectionUtils.findFirst(p1.getScores(), "subject", "化学").getScore()); assertTrue(p1.getSchoolId() == 2); assertEquals("战国高校", p1.getSchoolName()); assertEquals(p1.getSchoolName(), p1.getSchool().getName()); assertEquals(p1.getSchoolId(), p1.getSchool().getId()); assertEquals(2, p1.getFriends().size()); assertEquals(p1.getFriendComment()[0], p1.getFriends().get(0).getComment()); assertTrue(p1.getFriends().get(0).getFriend().getName().startsWith("JinWang")); assertTrue(p1.getFriends().get(1).getFriend().getName().startsWith("儿子")); p1.getParentName(); }
/** * 测试使用复杂的子查询过滤条件 * * @throws SQLException */ @Test public void testComplextFilterCondition() throws SQLException { System.out.println("=========== testComplextFilterCondition End =========="); // // 添加过滤条件的 Person p = new Person(); p.getQuery().addCondition(Person.Field.id, 1); Condition or = QB.or( QB.eq(Score.Field.subject, "语文"), QB.eq(Score.Field.subject, "化学"), QB.eq(Score.Field.subject, "英语")); p.getQuery().addCascadeCondition("scores", or); Person result = db.load(p); System.out.println("loaded"); assertEquals(3, result.getScores().size()); System.out.println("=========== testComplextFilterCondition End =========="); }