包含:
selectMaps
使用 數據庫提供函數
selectObjs
selectOne
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestOthers {
@Autowired
private EmployeeMapper employeeMapper;
/**
* selectMaps
* 應用場景:
* 當表中一個元組的數據特別多,也就是一個實體的屬性特別多,但是需要查詢的字段很少,如果還是返回實體對象的話
* 將會出現很多值爲 null 的屬性值,不優雅。
* 使用 selectMaps 得到的數據僅僅是指定的有數據的字段值,拼接成的 map 對象
*
*/
@Test
public void testSelectMaps() {
QueryWrapper<Employee> queryWrapper = new QueryWrapper<>();
queryWrapper.select("user_id", "create_time", "gender", "email")
.like("last_name", "J")
.gt("age", 30);
List<Map<String, Object>> employees = employeeMapper.selectMaps(queryWrapper);
employees.stream()
.forEach(System.out::println);
/**
* {gender=1, user_id=1231759728678379521, [email protected]}
* {gender=1, user_id=1231766698839887873, [email protected]}
* {create_time=2020-02-24 10:35:12.0, gender=1, user_id=1231769513721090049, [email protected]}
*/
}
/**
* 需求:
* 按照直屬上級分組,查詢每組的平均年齡、最大年齡、最小年齡,
* 並且只取年齡和小於 500 的組
* select avg(age) avg_age, min(age) min_age, max(age) max_age from user
* group by manager_id having sum(age) < 500
*/
@Test
public void testSelectMaps2() {
QueryWrapper<Employee> queryWrapper = new QueryWrapper<>();
queryWrapper.select("avg(age) avg_age", ",min(age) min_age", "max(age) max_age")
.groupBy("manager_id")
.having("sum(age) < {0}", 500);
employeeMapper.selectMaps(queryWrapper)
.stream()
.forEach(System.out::println);
}
/**
* selectObjs 的返回值比較特殊:只返回第一個字段的值
*/
@Test
public void testSelectObjs() {
QueryWrapper<Employee> queryWrapper = new QueryWrapper<>();
queryWrapper.select("user_id", "last_name", "gender");
List<Object> objects = employeeMapper.selectObjs(queryWrapper);
// 雖然設置的查詢字段是 三列,sql 語句執行查詢的也是 三列,但是因爲使用 selectObjs 最後賦值到 List 中的只是第一列
objects.forEach(System.out::println);
}
/**
* selectOne 查詢出來的數據只允許有一條或者沒有
* 當查詢多條數據的時候會報錯
* 這個也就是默認只能查詢出一條
*/
@Test
public void testSelectOne() {
QueryWrapper<Employee> queryWrapper = new QueryWrapper<>();
queryWrapper.like("last_name", "Tom");
Employee employee = employeeMapper.selectOne(queryWrapper);
System.out.println(employee);
System.out.println("---------------------------------------------");
// 查詢得到的數據多餘一條就會報錯
// queryWrapper.or()
// .eq("last_name", "Jack");
// Employee employee1 = employeeMapper.selectOne(queryWrapper);
// System.out.println(employee1);
queryWrapper.lt("age", 6);
Employee employee2 = employeeMapper.selectOne(queryWrapper);
System.out.println(employee2); // null
}
}