php中文网 | cnphp.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 315|回复: 0

SpringBoot快速整合通用Mapper

[复制链接]

2640

主题

2647

帖子

9387

积分

管理员

Rank: 9Rank: 9Rank: 9

UID
1
威望
0
积分
6625
贡献
0
注册时间
2021-4-14
最后登录
2024-5-2
在线时间
669 小时
QQ
发表于 2022-7-11 09:00:54 | 显示全部楼层 |阅读模式
前言
后端业务开发,每个表都要用到单表的增删改查等通用方法,而配置了通用Mapper可以极大的方便使用Mybatis单表的增删改查操作。

通用mapper配置
1、添加maven:
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--通用mapper-->
<dependency>
  <groupId>tk.mybatis</groupId>
  <artifactId>mapper-spring-boot-starter</artifactId>
  <version>2.1.5</version>
</dependency>
<!-- pagehelp -->
<dependency>
  <groupId>com.github.pagehelper</groupId>
  <artifactId>pagehelper-spring-boot-starter</artifactId>
  <version>1.2.3</version>
</dependency>

2、Application启动文件添加MapperScan注解

在springboot启动类添加 tk.mybatis包下MapperScan注解
import tk.mybatis.spring.annotation.MapperScan;

@SpringBootApplication
@MapperScan("com.springboot.dao")
public class Application extends SpringBootServletInitializer {

        public static void main(String[] args) {
                SpringApplication.run(Application.class, args);
        }
}
其中com.springboot.dao是dao层的路径。

3、Model添加注解

添加 Table注解和Id注解,

Table 填写数据表名
id写在主键字段上
例如下方的User实体:
@Table(name = "t_user")
public class User {
    //主键
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)//自增
    private Integer id;  
}
  
4、创建MyMapper
import tk.mybatis.mapper.common.IdsMapper;
import tk.mybatis.mapper.common.Mapper;


public interface MyMapper<T> extends Mapper<T>, IdsMapper<T> {

}
需要实现的通用接口都写在MyMapper的继承类中,该类的包不能被MapperScan扫描到。

Mapper<T> 包含了大量的单表操作。
IdsMapper<T> 是通过多个id查询和删除的方法。
5、每个dao继承步骤4的MyMapper

例如UserDao继承MyMapper<User> :
public interface UserDao extends MyMapper<User> {
}
通用service
上面配置只是调用dao层可以有默认的增删改查的方法,还是要在对应的service添加增删查改,所以需要写一个通用service,把公共的方法都抽象到一个基础方法中。

BaseService.java接口:
public interface BaseService<T> {
    /**
     * 查询所有
     *
     * @return 返回所有数据
     */
    List<T> selectAll();


    /**
     * 查询数据数量
     * @return
     */
    int selectCount();

    /**
     * 添加
     *
     * @param t   实体
     *
     * @return
     */
    int save(T t);

    /**
     * 修改
     *
     * @param t
     *            实体
     * @return
     */
    int updateByPrimaryKey(T t);

    /**
     * 根据主键删除
     *
     * @param t   主键
     *
     * @return
     */
    int deleteByPrimaryKey(int t);
}
BaseServiceImpl实现类:
public class BaseServiceImpl<T> implements BaseService<T> {


    @Autowired
    private MyMapper<T> mapper;

    @Override
    public List<T> selectAll() {
        return mapper.selectAll();
    }

    @Override
    public int selectCount() {
        return mapper.selectCount(null);
    }

    @Override
    public int save(T t) {
        return mapper.insert(t);
    }

    @Override
    public int updateByPrimaryKey(T t) {
        return mapper.updateByPrimaryKey(t);
    }

    @Override
    public int deleteByPrimaryKey(int t) {
        return mapper.deleteByPrimaryKey(t);
    }

}

所有的service和serviceImpl都分别继承BaseService和BaseServiceImpl,例如UserService和UserServiceImpl分别继承BaseService和BaseServiceImpl:
public interface UserService extends BaseService<User>{

}

@Service
public class UserServiceImpl extends BaseServiceImpl<User> implements UserService{

}

配置完成之后,在对应的controller调用,比如UserController:

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping("/add")
    public Object add(User user) {
        userService.save(user);
        return null;
    }

    @PostMapping("/delete")
    public Object delete(@RequestParam Integer id) {
        userService.deleteByPrimaryKey(id);
        return null;
    }

    @PostMapping("/update")
    public Object update(User user) {
        userService.updateByPrimaryKey(user);
        return null;
    }

    @GetMapping("/detail")
    public User detail(@RequestParam Integer id) {
        User user = userService.selectById(id);
         return user;
    }

    @GetMapping("/list")
    public List<User> list() {
       List<User> list = userService.list();
       return list;
    }
}

总结
通用mapper:
创建SpringBoot启动文件添加MapperScan,扫描dao层的包。
创建MyMapper<T> 接口,根据自己需求继承要用的接口,比如Mapper<T>。
每个dao接口继承MyMapper<T>接口。
通用service
创建BaseService接口。
BaseServiceImpl实现类,调用MyMapper<T>实现增删改查方法。
每个service接口和service实现类分别继承BaseService接口和BaseServiceImpl实现类。
每个controller就能调用通用方法。
遇到的问题
1、启动报错
required a bean of type 'com.jeremy.data.utils.MyMapper' that could not be found.
没有找到MyMapper对应的bean,无法注入。

解决方案:
1、SpringBoot启动文件添加MapperScan注解。
2、每个dao接口都要继承MyMapper。

以上两个步骤缺一不可。

github源码
https://github.com/jeremylai7/springboot-bootstrap






上一篇:曝华为HarmonyOS 3.0将于7月27日发布
下一篇:有关golang信道的面试笔记
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|php中文网 | cnphp.com ( 赣ICP备2021002321号-2 )51LA统计

GMT+8, 2024-5-3 02:02 , Processed in 0.266684 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

申明:本站所有资源皆搜集自网络,相关版权归版权持有人所有,如有侵权,请电邮(fiorkn@foxmail.com)告之,本站会尽快删除。

快速回复 返回顶部 返回列表