MybatisPlus--3.6 其他查詢

包含:
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
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章