前言
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