(二) spring boot 整合 MyBatis-plus

上回讲了springboot项目的初始化与配置了swagger页面,算是可以进行最基础的开发了。

下面我就将我们的项目连接上数据库进行对数据库的操作,由于目前流行的ssm,所以我采用了mybatis,但是由于mybatis-plus进行了CURD的封装,所以我对mybatis-plus进行封装,使得开发更加快速,不过同时其中也有有问题的地方,比如说这类的方法我们可能有其他需求需要改动也不可避免。

1 项目配置


1.1 配置文件引入

首先肯定是pom文件的引入,先将我们所需要的依赖引入,因为我们使用的是mybatis-plus,所以需要导入的jar包包括mysql、jdbc、mybatis、mybatis-plus
如果引入lombok,使用lombok的@Data注解,那么实体类就会变得很清爽,所以我个人还是比较喜欢使用的,推荐引入,当然如果不引入使用get和set也是可以的


        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--jdbc-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!--mybatis-plus配置-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatisplus-spring-boot-starter</artifactId>
            <version>1.0.5</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>2.3</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>
        <!--lombok-->
        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
            <scope>provided</scope>
        </dependency>

1.2 数据库配置

配置好依赖之后我们就可以配置数据库得连接了
配置application.yml

#端口号
server:
  port: 8088
#数据库的配置信息
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test #自己的数据库名称
    username: root
    password: root #账号和密码记得配置
mybatis:
  #开启驼峰命名法
  configuration:
    map-underscore-to-camel-case: true
