MybatisPlus学习(SpringBoot + Mybatis Plus + Lombok 搭建)--适合入门

Mybatis Plus 学习

Mybatis-Plus介绍
Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,
为简化开发、提高效率而生。这是官方给的定义,关于mybatis-plus的更多介绍及特性,
可以参考 mybatis-plus官网 。那么它是怎么增强的呢?其实就是它已经封装好了一些crud方法,
我们不需要再写xml了,直接调用这些方法就行,就类似于JPA。

Lombok 介绍
Lombok介绍网上很多博主都分享过,远比我讲的好。我这里就直接放个官网吧 - -> Lombok 官网

更多的我这里就不多赘述了,大家想了解可以自己去找度娘,我们直接开始吧


maven(pom.xml)基础配置

<dependencies>
		<!--springboot依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--lombox依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--MyBatis Plus依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.0</version>
        </dependency>
        <!--json依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.28</version>
        </dependency>
        <!--MySQL连接依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

    </dependencies>

这里就主要讲一下mybatis-plus的三种使用方法

大家先看看每种方法的使用,我后面会把一些关键的注解或是继承类的介绍放在下面

1. ActiveRecord模式调用

PS:Active Record 是一种数据访问设计模式,它可以帮助你实现数据对象Object到关系数据库的映射。

model层:↓
@TableName(value = "demo_user")
@Data
public class User extends Model<User> {

    //id
    @TableId(type = IdType.UUID)
    private String id;

    //姓名
    private String userName;

    //年龄
    private Integer userAge;

    //性别
    private Integer userGender;

    //手机号
    private String phone;

    //时间
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private Date time;
}
controller层:↓
@Controller
@RequestMapping("/user")
@Component
@Slf4j
public class UserController {


    /**
     * 查询(可按照条件)
     * @return
     */
    @RequestMapping(value = "/queryUser", method = RequestMethod.POST)
    @ResponseBody
    public JSONObject queryUser(){
        JSONObject jsonObject=new JSONObject();
        Map<String,Object> params=new HashMap<>();
        User user=new User();
        List<User>users=user.selectAll();
        jsonObject.put("users",users);
        return jsonObject;
    }

    /**
     * 分页查询
     * @param pageNo
     * @param pageSize
     * @return
     */
    @RequestMapping(value = "/pageUser", method = RequestMethod.POST)
    @ResponseBody
    public JSONObject pageUser(Integer pageNo,Integer pageSize){
        JSONObject jsonObject=new JSONObject();
        User user=new User();
        Page<User> page = new Page<>(pageNo, pageSize);
        IPage<User> users=user.selectPage(page, null);
        jsonObject.put("users",users);
        return jsonObject;
    }

    /**
     * 添加或修改数据
     * @param user
     * @return
     */
    @RequestMapping(value = "/addOrUpdUser", method = RequestMethod.POST)
    @ResponseBody
    public JSONObject addOrUpdUser(User user){
        JSONObject jsonObject=new JSONObject();
        user.setTime(new Date());
        boolean success=user.insert();
        jsonObject.put("success",success);
        return jsonObject;
    }

    /**
     * 根据id删除数据
     * @param id
     * @return
     */
    @RequestMapping(value = "/delUser", method = RequestMethod.POST)
    @ResponseBody
    public JSONObject delUser(String id){
        JSONObject jsonObject=new JSONObject();
        User user=new User();
        boolean success=user.deleteById(id);
        jsonObject.put("success",success);
        return jsonObject;
    }

}

2. 继承通用Mapper接口方式调用

model层:↓
@TableName(value = "demo_user")
@Data
public class User {

    //id
    @TableId(type = IdType.UUID)
    private String id;

    //姓名
    private String userName;

    //年龄
    private Integer userAge;

    //性别
    private Integer userGender;

    //手机号
    private String phone;

    //时间
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private Date time;
}
Mapper层:↓
@Repository
public interface UserMapper {

}
controller层:↓
@Controller
@RequestMapping("/user")
@Component
@Slf4j
public class UserController {

    @Autowired
    private UserMapper userMapper;

    /**
     * 查询(可按照条件)
     * @return
     */
    @RequestMapping(value = "/queryUser", method = RequestMethod.POST)
    @ResponseBody
    public JSONObject queryUser(){
        JSONObject jsonObject=new JSONObject();
        Map<String,Object> params=new HashMap<>();
        Collection<User> users=userMapper.selectByMap(params);
        jsonObject.put("users",users);
        return jsonObject;
    }

    /**
     * 分页查询
     * @param pageNo
     * @param pageSize
     * @return
     */
    @RequestMapping(value = "/pageUser", method = RequestMethod.POST)
    @ResponseBody
    public JSONObject pageUser(Integer pageNo,Integer pageSize){
        JSONObject jsonObject=new JSONObject();
        Page<User> page = new Page<>(pageNo, pageSize);
        IPage<User> users=userMapper.selectPage(page, null);
        jsonObject.put("users",users);
        return jsonObject;
    }

