MybatisPlus详细教程,看后不会你打我............,MybatisPlus入门指南,零基础教程,学不会我负责!

马肤

温馨提示:这篇文章已超过464天没有更新,请注意相关的内容是否还可用!

本文提供MybatisPlus的详细教程,内容涵盖该框架的基本使用、高级特性及优化技巧等。教程旨在帮助开发者快速掌握MybatisPlus的核心功能,包括CRUD操作、分页查询、条件构造器等。阅读本文后,你将能轻松运用MybatisPlus进行项目开发,如有不懂,看后不精可找我,绝不推卸责任。

目录

官网

创建第一个mybatisPlus项目-mapper层继承BaseMapper实现

通过MybatisPlus提供的Service实现增删改查

MybatisPlus的常用注解

关于Wrapper接口及其实现类的使用

通过wrapper接口实现简单条件查询

通过wrapper接口实现排序

通过wrapper实现组合查询

SELECT方法 

子查询

UpdateWrapper 

动态sql 

分页查询 

配置MybatisX插件


官网

        个人感觉,mybatisplus是所有的技术中,通过官网学习起来无障碍的技术,纯中文的教程对我这种对技术英文懵的人简直就是福星,所以大家时间条件充足的话,还是推荐大家通过官网进行学习,官网地址:简介 | MyBatis-Plus。

mybatisplus的优势在于:

        1. 将常用的CURD方法封装进mapper,使我们可以快速完成功能。

        2. 将常用的CURD方法封装进service,使我们无需编写一些固定场景的service代码。

        3. 可以不通过mapper.xml运行CURD功能。

        4. 通过可视化工具mybatisX,连接数据库的同时,实现代码的生成。

说这么多概念,可能大家还是很懵,下面我们通过案例对比一下吧:

传统SSM项目的开发步骤(以springboot为例)

1. 创建controller。

2. 创建service,impl,编写代码调用mapper层。

3. 创建mapper类和xml文件,编写代码。

4. 当然在传统项目中也可以自动生成代码,这里你需要导入依赖,并修改generator.xml文件的内容用以生成代码。

SpringBoot+Mybatis:

1. 创建controller

2. 创建service、impl,如果mybatisplus提供的方法足够实现你的功能的话,那么恭喜你,可以不用编写service调用mapper的代码。

3. 创建mapper接口,如果mybatisplus提供的方法足够用的话,那么恭喜你,可以不用在mapper接口中定义方法了,也可以不用定义mapper.xml。

4. 此外,我们还可以通过mybatisX插件,完成service、mapper、entity层代码的自动生成,如果你的功能只涉及单表,且业务逻辑不复杂,那么恭喜你,你完全可以在很短的时间内完成一套CURD功能。

5. 那有人会担心了,怕功能被封装太死,像hibernate一样太复杂了怎么办,告诉你,丝毫不用担心,我们还是可以像使用mybatis一样使用mybatisPlus的。

大家如果觉得写的还行,还请给个赞和关注吧....

废话少说了....直接上代码吧..................

源码下载地址:

链接:https://pan.baidu.com/s/1Zrlz97Z37R99uK9e0Ukg1w?pwd=34ts 
提取码:34ts 
--来自百度网盘超级会员V3的分享

创建第一个mybatisPlus项目-mapper层继承BaseMapper实现

        下面我们来创建第一个mybatis项目,感受一下无需定义mybatis.xml,直接调用mapper接口的写法吧:

1. 通过创建springboot项目的形式,创建我们的工程:

MybatisPlus详细教程,看后不会你打我............,MybatisPlus入门指南,零基础教程,学不会我负责! 第1张MybatisPlus详细教程,看后不会你打我............,MybatisPlus入门指南,零基础教程,学不会我负责! 第2张 MybatisPlus详细教程,看后不会你打我............,MybatisPlus入门指南,零基础教程,学不会我负责! 第3张 2. 创建项目完毕,我们来导入依赖吧:


    com.alibaba
    druid-spring-boot-starter
    1.2.6



    com.baomidou
    mybatis-plus-boot-starter
    3.4.2

 3. 配置application.yml文件:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    type: com.alibaba.druid.pool.DruidDataSource
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

 4. 在启动类上增加MapperScan注解,扫描mapper类

@SpringBootApplication
public class Mybatis02Application {
    public static void main(String[] args) {
        LogFactory.useCustomLogging(StdOutImpl.class);
        SpringApplication.run(Mybatis02Application.class, args);
    }
}

5. 创建controller类、service接口、impl、mapper接口 :

controller代码如下:

