Mybatis-Plus快速入门 比Mybatis更简单好用的ORM框架_不需要依赖的orm框架

    <optional>true</optional>
    <version>1.18.4</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.6.4</version>
</dependency>
```

在这里面比较重要的依赖包,就是今天我们要使用的mybatis-plus-boot-starter这个依赖了。

3. 创建SpringBoot启动程序

和其他SpringBoot项目的启动程序一样,此处也略过。

4. 配置文件

在配置文件中,我们主要编写的是数据库的连接信息,壹哥在这里使用的是properties格式的配置文件,也就是application.properties。

spring.datasource.password=数据库账号的登录密码
spring.datasource.username=数据库登录账号
spring.datasource.url=jdbc:mysql://localhost:3306/数据库名?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
server.port=8096
spring.application.name=MYBATISPLUSSERVER

5. 编写实体类

由于mybatis-plus,可以不编写SQL语句。那么Java中的对象,到底该如何与数据库中的表进行映射呢?答案其实就在实体类中!我们可以通过不同的注解来完成实体类和具体表,以及实体类的属性和表中的列进行映射。这也是mybatis-plus中非常关键的一步,具体实现如下:

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("emp")  //告知mybatis-plus和数据库中的哪个表关联
public class User extends Model<User> implements Serializable {
    //主键id
    private int id;  //当实体类的属性名和和表中的列名相同,无需做任何设置

    @TableField("name") 
    private String userName; //属性名和列名不一致时设置映射,用userName属性和表中的name列进行关联

    private int age;
    private String email;
}

6. 编写dao接口

我们这里的接口中,不必编写任何CRUD方法,只需要继承BaseMapper接口即可。通过阅读源码我们可以发现,在这个接口中其实已经封装了常见的CURD方法,源码如下:

所以,实体类中就可以省去CRUD方法的代码实现。

package com.qf.pro.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qf.pro.pojo.User;

public interface UserDao extends BaseMapper<User> {
    //BaseMapper<User> 默认封装了CRUD方法,通过泛型制定了所操作的实体类及表
}

7. 编写配置类

这样当SpringBoot启动时,就可以扫描到dao层代码所在的包。

package com.qf.mp2103.dao;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan("com.qf.mp2103.dao")
public class MybatisPlusConfig {
    @Bean
    public PaginationInterceptor paginationInterceptor(){

        return new PaginationInterceptor();
    }
}
9. 业务实现

我们要在业务逻辑层里调用各种CRUD方法,这也是Mybatis-Plus比较核心、重要的点,MybatisPlus会根据之前的配置自动生成SQL语句。

package com.qf.mp2103.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qf.mp2103.dao.UsersDao;
import com.qf.mp2103.pojo.Users;
import com.qf.mp2103.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class UserServiceImpl implements UsersService {
    @Autowired
    private UsersDao usersDao;
    
    @Override
    public List<Users> findUsers() {
        //mybatisplus 自动生成/提供的查询方法
        //由于是无条件查询,参数null
        return usersDao.selectList(null);
    }

    @Override
    public List<Users> findUsersByCondition(String name) {
        //创建QueryWrapper对象
        QueryWrapper<Users> wrapper=new QueryWrapper<Users>();
        //通过wrapper对象来设置查询条件
        //参数1:字段表名
        //参数2:所赋值
        //eq  等于
        wrapper.eq("name",name);

        return usersDao.selectList(wrapper);
    }

    @Override
    public List<Users> findUsersByCondition2(int startAge, int endAge) {
        QueryWrapper<Users> wrapper=new QueryWrapper<Users>();
        //年龄的范围
        wrapper.between("age",startAge,endAge);
        return usersDao.selectList(wrapper);
    }

    @Override
    public List<Users> findUsersByCondition3(Users users) {
        //多条件查询
        QueryWrapper<Users> wrapper=new QueryWrapper<Users>();
        //where name='' and age <=
//        wrapper.eq(true,"name",users.getUserName());
        wrapper.le(true,"age",users.getAge());
        //where name='' or age >=
        wrapper.eq(true,"name",users.getUserName());
        wrapper.ge(false,"age",users.getAge());
        return usersDao.selectList(wrapper);
    }

    @Override
    public List<Users> findUsersByCondition4(Users users) {
        //模糊查询
        QueryWrapper<Users> wrapper=new QueryWrapper<Users>();
        //%关键字%
        wrapper.like("name",users.getUserName());
        //%明
        //wrapper.likeLeft()
        //李%
        //wrapper.likeRight();
        return usersDao.selectList(wrapper);
    }

    //排序查询
    @Override
    public List<Users> findUsers2() {
        QueryWrapper<Users> wrapper=new QueryWrapper<Users>();
        //设置排序条件
        wrapper.orderByDesc("id");

        return usersDao.selectList(wrapper);
    }

    @Override
    public List<Users> findUsersByPage(int page, int size) {
        //用于分页查询
        //select * from users  limit X,X
        QueryWrapper<Users> wrapper=new QueryWrapper<Users>();
        int start=(page-1)*size;
        //拼接
        wrapper.last("limit "+start+","+size);
        return usersDao.selectList(wrapper);
    }

    @Override
    public List<Users> findUsers3() {
        //查询指定列
        QueryWrapper<Users> wrapper=new QueryWrapper<Users>();
        //设置查询的列
        wrapper.select("id","email");

        return usersDao.selectList(wrapper);
    }

    @Override
    public boolean addUser(Users users) {
        //添加用户
        int result=usersDao.insert(users);
        return result==1;
    }

    @Override
    public boolean deleteUser(int id) {
        //删除用户--单个删除
        int result=usersDao.deleteById(id);
        //批量删除
        //usersDao.deleteBatchIds(List<Integer> list);
        return result==1;
    }

    @Override
    public boolean updateUser(Users users) {
        //要求表中的主键列是id的名字,使用id列作为条件
        int result=usersDao.updateById(users);
        //如果主键列的名字不是id,或者条件不是主键id


![img](https://img-blog.csdnimg.cn/img_convert/6683590d246a0e137965eb67471ace76.png)
![img](https://img-blog.csdnimg.cn/img_convert/c5c550f129978f4c315bc7e92b21ebe7.png)
![img](https://img-blog.csdnimg.cn/img_convert/933b1d360e0b337d1303c261ea269e0d.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**

747)]
[外链图片转存中...(img-a3AwQyNs-1714415315748)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值