简单实用Spring boot整合通用Mapper

前言

     Spring boot相信大家都已经开始使用了,通用功能的使用会大大降低我们的开发时间,下面记录下本人在项目中用到的通用工具。就是我们的mybatis框架的 mapper 插件。

备注:也是看了井哥帖子,学习大神的思路及构造。这里是点击打开链接大神的自定义mapper 用法。

通用mapper简介

       通用mapper是一个国人编写的工具jar,它可以极其方便的做单表增删改查(使用Mybatis框架),目前不支持通用的多表联合查询,在使用mybatis时,就不需要重复的维护功能类似单表操作mapper.xml文件和mapper接口的定义,下面给出它的码云和github地址。

 

 

使用心得

    1、引入依赖  

<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>1.2.3</version>
 </dependency>

    2、增加配置类

package com.rr.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.spring.mapper.MapperScannerConfigurer;

import java.util.Properties;

/**
 * @Author: Yhq
 * @date: 2018/5/15 15:58
 */

@Slf4j
@Configuration
public class MyBatisConfig {

    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        log.info("加载MyBatisConfig.....");
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
        mapperScannerConfigurer.setBasePackage("com.rr.mapper");
        Properties properties = new Properties();

        properties.setProperty("mappers", Mapper.class.getName());
        properties.setProperty("notEmpty", "false");
        properties.setProperty("IDENTITY", "MYSQL");
        properties.setProperty("ORDER","BEFORE");
        mapperScannerConfigurer.setProperties(properties);
        return mapperScannerConfigurer;
    }

}

备注:

 

  • MapperScannerConfigurer 是 tk.mybatis.spring.mapper包下的
  • mapperScannerConfigurer.setBasePackage("com.rr.mapper"),这里去配置你自己数据库对应Mapper类的包路径,如果有多个用英文逗号分隔
  • 上面我们直接用Mapper插件提供的Mapper接口来实现我们通用的CRUD操作!下面会给出详细代码!

3、定义mapper接口

package com.rr.mapper;

import com.rr.po.User;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;

/**
 * @Author: Yhq
 * @date: 2018/5/15 17:08
 */

@Repository
public interface UserMapper extends Mapper<User> {

    User selectUserOne();//这里可以像正常使用mybatis一样自定义方法。注意:不要和通用方法名称一样
}

 

4、po类

package com.rr.po;

import com.rr.enums.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.io.Serializable;
import java.util.Date;

/**
 * @Author: Yhq
 * @date: 2018/5/15 16:32
 */

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User implements Serializable {

    /**
     * 用户ID
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "select uuid()")
    @Length(min=1, max=64)
    private String id;

    /**
     * 昵称
     */
    @NotBlank
    @Length(min=1, max=64)
    private String nickname;

    /**
     * 性别
     */
    @NotBlank
    @EnumValue(enumClass=UserGenderEnum.class, enumMethod="isValidName")
    private String gender;

    /**
     * 头像
     */
    @Length(max=256)
    private String avatar;

    /**
     * 状态
     */
    @NotBlank
    @EnumValue(enumClass=UserTypeEnum.class, enumMethod="isValidName")
    private String type;

    /**
     * 账号状态
     */
    @EnumValue(enumClass=UserStatusEnum.class, enumMethod="isValidName")
    private String status;

    @Column(name = "create_time")
    private Date createTime;

    @Column(name = "update_time")
    private Date updateTime;

    /**
     * 用户性别枚举
     */
    public enum UserGenderEnum {
        /**男*/
        MALE,
        /**女*/
        FEMALE,
        /**未知*/
        UNKNOWN;

        public static boolean isValidName(String name) {
            for (UserGenderEnum userGenderEnum : UserGenderEnum.values()) {
                if (userGenderEnum.name().equals(name)) {
                    return true;
                }
            }
            return false;
        }
    }

    /**
     * 用户类型枚举
     */
    public enum UserTypeEnum {
        /**普通*/
        NORMAL,
        /**管理员*/
        ADMIN;

        public static boolean isValidName(String name) {
            for (UserTypeEnum userTypeEnum : UserTypeEnum.values()) {
                if (userTypeEnum.name().equals(name)) {
                    return true;
                }
            }
            return false;
        }
    }

    /**
     * 用户状态枚举
     */
    public enum UserStatusEnum {
        /**启用*/
        ENABLED,
        /**禁用*/
        DISABLED;

        public static boolean isValidName(String name) {
            for (UserStatusEnum userStatusEnum : UserStatusEnum.values()) {
                if (userStatusEnum.name().equals(name)) {
                    return true;
                }
            }
            return false;
        }
    }
}

5、用户Controller

package com.rr.controller;

import com.rr.po.User;
import com.rr.service.UserSerivce;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;



/**
 * @Author: Yhq
 * @date: 2018/5/15 16:43
 */
@RestController
@RequestMapping("users")
public class UserController {

    @Autowired
    private UserSerivce userSerivce;


    @ApiOperation(value="创建用户", notes="根据User对象创建用户")
    @ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")
    @PostMapping("add")
    @ResponseStatus(HttpStatus.OK)
    public Object addUser(@Validated @RequestBody User user){
        return userSerivce.addUser(user);
    }


    @ApiOperation(value = "查询用户",notes = "查询单条用户记录")
    @GetMapping("selectone")
    @ResponseStatus(HttpStatus.OK)
    public User selectUserOne(){
       return userSerivce.selectUserOne();
    }

}

备注:service的代码就不贴了

6、测试一下

① 这里我们用Postman测试:

 

② 返回

 

最后

好了,mapper插件就到这里。如果有问题,请在下方评论,或者加群讨论 629446754 或 200909980

更多通用功能点击打开链接

本实例代码Coding地址:https://coding.net/u/yuhaoqiang/p/spring-boot-mapper/git?public=true

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值