关于java:SpringBoot快速整合通用Mapper

27次阅读

共计 3561 个字符,预计需要花费 9 分钟才能阅读完成。

前言

后端业务开发,每个表都要用到单表的 增删改查 等通用办法,而配置了通用 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.daodao层的门路。

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);
    }

}

所有的 serviceserviceImpl都别离继承 BaseServiceBaseServiceImpl,例如 UserServiceUserServiceImpl别离继承 BaseServiceBaseServiceImpl:

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

正文完
 0