SpringBoot数据访问——整合MybatisPlus

SpringBoot数据访问——整合MybatisPlus

0.MybatisPlus简介

官方介绍: MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

官方文档:MybatisPlus官方文档 写得很好很详细!

1.导入依赖

maven工程pom.xml文件下,导入以下依赖:

 <!--        Web模块-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--        MySQL驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!--        Lombok插件-->
        <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.3.1.tmp</version>
        </dependency>

2.配置数据连接

数据源使用默认的,数据库配置如下:

默认的application.properties

#mysql配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://*.*.*.*:3306/springboot_demo
spring.datasource.username=账号
spring.datasource.password=密码

yml格式:

#配置数据源
spring:
  datasource:
    username: 账号
    password: 密码
    url: jdbc:mysql://*.*.*.*:3306/springboot_demo
    driver-class-name: com.mysql.jdbc.Driver

3.初始化测试数据表

这里就用了一个简单了表,包含id(主键且自增),english,chinese这三个字段。

初始化测试数据表

4.使用MybatisPlus操作数据

4.1.编写数据库中表对应的实体类Bean

entity包下建立word类:

package com.piao.springboot_mybatisplus.entity;

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class Word {
    private Integer id;
    private String english;
    private String chinese;
}

这里使用了Lombok插件中的注解 @Data

  • @Data注解在类自动生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。
  • @AllArgsConstructor 所有参数的构造方法
4.2 编写mapper接口

使其继承自BaseMapper,泛型为实体类Word。这样就拥有了基本的CRUD和分页功能。

package com.piao.springboot_mybatisplus.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.piao.springboot_mybatisplus.entity.Word;

//接口继承自BaseMapper  泛型为实体类Word;这样就具备通用的一些CRUD操作了
public interface WordMapper extends BaseMapper<Word> {
}
4.3 查看BaseMapper接口源码

这里我备注了一些注释,便于理解

public interface BaseMapper<T> extends Mapper<T> {
    int insert(T entity);//插入数据,参数泛型,为任意实体类

    int deleteById(Serializable id);//根据id删除

    int deleteByMap(@Param("cm") Map<String, Object> columnMap);//更具map中的条件,批量删除

    int delete(@Param("ew") Wrapper<T> wrapper);//根据条件构造器删除

    int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);//根据id批量删除

    int updateById(@Param("et") T entity);//更新数据,参数泛型,为任意实体类

    int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);//根据条件构造器更新

    T selectById(Serializable id);//根据id查询

    List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);//根据id批量查询

    List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);//根据columnMap条件查询

    T selectOne(@Param("ew") Wrapper<T> queryWrapper);//根据条件构造器查询

    Integer selectCount(@Param("ew") Wrapper<T> queryWrapper);//根据条件构造器查询,返回查询总记录数

    List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);//根据条件构造器查询,list形式返回,条件构造器为空则查询所有。

    List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);//根据条件构造器查询,List<Map<String, Object>>形式返回

    List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);//根据条件构造器查询,只返回第一个字段的值

    <E extends IPage<T>> E selectPage(E page, @Param("ew") Wrapper<T> queryWrapper);//根据实体类条件,分页查询全部记录

    <E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param("ew") Wrapper<T> queryWrapper);// 根据条件构造器,分页查询全部记录
}
4.4 编写控制器实现基本CRUD

功能包括基本的CRUD操作:

  • 添加单词信息
  • 根据id查询单词信息
  • 根据id更新单词信息
  • 根据id删除单词信息
  • 查询所有单词
   @Resource
   private WordMapper wordMapper;

将业务对象WordMapper注入后便可直接使用自带的CRUD方法操作数据。

这里加了详细且原始的数据校验判空处理,当然有更优雅的方式…这里就不展开了。

推荐这位大佬的博客:啥?听说你还在手写复杂的参数校验?

package com.piao.springboot_mybatisplus.controller;

import com.piao.springboot_mybatisplus.entity.Word;
import com.piao.springboot_mybatisplus.mapper.WordMapper;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;

@Controller
public class TestController {
    //存储预返回页面的结果对象
    private Map<String, Object> result;
    //注入业务对象
    @Resource
    private WordMapper wordMapper;

