SpringBoot快速整合通用Mapper的示例代碼
前言
后端業(yè)務(wù)開發(fā),每個表都要用到單表的 增刪改查 等通用方法,而配置了通用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、創(chuàng)建 MyMapper
import tk.mybatis.mapper.common.IdsMapper;
import tk.mybatis.mapper.common.Mapper;
public interface MyMapper<T> extends Mapper<T>, IdsMapper<T> {
}需要實現(xiàn)的通用接口都寫在 MyMapper 的繼承類中,該類的包不能被 MapperScan 掃描到。
Mapper<T> IdsMapper<T>
5、每個 dao 繼承步驟4的 MyMapper
例如 UserDao 繼承 MyMapper<User> :
public interface UserDao extends MyMapper<User> {
}通用service
上面配置只是調(diào)用dao層可以有默認(rèn)的增刪改查的方法,還是要在對應(yīng)的service添加增刪查改,所以需要寫一個通用service,把公共的方法都抽象到一個基礎(chǔ)方法中。
BaseService.java 接口:
public interface BaseService<T> {
/**
* 查詢所有
*
* @return 返回所有數(shù)據(jù)
*/
List<T> selectAll();
/**
* 查詢數(shù)據(jù)數(shù)量
* @return
*/
int selectCount();
/**
* 添加
*
* @param t 實體
*
* @return
*/
int save(T t);
/**
* 修改
*
* @param t
* 實體
* @return
*/
int updateByPrimaryKey(T t);
/**
* 根據(jù)主鍵刪除
*
* @param t 主鍵
*
* @return
*/
int deleteByPrimaryKey(int t);
}BaseServiceImpl 實現(xiàn)類:
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{
}配置完成之后,在對應(yīng)的 controller 調(diào)用,比如 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;
}
}總結(jié)
通用mapper:
- 創(chuàng)建SpringBoot啟動文件添加
MapperScan,掃描dao層的包。 - 創(chuàng)建
MyMapper<T>接口,根據(jù)自己需求繼承要用的接口,比如Mapper<T>。 - 每個dao接口繼承
MyMapper<T>接口。
通用service
- 創(chuàng)建
BaseService接口。 BaseServiceImpl實現(xiàn)類,調(diào)用MyMapper<T>實現(xiàn)增刪改查方法。- 每個
service接口和service實現(xiàn)類分別繼承BaseService接口和BaseServiceImpl實現(xiàn)類。 - 每個
controller就能調(diào)用通用方法。
遇到的問題
1、啟動報錯
required a bean of type 'com.jeremy.data.utils.MyMapper' that could not be found.
沒有找到
MyMapper對應(yīng)的bean,無法注入。
解決方案:
1、 SpringBoot 啟動文件添加 MapperScan 注解。
2、每個 dao 接口都要繼承 MyMapper 。
以上兩個步驟 缺一不可 。
github源碼
https://github.com/jeremylai7/springboot-bootstrap
到此這篇關(guān)于SpringBoot快速整合通用Mapper的文章就介紹到這了,更多相關(guān)SpringBoot整合Mapper內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決idea中Springboot找不到BASE64Encoder或Decoder的jar包
這篇文章主要介紹了解決idea中Springboot找不到BASE64Encoder或Decoder的jar包,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
做java這么久了居然還不知道JSON的使用(一文帶你了解)
這篇文章主要介紹了做java這么久了居然還不知道JSON的使用(一文帶你了解),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
Java WebSocket客戶端接收大量數(shù)據(jù)的三種方案
WebSocket是一種基于TCP協(xié)議的全雙工通信協(xié)議,它能夠在客戶端和服務(wù)器之間建立一個持久連接,實現(xiàn)實時的雙向數(shù)據(jù)傳輸,在實際應(yīng)用中,有時候我們需要處理大量的數(shù)據(jù),所以本文將介紹如何使用 Java WebSocket 客戶端接收大量數(shù)據(jù),并提供一些優(yōu)化方案2023-11-11
深度剖析Java成員變量、局部變量和靜態(tài)變量的創(chuàng)建和回收時機(jī)
這篇文章主要介紹了深度剖析Java成員變量、局部變量和靜態(tài)變量的創(chuàng)建和回收時機(jī),成員變量是定義在類中的變量,每個類的實例都會擁有自己的成員變量。它們的生命周期與對象的創(chuàng)建和銷毀相對應(yīng),下面我將詳細(xì)介紹它們的特點和生命周期,需要的朋友可以參考下2023-07-07
SpringBoot項目改為SpringCloud項目使用nacos作為注冊中心的方法
本文主要介紹了SpringBoot項目改為SpringCloud項目使用nacos作為注冊中心,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
Java使用Canal同步MySQL數(shù)據(jù)到Redis
在現(xiàn)代微服務(wù)架構(gòu)中,數(shù)據(jù)同步是一個常見的需求,特別是將?MySQL?數(shù)據(jù)實時同步到?Redis,下面我們就來看看Java如何使用Canal同步MySQL數(shù)據(jù)到Redis吧2024-11-11

