MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
它已经封装好了一些crud方法,我们不需要再写xml了,直接调用这些方法就行,就类似于JPA(java持久层API,可以理解为一种规范,Hibernate就是其具体一个实现)。
Mybatis优势:
SpringBoot引入:
-
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <version>5.1.47version>
- dependency>
-
- <dependency>
- <groupId>com.alibabagroupId>
- <artifactId>druidartifactId>
- <version>1.0.11version>
- dependency>
-
- <dependency>
- <groupId>com.baomidougroupId>
- <artifactId>mybatis-plus-boot-starterartifactId>
- <version>3.1.0version>
- dependency>
application.yml配置:
- # mybatis-plus相关配置
- mybatis-plus:
- # xml扫描,多个目录用逗号或者分号分隔(告诉 Mapper 所对应的 XML 文件位置)
- mapper-locations: classpath:mapper/*.xml
- # 以下配置均有默认值,可以不设置
- global-config:
- db-config:
- #主键类型 AUTO:"数据库ID自增" INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
- id-type: auto
- #字段策略 IGNORED:"忽略判断" NOT_NULL:"非 NULL 判断") NOT_EMPTY:"非空判断"
- field-strategy: NOT_EMPTY
- #数据库类型
- db-type: MYSQL
- configuration:
- # 是否开启自动驼峰命名规则映射:从数据库列名到Java属性驼峰命名的类似映射
- map-underscore-to-camel-case: true
- # 如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段
- call-setters-on-nulls: true
- # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
- log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
配置信息如下:
数据库信息如下:
设置实体类:
- @Data
- @TableName("user") // 表名
- public class UserEntity {
-
- @TableId(type = IdType.AUTO)
- private Integer id;
- private String name;
- private String password;
- private Integer rank;
- private Integer status;
- }
注解详细解释可以参考:注解 | MyBatis-Plus
创建Mapper接口:
- import com.baomidou.mybatisplus.core.mapper.BaseMapper;
- import com.lmlsj.springbootdemo.entity.UserEntity;
- import org.springframework.stereotype.Repository;
-
- @Repository
- public interface UserMapper extends BaseMapper
{ - }
创建service:
创建control层:
- package com.lmlsj.springbootdemo.control;
-
- import com.lmlsj.springbootdemo.Util.ResultVo.NotControllerResponseAdvice;
- import com.lmlsj.springbootdemo.entity.UserEntity;
- import com.lmlsj.springbootdemo.service.impl.UserServiceImpl;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.bind.annotation.RestController;
-
- import java.util.List;
-
- @RestController
- @RequestMapping("/user")
- public class UserControl {
-
- @Autowired
- private UserServiceImpl userService;
-
- @GetMapping("/findbyid")
- @NotControllerResponseAdvice
- public UserEntity FindUserByID(@RequestParam("id") int id){
- return userService.GetUserInfoById(id);
- }
-
- @GetMapping("/list")
- public List
ListUser(){ - List
userList = userService.list(); - return userList;
- }
-
- }
实现效果:
list接口实现效果:
可以看到一些基本的增删改查操作都已经进行了封装,无需再单独写SQL语句。
前面案例介绍了两个接口,分别是Service CRUD 接口和Mapper CRUD 接口。
Service CRUD 接口支持的查询方式有:
save、saveOrUpdate、remove、update、get、list、page、count、chain
Mapper CRUD 接口支持的查询方式有:
insert、delete、update、select
具体介绍可以参考:CRUD 接口 | MyBatis-Plus
其次可以使用条件构造器进行查询:
AbstractWrapper是QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父类用于生成 sql 的 where 条件。
- @GetMapping("/query1")
- public ResultVo Query1(){
- QueryWrapper
query = new QueryWrapper<>(); - query.select("id","name","rank");
- List
userlist = userService.list(query); - userlist.forEach(user -> {
- System.out.println(user.getName() + user.getRank());
- });
-
-
- //Lamda查询方式
- QueryWrapper
query2 = new QueryWrapper<>(); - query2.lambda().eq(UserEntity::getName,"lmslj");
- List
userlist2 = userService.list(query2); - userlist2.forEach(user -> {
- System.out.println(user.getName() + user.getPassword());
- });
-
- return new ResultVo("前往console查看");
- }
查看结果:
可以根据需要构造其他查询条件:
query2.like("name","l");
query2.between("rank",0,2);
条件构造器参考:条件构造器 | MyBatis-Plus
目前已经支持较丰富的插件,使用可以参考:插件主体 | MyBatis-Plus