    //添加单词信息
    @PostMapping("/insertWord")
    @ResponseBody
    public Map<String, Object> insertWord(Word word) {
        result = new HashMap<>();

        //数据校验 判空!
        if (null == word) {
            result.put("message", "插入的单词为空");
            return result;
        }
        if (null == word.getChinese() || "".equals(word.getEnglish())) {
            result.put("message", "插入的单词中文为空或者为空字符串");
            return result;
        }
        if (null == word.getChinese() || "".equals(word.getChinese())) {
            result.put("message", "插入的单词中文为空或者为空字符串");
            return result;
        }
        wordMapper.insert(word);
        result.put("message", "插入单词成功");
        return result;
    }

    //根据id查询单词信息
    @GetMapping("/getWordById")
    @ResponseBody
    public Map<String, Object> getWordById(Integer id) {
        result = new HashMap<>();

        //数据校验 判空!
        if (null == id) {
            result.put("message", "传入id为空");
            return result;
        }

        result.put("word",wordMapper.selectById(id));
        result.put("message", "查询单词成功");
        return result;
    }


    //根据id更新单词信息
    @PostMapping("/updateWordById")
    @ResponseBody
    public Map<String, Object> updateWordById(Integer id, String english, String chinese) {
        result = new HashMap<>();

        //数据校验 判空!
        if (null == id) {
            result.put("message", "更新的单词id为空");
            return result;
        }
        if (null == english || "".equals(english)) {
            result.put("message", "更新的单词中文为空或者为空字符串");
            return result;
        }
        if (null == chinese || "".equals(chinese)) {
            result.put("message", "更新的单词中文为空或者为空字符串");
            return result;
        }
        wordMapper.updateById(new Word(id, english, chinese));
        result.put("message", "更新单词成功");
        return result;
    }

    //根据id删除单词信息
    @PostMapping("/deleteWordById")
    @ResponseBody
    public Map<String, Object> deleteWordById(Integer id) {
        result = new HashMap<>();
        //数据校验 判空!
        if (null == id) {
            result.put("message", "输入的单词id为空");
            return result;
        }
        wordMapper.deleteById(id);
        result.put("message", "删除单词成功");
        return result;
    }

    //查询所有单词
    @GetMapping("/getAllWord")
    @ResponseBody
    public Map<String, Object> getAllWord() {
        result = new HashMap<>();

        //selectList(null)设置过滤条件为空,就是查询所有,并以list形式返回
        result.put("word",wordMapper.selectList(null));
        result.put("message", "查询所有单词成功");
        return result;
    }
}

其中wordMapper.selectList(null),条件构造器参数传null,就是查询所有,并以List集合(泛型为实体类Word)的形式返回。

对于Spring Boot项目整合MyBatis Plus,你可以按照以下步骤进行操作: 1. 在pom.xml文件中添加MyBatis Plus的依赖: ```xml <dependencies> <!-- MyBatis Plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>最新版本号</version> </dependency> <!-- 其他依赖... --> </dependencies> ``` 2. 在application.properties或application.yml文件中配置数据库连接信息: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/your_database spring.datasource.username=your_username spring.datasource.password=your_password spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ``` 3. 创建数据库表对应的实体类(Entity),并使用注解来映射表和字段。例如: ```java import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @Data @TableName("user") public class User { private Long id; private String name; private Integer age; } ``` 4. 创建Mapper接口,继承自MyBatis Plus的BaseMapper,并定义自己的SQL方法。例如: ```java import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.demo.entity.User; public interface UserMapper extends BaseMapper<User> { // 自定义SQL方法 } ``` 5. 创建Service接口和实现类,用于提供业务逻辑处理。例如: ```java public interface UserService { // 定义业务方法 } @Service public class UserServiceImpl implements UserService { // 实现业务方法 } ``` 6. 在启动类上添加`@MapperScan`注解,指定Mapper接口的扫描路径。例如: ```java @SpringBootApplication @MapperScan("com.example.demo.mapper") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 这样,你就成功将MyBatis Plus整合到了Spring Boot项目中。你可以通过调用Service层的方法来操作数据库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值