@RestController
public class UserController {
    @Autowired
    UserService userService;
    /**
     * 查询所有信息
     */
    @RequestMapping("getUserList")
    public List getUserList(){
        return userService.getUserList();
    }
    /**
     *按id查询
     */
    @RequestMapping("getUserByid")
    public User getUserByid(@RequestParam long id){
        return userService.getUserByid(id);
    }
    /**
     *新增
     */
    @RequestMapping("insertUser")
    public Map insertUser(@RequestParam long id, @RequestParam String name, @RequestParam int age, @RequestParam String email){
        User user = new User();
        user.setId(id);
        user.setName(name);
        user.setAge(age);
        user.setEmail(email);
        int i = userService.insertUser(user);
        String msg = i>0 ? "success" : "error" ;
        Map resultMap = new HashMap();
        resultMap.put("msg",msg);
        return resultMap;
    }
    /**
     *删除用户
     */
    @RequestMapping("delUser")
    public Map delUser(@RequestParam long id){
        int i = userService.delUser(id);
        String msg = i>0 ? "success" : "error" ;
        Map resultMap = new HashMap();
        resultMap.put("msg",msg);
        return resultMap;
    }
    /**
     *修改用户
     */
    @RequestMapping("updUser")
    public Map updUser(@RequestParam long id, @RequestParam String name, @RequestParam int age, @RequestParam String email){
        User user = new User();
        user.setId(id);
        user.setName(name);
        user.setAge(age);
        user.setEmail(email);
        int i = userService.updUser(user);
        String msg = i>0 ? "success" : "error" ;
        Map resultMap = new HashMap();
        resultMap.put("msg",msg);
        return resultMap;
    }
    /**
     * 查询所有信息
     */
    @RequestMapping("getUserListByCondition")
    public List getUserListByCondition(@RequestParam String name, @RequestParam int age, @RequestParam String email){
        User user = new User();
        user.setName(name);
        user.setAge(age);
        user.setEmail(email);
        return userService.getUserListByCondition(user);
    }
}

Service接口的代码:

public interface UserService {
    List getUserList();
    int insertUser(User user);
    int delUser(long id);
    int updUser(User user);
    User getUserByid(Long id);
    List getUserListByCondition(User user);
}

ServiceImpl的代码:

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    UserMapper userMapper;
    /**
     * 获取所有的结果
     * @return
     */
    @Override
    public List getUserList() {
        return userMapper.selectList(null);
    }
    /**
     * 新增
     * @param user
     * @return
     */
    @Override
    public int insertUser(User user) {
        return userMapper.insert(user);
    }
    /**
     * 删除
     * @param id
     * @return
     */
    @Override
    public int delUser(long id) {
        return userMapper.deleteById(id);
    }
    /**
     * 修改
     * @param user
     * @return
     */
    @Override
    public int updUser(User user) {
        return userMapper.updateById(user);
    }
    //按id查询
    @Override
    public User getUserByid(Long id) {
        return userMapper.selectById(id);
    }
}

Mapper的代码:

@Repository
public interface UserMapper extends BaseMapper {
}

6. 下面可以直接在浏览器中调用接口试试看了。 

通过MybatisPlus提供的Service实现增删改查

        通过上面的代码我们可以发现,如果功能只是一套简单的CURD,在service代码中没有复杂的计算,那么我们重复的去写service是一件很痛苦的事情,没关系,mybatisplus帮我们解决,你需要这么做:

controller层代码中,直接调用service中的CURD方法即可:

@RestController
public class MyUserController {
    @Autowired
    MyUserService myUserService;
    /**
     *查询所有的信息
     */
    @RequestMapping("getAllUser")
    public List getAllUser(){
        return myUserService.list();
    }
    /**
     *按id查询
     */
    @RequestMapping("getUserById")
    public User getUserById(Long id){
        return myUserService.getById(id);
    }
    /**
     *按id删除
     */
    @RequestMapping("delById")
    public boolean delById(Long id){
        User user = new User();
        user.setId(id);
        return myUserService.removeById(user);
    }
    /**
     *新增
     */
    @RequestMapping("saveUser")
    public boolean saveUser(@RequestParam long id, @RequestParam String name, @RequestParam int age, @RequestParam String email){
        User user = new User();
        user.setId(id);
        user.setName(name);
        user.setAge(age);
        user.setEmail(email);
        return myUserService.save(user);
    }
    /**
     *按id修改
     */
    @RequestMapping("updateUser")
    public boolean updateUser(@RequestParam long id, @RequestParam String name, @RequestParam int age, @RequestParam String email){
        User user = new User();
        user.setId(id);
        user.setName(name);
        user.setAge(age);
        user.setEmail(email);
        return myUserService.updateById(user);
    }
}

Service接口代码,继承IService接口

public interface MyUserService extends IService {
}

 service实现类代码,继承ServiceImpl实现类,实现Service接口:

@Service
public class MyUserServiceImpl extends ServiceImpl implements MyUserService {
}

 mapper接口在哪?哈哈。。。不用定义,是不是很爽

MybatisPlus的常用注解

@TableName(value=”数据库表名称”):加在实体类上,表示实体类映射的数据库表名称

        配置在yml中,代表映射的数据库前缀,是以什么开头的,在yml中配置后,在实体类上可以少配置前缀和后缀

mybatis-plus:
  global-config:
    db-config:
      table-prefix: t_

@TableId(value=”uid” type= IdType.ASSIGN_ID)

        配置在实体类,指的是实体类中的字段映射到数据库的哪个id字段,字段类型也可统一配置在yml中,在yml中进行全局配置,配置后表示数据库的字段类型是自增。

mybatis-plus:
  global-config:
    db-config:
      id-type: auto

