JavaWeb学习--MyBatis-Plus整合SpringBoot的ServiceImpl方法(查找部分)

        与BaseMapper相同,MyBatis-Plus同样也为SpringBoot的Service层提供了一些基础的方法,使用前我们在Service层继承IService

import com.baomidou.mybatisplus.extension.service.IService;


public interface StudentService extends IService<Student>//其中<>内的为对应的实体类
 {

}

        然后再创建对应的ServiceImpl,继承MyBatis-Plus提供的ServiceImpl

import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

@Service
public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements StudentService 
 {
}

        然后就可以在测试内使用一些基础的方法了。首先创建测试项目,其基本内容形式如下


@SpringBootTest
public class Test2 {

    @Autowired
    private StudentService studentService;
    //其他测试方法

}

        第一部分是查询内容,首先是查询数据库内有多少条数据:

    @Test
    public void GetCount() {
        // 查询数据库中的总记录数
        long count = studentService.count();
        System.out.println("总记录数:" + count);
    }

        可以看到其自动的实现了在Mysql内查询数据的数量,不需要再手动的写SQL语句,其运行结果如下:

        然后是查询用户的数据,例如:

   @Test
    public void TestToGetUserById() {
        // 根据ID查询用户记录
        Student s = studentService.getById(1L);//调用查询id的方法
        assertNotNull(s);//检查是否为null,为null则抛出异常,非必要方法,在没有需求的情况下可以删除
        System.out.println("查询结果:" + s);
    }

        其运行结果和自动实现的SQl语句如下:

        其中的is_deleted为逻辑删除的标志,即删除时在数据库内只修改改属性以实现可恢复的删除,需要手动配置,默认下是没有这个属性。

        然后是根据多个用户id,批量的查询用户的信息:

   @Test
    public void testListByIds() {
        // 根据ID列表批量查询用户记录
        List<Long> ids =Arrays.asList(1L, 2L);//要查询的用户id列表
        List<Student> ss = studentService.listByIds(ids);
        System.out.println("用户列表:" + ss);
    }

        其运行结果和自动实现的SQl语句如下:

        而根据其他条件如姓名啊,性别啊,有多种方式可以实现,这里学习几个常用的,首先是使用Map实现根据条件查询:

    @Test
    public void testListByMap() {
        // 根据条件查询用户记录
        Map<String, Object> Map= new HashMap<>();
        Map.put("age", "19");//前者为条件的属性名,后后者条件的具体值
        Map.put("sex", "女");
        List<Student> ss = studentService.listByMap(Map);
        System.out.println("用户列表:" + ss);
    }

        运行结果及SQL语句如下:

        然后是基于条件构造器Wrapper的查找,首先根据条件查找单一目标,且符合条件的目标必须只能有一个,否则会报错:

    @Test
    public void testGetOne() {
        // 根据条件查询单个用户记录,需要保证查询条件唯一
        QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("name", "镜野");//前者为条件的属性名,后后者条件的具体值
        Student s = studentService.getOne(queryWrapper);
        System.out.println("查询结果:" + s);
    }

        运行结果及SQl语句如下:

        而如果我们查找出来的有多个符合条件的结果,如将条件名改为age,值改为19,则:

        而其可以改变写法,实现只查找一个,如果查找的结果有多个符合条件的,取第一个:

    @Test
    public void testGetOnePro() {
        // 根据条件查询单个用户记录,如出现多个符合条件的,则选取查询到的第一个,且不抛出异常
        QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("age", "19");
        Student s = studentService.getOne(queryWrapper, false);
        System.out.println("查询结果:" + s);
    }

        运行结果如下:

        初次之外,也可以使用Map接收上述的查询的结果:

   @Test
    public void GetOneForMap() {
        // 根据条件查询单个用户记录并返回Map,如出现多个符合条件的,则选取查询到的第一个,且不抛出异常
        QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("age", "19");
        Map<String, Object> map = studentService.getMap(queryWrapper);
        System.out.println("查询结果:" + map);
    }

        然后是查询所有的数据:

   @Test
    public void testList() {
        // 查询所有用户记录
        List<Student> ss = studentService.list();
        System.out.println("用户列表:" + ss);
    }

        结果如下:

        而出了list集合的写法外,我们也可以使用Map来写,代码如下:

    @Test
    public void ListMaps() {
        // 查询所有用户记录并返回Map列表
        List<Map<String, Object>> maps = studentService.listMaps();
        System.out.println("用户列表:" + maps);
    }

        运行结果如下:

        同时,IService也提供了分页的功能:

   @Test
    public void testPage() {
        // 分页查询用户记录
        IPage<Student> page = new Page<>(1, 5);//前者为当前的页数,后者为一页放多少行数据
        IPage<Student> studentPage = studentService.page(page);
        System.out.println("分页查询结果:" + studentPage.getRecords());
    }

        运行结果如下:

        而同样的,我们也可以使用Map来接收数据:

   @Test
    public void testPageMaps() {
        // 分页查询用户记录并返回Map列表
        IPage<Map<String, Object>> page = new Page<>(2, 5);//前者为当前的页数,后者为一页放多少行数据
        IPage<Map<String, Object>> mapPage = studentService.pageMaps(page);
        System.out.println("分页查询结果:" + mapPage.getRecords());

    }

        结果如下

        同时,我们可以将分页和查询结合,实现有条件的查询的同时对数据进行分页,如基于Wrapper的版本:

    @Test
    public void testPageMapsByAge() {
        IPage<Map<String, Object>> page = new Page<>(2, 2);
        QueryWrapper<Student> queryWrapper = new QueryWrapper<>();// 创建QueryWrapper并添加条件
        queryWrapper.eq("age", 19); // 等于19的条件
        IPage<Map<String, Object>> mapPage = studentService.pageMaps(page, queryWrapper);
        System.out.println("分页查询结果:" + mapPage.getRecords());
    }

        运行结果如下:

        而使用实体类的版本如下:

    @Test
    public void testPagByIdAndSex() {
        IPage<Student> page = new Page<>(1, 2);//前者为当前的页数,后者为一页放多少行数据
        QueryWrapper<Student> queryWrapper = new QueryWrapper<>();// 创建QueryWrapper并添加条件
        queryWrapper.eq("age", 19);
        queryWrapper.eq("sex", "女");
        IPage<Student> studentPage = studentService.page(page,queryWrapper);
        System.out.println("分页查询结果:" + studentPage.getRecords());
    }

运行结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值