Mybatis实现通用Mapper的增删改查

307 阅读2分钟

编写实体类

根据主键查询时必须有@Id,否则会报错

package com.hrp.domain;

import lombok.Data;
import tk.mybatis.mapper.annotation.KeySql;

import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;

/**
 * @author hrp
 * @date 2020/2/7 22:11
 */
@Data
@Table(name = "user")
public class User {
    @Id
    @KeySql(useGeneratedKeys = true)
    private Long id;
    private String username;
    private String password;
    private String name;
    private Integer gender;
    private Date birthday;
    private String phone;
    private String picture;
    private String address1;
    private String address2;
    private String address3;
    private Integer power;
}

增删改查操作

select

  • 根据实体中的属性值进行查询
List<T> select(T record);
  • 根据主键字段进行查询,参数必须包含完整的主键属性
T selectByPrimaryKey(Object key);
  • 查询全部结果
List<T> selectAll();
  • 根据实体中的属性进行查询,只能有一个返回值,有多个结果会抛出异常
T selectOne(T record);
  • 根据实体中的属性查询总数
int selectCount(T record);

insert

  • 保存一个实体,null的属性也会保存,不会使用数据库默认值
int insert(T record);
  • 保存一个实体,null的属性不会保存,会使用数据库默认值
int insertSelective(T record);

update

  • 根据主键更新实体全部字段,null值会被更新
int updateByPrimaryKey(T record);
  • 根据主键更新属性不为null的值
int updateByPrimaryKeySelective(T record);

delete

  • 根据实体属性作为条件进行删除
int delete(T record);
  • 据主键字段进行删除,方法参数必须包含完整的主键属性
int deleteByPrimaryKey(Object key);

使用流程

编写Common类

package com.hrp.common;

import tk.mybatis.mapper.additional.idlist.IdListMapper;
import tk.mybatis.mapper.additional.insert.InsertListMapper;
import tk.mybatis.mapper.annotation.RegisterMapper;
import tk.mybatis.mapper.common.Mapper;

/**
 * 这是我们自己写的通用类,本质就是一个工具类,T为实体泛型,D为实体主键泛型
 * @author hrp
 * 2020/2/22 15:34
 */
@RegisterMapper
public interface BaseMapper<T,D> extends Mapper<T>, IdListMapper<T,D>, InsertListMapper<T> {
}

编写Mapper层接口

package com.hrp.mapper;

import com.hrp.common.BaseMapper;
import com.hrp.domain.User;
import org.apache.ibatis.annotations.Mapper;

/**
 * 这里需要注意几个点,同样是导包问题
 *      第一:@Mapper注解的包是ibatis的
 *      第二:这里的BaseMapper是我们自己写的那个,不是tk.mybatis(通用Mapper)的
 * @author hrp
 * @date 2020/2/7 22:16
 */
@Mapper
public interface UserMapper extends BaseMapper<User,Long> {
}

编写Service层接口

package com.hrp.service;

import com.hrp.domain.User;

import java.util.List;

/**
 * @author hrp
 * 2020/2/22 14:44
 */
public interface UserService {

    /**
     * 查找所有用户信息
     * @return
     */
    List<User> findAll();
}

编写ServiceImpl实现类

package com.hrp.service.impl;

import com.hrp.domain.User;
import com.hrp.mapper.UserMapper;
import com.hrp.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author hrp
 * 2020/2/22 14:47
 */
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> findAll() {
        return userMapper.selectAll();
    }
}

编写Controller类

package com.hrp.web;

import com.hrp.domain.User;
import com.hrp.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author hrp
 * 2020/2/22 14:48
 */
@RestController
@RequestMapping("user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("list")
    public ResponseEntity<List<User>> findAll(){
        return ResponseEntity.ok(userService.findAll());
    }
}

参考博文1:juejin.cn/post/684790…

作者:山海_

参考博文2:juejin.cn/post/698469…

作者:知其白