mybatis-plus:
  # xml地址
  mapper-locations: classpath:mapper/*Mapper.xml
  # 实体扫描,多个package用逗号或者分号分隔
  type-aliases-package: com.banana.demo.entity   #自己的实体类地址
  configuration:
    # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

1.3 添加mybatis-plus的配置类MybatisPlusConfig

在com.banana.demo.config包下添加此配置类,进行了分页的配置

package com.banana.demo.config;

import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MybatisPlusConfig {
    @Bean
    public PaginationInterceptor paginationInterceptor(){
        PaginationInterceptor page = new PaginationInterceptor();
        //设置方言类型
        page.setDialectType("mysql");
        return page;
    }
}

2 配置mybatis-plus使用


配置好最基础的mybatis-plus的依赖项之后,我们就可以去进行我们所需要具体的数据表的实体类型的创建,以及代码业务逻辑的书写。

2.1 添加实体类

在com.banana.demo.entity包下添加实体类User如下

package com.banana.demo.entity;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

@Data
@ApiModel(value = "User:用户表")
public class User {
    @ApiModelProperty("用户 id")
    private String id;
    @ApiModelProperty("用户 姓名")
    private String user_name;
    @ApiModelProperty("用户 密码")
    private String user_password;

    public User() {
    }
    public User(String id, String user_name, String user_password) {
        this.id = id;
        this.user_name = user_name;
        this.user_password = user_password;
    }
}

2.2 添加Dao层的Mapper配置

我们要创建Mapper来进行映射,进行数据库的操作

2.2.1 添加xml文件

在resource目录下的mapper文件夹下创建UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.banana.demo.dao.UserDao">
    <resultMap id="user" type="com.banana.demo.entity.User"/>
    <parameterMap id="user" type="com.banana.demo.entity.User"/>

    <select id="getUserList" resultMap="user">
        SELECT  * FROM USER
    </select>
</mapper>

2.2.2 添加Dao层的配置

在 com.banana.demo.dao 包下创建接口类 UserDao

由于我们使用的是mybatis-plus,所以我们的UserDao会继承BaseMapper,BaseMapper中有着对于数据库基本的CURD操作,我们就可以避免了重复造轮子的现象,从而提高了我们的效率。

当前UserDao中的getUserList()方法是基于BaseMapper中的方法之外新加的方法,在UserDao中只需要写BaseMapper之外的方法即可。

package com.banana.demo.dao;

import com.banana.demo.entity.User;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface UserDao extends BaseMapper<User> {
    List<User> getUserList();
}

此时要注意的一点,我们在dao层使用了@Repository注解,那么我们就一定要在启动类加上 @MapperScan(“com.banana.demo.dao”) 注解来标识mapper的所在之处

3 Controller和启动类的编写


终于我们在所有的配置工作的完成之后可以进行业务代码的编写了,下面将逐一说明Controller层的编写把,对于controller中的各种注解此处只做一个简述,下一篇则会进行更加详细的解释说明

3.1 添加UserController类

在 com.banana.demo.controller 包下添加UserController 类

package com.banana.demo.controller;

import com.banana.demo.dao.UserDao;
import com.banana.demo.entity.User;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.toolkit.IdWorker;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/user")
@Api(tags = "用户操作")
public class UserController {

    @Autowired
    private UserDao userDao;

    @GetMapping("getUserList")
    @ApiOperation(value = "获取用户列表", notes = "获取所有的user信息")
    public List<User> getUserList() {
        return userDao.getUserList();
    }

    //条件查询
    @GetMapping("getUserListByName")
    @ApiOperation(value = "通过姓名获取用户列表", notes = "通过username获取user信息")
    @ApiImplicitParam(name = "userName", value = "用户姓名", dataType = "String", required = true)
    public List<User> getUserListByName(String userName) {
        Map map = new HashMap();
        map.put("user_name", userName);
        return userDao.selectByMap(map);
    }

    //保存用户
    @GetMapping("saveUser")
    @ApiOperation(value = "添加用户", notes = "通过userName与userPassword保存user信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "userName", value = "用户姓名", dataType = "String", required = true),
            @ApiImplicitParam(name = "userPassword", value = "用户密码", dataType = "String")
    })
    public String saveUser(String userName, String userPassword) {

        User user = new User(IdWorker.get32UUID(), userName, userPassword);
        Integer index = userDao.insert(user);
        if (index > 0) {
            return "新增用户成功。";
        } else {
            return "新增用户失败。";
        }
    }

    //保存用户
    @PostMapping("saveUser")
    @ApiOperation(value = "添加用户", notes = "通过userName与userPassword保存user信息")
    public String saveUser(@RequestBody @ApiParam(name = "用户信息", value = "传入json格式", required = true) User user) {
        user.setId(IdWorker.get32UUID());
        Integer index = userDao.insert(user);
        if (index > 0) {
            return "新增用户成功。";
        } else {
            return "新增用户失败。";
        }
    }

    //修改用户
    @PatchMapping("updateUser")
    @ApiOperation(value = "更新用户", notes = "更新user信息")
    public String updateUser(@ApiParam(name = "用户对象", value = "传入json格式", required = true) User user) {
        Integer index = userDao.updateById(user);
        if (index > 0) {
            return "修改用户成功,影响行数" + index + "行。";
        } else {
            return "修改用户失败,影响行数" + index + "行。";
        }
    }

    //根据Id查询User
    @GetMapping("getUserById/{id}")
    @ApiOperation(value = "通过id查询用户", notes = "通过id查询user信息")
    @ApiImplicitParam(name = "id", value = "用户id", dataType = "String", required = true)
    public User getUserById(@PathVariable Integer id) {
        return userDao.selectById(id);
    }

    //条件分页查询
    @GetMapping("getUserListByPage")
    @ApiOperation(value = "分页查询用户", notes = "通过page和size查询用户信息")
    public List<User> getUserListByPage(Integer pageNumber, Integer pageSize) {
        Page<User> page = new Page<>(pageNumber, pageSize);
        EntityWrapper<User> entityWrapper = new EntityWrapper<>();
        entityWrapper.eq("user_name", "xiaoli");
        return userDao.selectPage(page, entityWrapper);
    }
}

3.2 启动类添加注解@MapperScan注解

package com.banana.demo;

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

@SpringBootApplication
@MapperScan("com.banana.demo.dao")
public class DemoApplication {
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}

4 测试


至此我们的创建就结束了,下面我们可以就我们前面配置的内容,通过swagger页面做一下测试(可以看上一篇(一) SpringBoot 项目初始化 + 配置swagger页面
在这里插入图片描述

本系列的文章


Banana的SpringBoot系列博客

(一) SpringBoot 项目初始化 + 配置swagger页面

(二) SpringBoot 整合 MyBatis-plus

(三) SpringBoot之使用Swagger配置详解

(四) spring boot 多环境配置

(五) spring boot 配置使用 redis

发布了129 篇原创文章 · 获赞 147 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq1515312832/article/details/103219467