基本的MyBatis-Plus内容

本文介绍了如何在MyBatis-Plus中使用IService与ServiceImpl进行业务逻辑封装,包括实体类User的设计、mapper接口UserMapper的定义、IUserService接口实现及Service实现类。通过实例展示了查询、排序、删除和复杂查询等操作,并讲解了mapper与service的区别和MyBatis-Plus的配置技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1在MyBatis-Plus中有一个接口 IService和其实现类 ServiceImpl,封装了常见的业务层逻辑

具体的步骤如下

1.首先有一个自己的实体类

@AllArgsConstructor
@NoArgsConstructor
@Data
@ToString
//TableName这个注解可以防止数据库中的表名和数据库中的数据表名不一致现象
@TableName("user")
public class User {
    @TableId(value = "id")
//    这个TableId 1.可以设置数据的主键对应的属性,默认值,与mybatis_plus联合使用,还可以使主键名称不一致时使用2.可以设置主键的属性增长方式type = IdType.AUTO
    private Long id;
//    @TableField 当表结构中的字段和实体类中的属性不一致的情况下可以设置映射关系(如name 映射成为t_name)
//    注意如果数据库中的user_name 实体中的是username,mybatis_plus会帮助我们自动完成驼峰命名
    private String name;
    private Integer age;
    private String email;
//    0表示没有删除  1表示已经逻辑删除
    @TableLogic(value = "0",delval = "1")
    private Integer isDeleted;
}

2 在mapper中一定要继承BaseMapper,里面写上自己的要操作的类如User

//Mybatisplus必须继承BaseMapper,同时必须指定要操作的实体对象
public interface UserMapper extends BaseMapper<User> {
}

3.业务逻辑层一定要实现Iservice接口,接口实现类要实现自己的业务逻辑

//自定义的service,需要继承Iservice接口
public interface IUserService extends IService<User> {
}
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements IUserService {
}

自己写的业务逻辑只需要继承IService接口即可实现基本的增删改查操作,方便用户编程。

测试类


@SpringBootTest
class MybatisPlusApplicationTests1 {
    @Resource
    private UserMapper userMapper;
    @Resource
    private IUserService userService;

    /**
    *查询姓名中包含o,且年龄大于20,email不为空的对象
     */
    @Test
    void select(){
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.like("name","o")
                .gt("age",20)
                .isNotNull("email");
        final List<User> users = userMapper.selectList(wrapper);
        System.out.println(users);
    }
    /**
     * 首先根据年龄升序,年龄相同的情况下根据id降序
     */
    @Test
    void selectA(){
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.orderByAsc("age").orderByDesc("id");
        final List<User> users = userMapper.selectList(wrapper);
//        System.out.println(users);
        users.forEach(System.out::println);
    }
    /**
     * 删除年龄超过179的
     *
     */
    @Test
    void delete(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.gt("age",179);
        System.out.println(userMapper.delete(queryWrapper));
    }
    /**
     *查询姓名中包含o,且年龄大于20,email不为空的对象
     * 组合查询内容
     */
    @Test
    void selectMap(){
        QueryWrapper<User> wrapper = new QueryWrapper<>();
//        wrapper.like("name","o")
//                .gt("age",20)
//                .isNotNull("email");
        wrapper.and((item) ->{
            item.like("name","o")
                    .gt("age",20);
        }).or((item)->{
            item.isNull("email");
        });
        System.out.println(userMapper.selectList(wrapper));

        final List<User> users = userMapper.selectList(wrapper);
        System.out.println(users);
    }
//    查询特定的字段
    @Test
    void selectMaps(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.and((item) ->{
            item.gt("age",20)
                    .like("name","o");
        }).or((item) ->{
            item.isNull("email");
        }).select("id","name","age");
        List<Map<String,Object>> list = userMapper.selectMaps(queryWrapper);
        list.forEach(System.out::println);
    }
//    简单的子查询内容
    @Test
    void selectChildren(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.inSql("id","select id from user where id < 6");
        List<Map<String,Object>> list = userMapper.selectMaps(queryWrapper);
        list.forEach(System.out::println);
    }
    @Test
    void update(){
        UpdateWrapper<User> wrapper = new UpdateWrapper<>();
        wrapper.set("name","yzj")
                .set("email","123")
                .eq("id",3l);
        final int update = userMapper.update(null, wrapper);
        System.out.println(update);

    }
//    动态sql查询
    @Test
    void sqlDongtai(){
        String name = "yzj";
        Integer age = null;
        String email = null;
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        if(StringUtils.isNotBlank(name)){
            queryWrapper.eq("name",name);
        }
//        工作中经常用到的
        queryWrapper.eq(StringUtils.isNotBlank(name),"name",name);
//        if(age > 0 && age != null){
//            queryWrapper.eq("age",age);
//        }
        System.out.println(userMapper.selectList(queryWrapper));
    }
//    分页查询处理
    @Test
    void pageQuery(){
        Page<User> page = new Page<>(1,5);
        final Page<User> page1 = userMapper.selectPage(page, null);
        final List<User> records = page1.getRecords();
        records.forEach(System.out::println);
        System.out.println(page1.getCurrent());
        System.out.println(page1.getSize());
        System.out.println(page1.getTotal());
        System.out.println(page1.getPages());

    }

注意批量查询 批量删除 批量插入内容saveBatch这些内容

指定日志输出 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl # 配置MyBatis-Plus操作表的默认前缀 mybatis-plus.global-config.db-config.table-prefix=t_

1.mapper层和service层有什么区别
一个是业务接口,一个是正常的接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值