暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

整合增强Mybatis常用方案

我们家Java 2021-08-24
518

点击上方蓝色我们家Java,选择“关注


我们在使用MyBatis时,通常不会去直接使用MyBatis持久层框架。大部分情况是使用Mybatis Genenrator和Mybatis Plus这两种方案。这两种方案属于Mybatis的增强方案,能够增加起功能性和易用性。

Mybatis Genenrator

首先我们在pom.xml文件中引入maven相关依赖:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.2</version>
</dependency>

再修改一下application.yml文件:

spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8

  datasource:
      driver-class-namecom.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/Family?useUnicode=true&characterEncoding=utf-8&useSSL=false
      username: root
      password: 123456

mybatis:
  # 扫描.xml文件的路径
  mapper-locations: classpath:generator/*.xml
logging:
  level:
    com.javafamily.familydemo: debug

在FamilyDemoApplication中配置Mapper类文件的包扫描路径。
package com.javafamily.familydemo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan(basePackages = {"com.javafamily.familydemo.generator"})
public class FamilyDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(FamilyDemoApplication.class, args);
    }
}

Mybatis 代码很大一部分不需要我们自己手动编写。而是采用Mybatis generator等方式通过数据库结构帮助我们自动生成持久层代码从而提高开发效率。


Mybatis generator的主流实现方法有三种:
  • xml配置文件方式

  • 编码实现Mybatis Generator代码生成配置方式

  • IDEA插件实现Mybatis generator代码生成配置方式

其中最方便的是第三种方法。

在Plugins中搜索better-mybatis-generator插件,点击install进行插件安装。

安装完成后,我们就可以开始使用了。


点击右侧Database,添加MySQL数据库:


连接数据库:


如果我们想生成表pets的持久层代码,右键pets表选择mybatis-generator:

我们需要进行简单的调整,将model package和dao package的路径修改一下:

路径修改完成后,点击ok。如果是第一次使用better-mybatis-generator插件,会要求输入数据库的账号和密码:

输入完成后,javafamily.familydemo下的generator文件会生成代码:



完成所有配置后我们来编写增删改查代码

PetsService接口中的代码不变,只需要修改PetsServiceImpl.java中的代码:

package com.javafamily.familydemo.service;

import com.javafamily.familydemo.generator.Pets;
import com.javafamily.familydemo.generator.PetsDao;
import com.javafamily.familydemo.model.PetsVO;
import com.javafamily.familydemo.utils.DozerUtils;
import org.springframework.stereotype.Service;
import org.dozer.Mapper;

import javax.annotation.Resource;
import java.util.List;

@Service
public class PetsServiceImpl implements PetsService {

    @Resource
    protected Mapper dozerMapper;

    @Resource
    // mybatis generator会自动生成代码
    private PetsDao petsDao;


    @Override
    public void savePets(PetsVO pets) {
        Pets petsPO = dozerMapper.map(pets, Pets.class);
        petsDao.insert(petsPO);
    }

    @Override
    public void deletePets(long id) {
        petsDao.deleteByPrimaryKey(id);
    }

    @Override
    public void updatePets(PetsVO pets) {
        Pets petsPO = dozerMapper.map(pets, Pets.class);
        petsDao.updateByPrimaryKeySelective(petsPO);
    }

    @Override
    public PetsVO getPets(Long id) {
        return dozerMapper.map(petsDao.selectByPrimaryKey(id), PetsVO.class);
    }

    @Override
    public List<PetsVO> getAll() {
        List<Pets> pets = petsDao.selectByExample(null);
        return DozerUtils.mapList(pets, PetsVO.class);
    }
}

执行代码,在postman中进行测试(注:执行代码之前先将上节编写的配置文件注释掉,否则会影响执行)


添加数据:


查询数据:

修改数据:


删除数据:



Mybatis Plus

Mybatis Plus相对于Mybatis Genenrator功能更多、更强大。Mybatis Plus是Mybatis的增强工具,在Mybatis的基础上只做增强不做改变,为简化开发、提高效率而生。


首先我们在pom.xml文件中引入maven依赖:

<dependency>
     <groupId>com.baomidou</groupId>
     <artifactId>mybatis-plus-boot-starter</artifactId>
     <version>3.3.2</version>
</dependency>

有了mybatis-plus-boot-starter依赖后就不需要mybatis-spring-boot-starter依赖了。

application.yml文件不需要改动。


在familydemo文件下创建mapper文件夹,并修改FamilyDemoApplication中@MapperScan的扫描路径:

package com.javafamily.familydemo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan(basePackages = {"com.javafamily.familydemo.mapper"})
public class FamilyDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(FamilyDemoApplication.class, args);
    }
}

model文件下的pets:

package com.javafamily.familydemo.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;
import java.util.List;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Pets {
    private long id;
    private String name;
    private String varieties;
    private Date createTime;
}

在新建的mapper文件下创建petsMapper接口:

package com.javafamily.familydemo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.javafamily.familydemo.model.Pets;


public interface PetsMapper extends BaseMapper<Pets{

}

BaseMapper中提供了若干关于增删改查的实现代码。继承BaseMapper之后就可以直接使用这些方法来操控表。


实现增删改查

再次改写PetsServiceImpl.java:

package com.javafamily.familydemo.service;

import com.javafamily.familydemo.mapper.PetsMapper;
import com.javafamily.familydemo.model.Pets;
import com.javafamily.familydemo.utils.DozerUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

import org.dozer.Mapper;

import java.util.List;

@Service
public class PetsServiceImpl implements PetsService {
    @Resource
    protected Mapper dozerMapper;

    @Resource
    private PetsMapper petsMapper;

    @Override
    public void savePets(Pets pets) {
        Pets petsPO = dozerMapper.map(pets, Pets.class);
        petsMapper.insert(petsPO);
    }

    @Override
    public void deletePets(long id) {
        petsMapper.deleteById(id);
    }

    @Override
    public void updatePets(Pets pets) {
        Pets petsPO = dozerMapper.map(pets, Pets.class);
        petsMapper.updateById(petsPO);
    }

    @Override
    public Pets getPets(Long id) {
        return dozerMapper.map(petsMapper.selectById(id), Pets.class);
    }

    @Override
    public List<Pets> getAll() {
        List<Pets> pets = petsMapper.selectList(null);
        return DozerUtils.mapList(pets, Pets.class);
    }
}

执行代码,使用postman进行测试,增删改查功能全部正常。


注意事项
mybatis generator和MybatisPlus只适用于单表的操作。如果涉及关联查询、继承等。Mybatis文件和MySQL还是需要自己编写,而不是生成的代码基础上面改。
点击下方阅读原文,查看上一篇
文章转载自我们家Java,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论