    /**
     * 添加或修改数据
     * @param user
     * @return
     */
    @RequestMapping(value = "/addOrUpdUser", method = RequestMethod.POST)
    @ResponseBody
    public JSONObject addOrUpdUser(User user){
        JSONObject jsonObject=new JSONObject();
        user.setTime(new Date());
        int success=userMapper.insert(user);
        jsonObject.put("success",success);
        return jsonObject;
    }

    /**
     * 根据id删除数据
     * @param id
     * @return
     */
    @RequestMapping(value = "/delUser", method = RequestMethod.POST)
    @ResponseBody
    public JSONObject delUser(String id){
        JSONObject jsonObject=new JSONObject();
        int success=userMapper.deleteById(id);
        jsonObject.put("success",success);
        return jsonObject;
    }

}

3. 继承通用IService接口方式调用

model层:与第二种方法的一致↑
mapper层:↓
@Repository
public interface UserMapper extends BaseMapper<User> {

}
service层:↓
public interface UserService  extends IService<User> {
    
}
serviceImpl层:↓
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

}
controller层:↓
@Controller
@RequestMapping("/user")
@Component
@Slf4j
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 查询(可按照条件)
     * @return
     */
    @RequestMapping(value = "/queryUser", method = RequestMethod.POST)
    @ResponseBody
    public JSONObject queryUser(){
        JSONObject jsonObject=new JSONObject();
        Map<String,Object> params=new HashMap<>();
        Collection<User> users=userService.listByMap(params);
        jsonObject.put("users",users);
        return jsonObject;
    }

    /**
     * 分页查询
     * @param pageNo
     * @param pageSize
     * @return
     */
    @RequestMapping(value = "/pageUser", method = RequestMethod.POST)
    @ResponseBody
    public JSONObject pageUser(Integer pageNo,Integer pageSize){
        JSONObject jsonObject=new JSONObject();
        Page<User> page = new Page<>(pageNo, pageSize);
        IPage<User> users=userService.page(page);
        jsonObject.put("users",users);
        return jsonObject;
    }

    /**
     * 添加或修改数据
     * @param user
     * @return
     */
    @RequestMapping(value = "/addOrUpdUser", method = RequestMethod.POST)
    @ResponseBody
    public JSONObject addOrUpdUser(User user){
        JSONObject jsonObject=new JSONObject();
        user.setTime(new Date());
        boolean success=userService.saveOrUpdate(user);
        jsonObject.put("success",success);
        return jsonObject;
    }

    /**
     * 根据id删除数据
     * @param id
     * @return
     */
    @RequestMapping(value = "/delUser", method = RequestMethod.POST)
    @ResponseBody
    public JSONObject delUser(String id){
        JSONObject jsonObject=new JSONObject();
        boolean success=userService.removeById(id);
        jsonObject.put("success",success);
        return jsonObject;
    }

}

以上就是常用的三种调用模式

接下来介绍一下一些关键的注解或是继承类

1.Mybatis-Plus 常用注解
  • @TableName:对数据表名注解
  • @TableId:表主键标识
    @TableId(value = “id”, type = IdType.AUTO):自增
    @TableId(value = “id”, type = IdType.ID_WORKER_STR):分布式全局唯一ID字符串类型
    @TableId(value = “id”, type = IdType.INPUT):自行输入
    @TableId(value = “id”, type = IdType.ID_WORKER):分布式全局唯一ID 长整型类型
    @TableId(value = “id”, type = IdType.UUID):32位UUID字符串
    @TableId(value = “id”, type = IdType.NONE):无状态
  • @TableField:表字段标识
    @TableField(exist = false):表示该属性不为数据库表字段,但又是必须使用的。
    @TableField(exist = true):表示该属性为数据库表字段。
    @TableField(condition = SqlCondition.LIKE):表示该属性可以模糊搜索。
    @TableField(fill = FieldFill.INSERT):注解填充字段 ,生成器策略部分也可以配置!
  • @Version:乐观锁注解、标记
  • @EnumValue:通枚举类注解
  • @TableLogic:表字段逻辑处理注解(逻辑删除)
  • @SqlParser:租户注解
  • @SqlParser:租户注解
2.Mybatis-Plus 常用继承
  • Model 应该是为了单表实体的操作方便,具体是为了支持 ActiveRecord 形式调用方便而设计出来的!
    ActiveRecord 官方介绍
  • BaseMapper 是为mapper节省了基础的增删改查的封装!
    BaseMapper 方法详解
  • IService<> 这也减少了相对应的代码工作量,把通用的接口提取到公共。
    IService 方法注解

总结

总的来说 Mybatis-plus 还是很方便的,可以省掉很多基础的代码(增删改查)
方法封装的也是很完善,各种查询的方式、添加的方式等基本上都有
但要是比较复杂的SQL或是逻辑关系,还是得自己上手敲
还是那句话 “代码是死的人是活的,根据自身情况修改”,百度是个好东西!
要是有大佬有更好的方发或是连接,有时间的话可以在评论区留言,供大家参考,谢谢!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值