基于springboot2 框架整合(3):mybatis plus整合

前言

项目中使用了很多现成的框架,都是项目经理、架构师带来的,从来没有自己整合过!这次决定自己从零开始整合一次,以学习巩固。过程中参考很多开源框架的思路,工具类等,若有侵权,请速速联系,一定妥善处理

一:简介

这里直接引用官方介绍了“MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生”。官网: http://mp.baomidou.com/

二:依赖

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

三:配置

application.yml 增加配置如下

#================================================= mybatis-plus start =================================================
mybatis-plus:
  # config-location:
  # classpath:/mapper/*Mapper.xml
  mapper-locations: classpath*:org/itachi/frame/modules/*/mapper/xml/*.xml
  # 实体扫描,多个package用逗号或者分号分隔
  type-aliases-package: org.itachi.frame.modules.*.entity
  configuration:
    # 驼峰下划线转换
    map-underscore-to-camel-case: true
    cache-enabled: false
    call-setters-on-nulls: true
  global-config:
    # 刷新mapper 调试神器
    refresh: true
    banner: false
    #数据库大写下划线转换
    #capital-mode: true
    #序列接口实现类配置
    #key-generator: com.baomidou.springboot.xxx
    # 数据库相关配置
    db-config:
      db-type: mysql
      # 主键类型  AUTO:"数据库ID自增", INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
      id-type: UUID
      # 字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断"
      field-strategy: not_empty
      capital-mode: true
      #逻辑删除配置
      logic-delete-value: 1
      logic-not-delete-value: 0
#================================================= mybatis-plus end ===================================================

配置分页插件

MyBatisPlusConfig.java

package org.itachi.frame.core.config.db;

import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * mybatis-plus 配置
 *
 * @author itachi
 * @date 2018-10-05 17:40
 */
@Configuration
@MapperScan("org.itachi.frame.modules.*.mapper")
public class MyBatisPlusConfig {

    /**
     * 分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

四:业务代码

数据表脚本 u_user.sql

CREATE TABLE `u_user` (
  `id` char(64) NOT NULL COMMENT '主键',
  `name` varchar(255) DEFAULT NULL COMMENT '姓名',
  `age` int(255) DEFAULT NULL COMMENT '年龄',
  `gender` varchar(255) DEFAULT NULL COMMENT '性别',
  `address` varchar(255) DEFAULT NULL COMMENT '地址',
  `head_img` varchar(255) DEFAULT NULL COMMENT '头像',
  `del_flag` tinyint(1) DEFAULT '0' COMMENT '删除标志',
  `amount` decimal(10,2) DEFAULT NULL COMMENT '存款',
  `create_date` datetime DEFAULT NULL COMMENT '创建日期',
  `update_date` datetime DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户';

实体User.java

这里使用了lombok,不写setter getter相当的爽

package org.itachi.frame.modules.user.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

/**
 * 用户实体
 *
 * @author itachi
 * @date 2018-10-05 16:48
 */
@Data
@TableName("u_user")
public class User implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    private String id;

    /**
     * 姓名
     */
    private String name;

    /**
     * 年龄
     */
    private Integer age;

    /**
     * 性别
     */
    private String gender;

    /**
     * 地址
     */
    private String address;

    /**
     * 头像
     */
    private String headImg;

    /**
     * 存款
     */
    private BigDecimal amount;

    @TableLogic
    private Integer delFlag;

    @TableField(fill = FieldFill.INSERT)
    private Date createDate;

    @TableField(fill = FieldFill.UPDATE)
    private Date updateDate;
}

UserMapper.java

package org.itachi.frame.modules.user.mapper;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.itachi.frame.modules.user.entity.User;
import org.itachi.frame.modules.user.pojo.UserQuery;

import java.util.List;

/**
 * 用户 Mapper 接口
 *
 * @author itachi
 * @date 2018-10-05 16:51
 */
@Mapper
public interface UserMapper extends BaseMapper<User> {

    /**
     * 查询分页列表
     *
     * @author itachi
     * @date 2018-10-05 17:25
     */
    List<User> queryPage(Page page, @Param("user") UserQuery userQuery);
}

UserMapper.java

<?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="org.itachi.frame.modules.user.mapper.UserMapper">

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="org.itachi.frame.modules.user.entity.User">
        <id column="id" property="id"/>
        <result column="del_flag" property="delFlag"/>
        <result column="create_date" property="createDate"/>
        <result column="update_date" property="updateDate"/>
        <result column="name" property="name"/>
        <result column="age" property="age"/>
        <result column="gender" property="gender"/>
        <result column="address" property="address"/>
        <result column="head_img" property="headImg"/>
        <result column="amount" property="amount"/>
    </resultMap>

    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        del_flag,
        create_date,
        update_date,
        id, name, age, gender, address, head_img, amount
    </sql>

    <select id="queryPage" resultType="org.itachi.frame.modules.user.entity.User">
        select * from u_user
        <where>
            <if test="user.name !=null and user.name != ''">
                name = #{user.name}
            </if>
        </where>
    </select>

</mapper>

IUserService.java

package org.itachi.frame.modules.user.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.itachi.frame.modules.user.entity.User;
import org.itachi.frame.modules.user.pojo.UserQuery;

/**
 * 用户 服务类
 *
 * @author itachi
 * @date 2018-10-05 17:00
 */
public interface IUserService extends IService<User> {
   
    boolean delete(String ... ids);

    Page queryPage(UserQuery userQuery);
}

UserServiceImpl.java

package org.itachi.frame.modules.user.service.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.itachi.frame.modules.user.entity.User;
import org.itachi.frame.modules.user.mapper.UserMapper;
import org.itachi.frame.modules.user.pojo.UserQuery;
import org.itachi.frame.modules.user.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * 用户 服务实现类
 *
 * @author itachi
 * @date 2018-10-05 17:01
 */
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {

    @Autowired
    UserMapper userMapper;

    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean delete(String... ids) {
        for (String id : ids) {
            removeById(id);
            //int i = 1/0;
        }
        return true;
    }

    @Override
    public Page queryPage(UserQuery userQuery) {
        Page page = new Page(1, 10);
        page.setRecords(userMapper.queryPage(page, userQuery));

        return page;
    }
}

UserController.java

package org.itachi.frame.modules.user.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.itachi.frame.modules.user.pojo.UserQuery;
import org.itachi.frame.modules.user.service.IUserService;
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.RestController;

/**
 * 用户 控制器
 *
 * @author itachi
 * @date 2018-10-05 17:10
 */
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    IUserService userService;

    @GetMapping("/queryPage")
    public Object queryPage(UserQuery userQuery) {
        Page page = userService.queryPage(userQuery);
        return page;
    }
}

UserQuery.java

package org.itachi.frame.modules.user.pojo;

import lombok.Data;

/**
 * 用户查询对象封装
 *
 * @author itachi
 * @date 2018-10-05 16:53
 */
@Data
public class UserQuery {
    /**
     * 姓名
     */
    private String name;
}

目录结构如下

五:测试

访问http://localhost:8080/user/queryPage成功。至此,mybatis plus基本整合完成

mybatis plus还有很多强大的功能,如查询构造器,逻辑删除,公共字段填充等,更多参考官网:http://mp.baomidou.com/

猜你喜欢

转载自my.oschina.net/u/2935623/blog/2223009