@TableField(“表中的字段名称”)  :

        如果表中字段以下划线为命名,实体类中字段已经以驼峰式命名,无需使用此注解 ;如果表中字段以下划线为命名,实体类中字段不按照驼峰式命名规则,需要使用此注解。

@TableLogic(value=”0”,delval=”1”) :

        实现逻辑删除(0代表原来的值正常,1代表删除) 在实体类的字段上配置

MybatisPlus详细教程,看后不会你打我............,MybatisPlus入门指南,零基础教程,学不会我负责! 第4张

也可在全局的配置文件中配置逻辑删除属性:

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: is_deleted
      logic-delete-value: 1
      logic-not-delete-value: 0

关于Wrapper接口及其实现类的使用

什么是wrapper接口呢?有什么用呢?这个接口的实现类是用来拼接动态sql的,举例说明一下:

比如我们经常使用的动态sql:

    usrLoginNm = #{usrloginnm,jdbcType=VARCHAR},

        简而言之,wrapper接口的作用就是,以代码的形式,将上面的if判断中的拼接sql和塞值操作传入到mybatisp定义好的方法中,完成条件查询和过滤操作。

通过wrapper接口实现简单条件查询

/**
     * 一般条件查询,实现like、小于、等于条件的查询
     * SELECT * FROM USER WHERE NAME LIKE '%%' AND AGE 

通过wrapper接口实现排序

/**
     * 一般条件查询,实现排序效果
     */
    @RequestMapping("selectByOrder")
    public List selectByOrder(@RequestParam String name, @RequestParam int age, @RequestParam String email){
        User user = new User();
        user.setName(name);
        user.setAge(age);
        user.setEmail(email);
        QueryWrapper userQueryWrapper = new QueryWrapper();
        userQueryWrapper.orderByAsc("age").orderByDesc("id");
        return myUserService.list(userQueryWrapper);
    }

通过wrapper实现组合查询

 /**
     * 组合条件查询实现
     * select * from user where (name like '%s%' and age >20 ) or email is not null
     */
    @RequestMapping("selectByOrders")
    public List selectByOrders(@RequestParam String name, @RequestParam int age, @RequestParam String email){
        User user = new User();
        user.setName(name);
        user.setAge(age);
        user.setEmail(email);
        QueryWrapper userQueryWrapper = new QueryWrapper();
        userQueryWrapper.like("name",name).gt("age",age).or().isNotNull("email");
        return myUserService.list(userQueryWrapper);
    }

SELECT方法 

/**
 * 组合条件查询实现
 * select * from user where (name like '%s%' and age >20 ) or email is not null
 * select 中的字符串 代表要查询哪些字段
 * myUserService.getMap(userQueryWrapper) 获取map集合 将列名作为key value作为值
 */
@RequestMapping("selectAsMap")
public Map selectAsMap(@RequestParam String name, @RequestParam int age, @RequestParam String email){
    User user = new User();
    user.setName(name);
    user.setAge(age);
    user.setEmail(email);
    QueryWrapper userQueryWrapper = new QueryWrapper();
    userQueryWrapper.like("name",name).
            gt("age",age).or().
            isNotNull("email").select("id","name","age");
    return myUserService.getMap(userQueryWrapper);
}

子查询

/**
 * 组合条件查询实现
 * SELECT * FROM USER WHERE ID IN(SELECT ID FROM USER WHERE ID  configuration.setUseDeprecatedExecutor(false);
    }
}

2. 使用方式

/**
 * 分页查询
 * Page: 是分页查询的对象信息
 * userQueryWrapper:查询条件
 * myUserService.page(userPage,userQueryWrapper): 按条件进行分页查询
 */
@RequestMapping("selectByPage")
public Page selectByPage(@RequestParam String name, @RequestParam int age, @RequestParam String email){
    User user = new User();
    user.setName(name);
    user.setAge(age);
    user.setEmail(email);
    Page userPage = new Page();
    QueryWrapper userQueryWrapper = new QueryWrapper();
    userQueryWrapper.eq(StringUtils.isBlank(name),"name",name).
            gt("age",age).eq(StringUtils.isBlank(email),"email",email);
    return myUserService.page(userPage,userQueryWrapper);
}

配置MybatisX插件

1. 在ida中下载插件,file-settings-plugins-marketplace-输入:mybatisX:

MybatisPlus详细教程,看后不会你打我............,MybatisPlus入门指南,零基础教程,学不会我负责! 第5张2. 配置mybatisX插件:

MybatisPlus详细教程,看后不会你打我............,MybatisPlus入门指南,零基础教程,学不会我负责! 第6张 MybatisPlus详细教程,看后不会你打我............,MybatisPlus入门指南,零基础教程,学不会我负责! 第7张MybatisPlus详细教程,看后不会你打我............,MybatisPlus入门指南,零基础教程,学不会我负责! 第8张MybatisPlus详细教程,看后不会你打我............,MybatisPlus入门指南,零基础教程,学不会我负责! 第9张MybatisPlus详细教程,看后不会你打我............,MybatisPlus入门指南,零基础教程,学不会我负责! 第10张

 选择完毕即可生成代码


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码