最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot快速整合通用Mapper的示例代碼

 更新時間:2022年07月11日 09:24:38   作者:小碼code  
后端業(yè)務(wù)開發(fā),每個表都要用到單表的?增刪改查?等通用方法,而配置了通用Mapper可以極大的方便使用Mybatis單表的增刪改查操作,這篇文章主要介紹了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包

    這篇文章主要介紹了解決idea中Springboot找不到BASE64Encoder或Decoder的jar包,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 做java這么久了居然還不知道JSON的使用(一文帶你了解)

    做java這么久了居然還不知道JSON的使用(一文帶你了解)

    這篇文章主要介紹了做java這么久了居然還不知道JSON的使用(一文帶你了解),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Java對象在JVM中的生命周期詳解

    Java對象在JVM中的生命周期詳解

    這篇文章主要介紹了Java對象在JVM中的生命周期詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • Java WebSocket客戶端接收大量數(shù)據(jù)的三種方案

    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ī)

    這篇文章主要介紹了深度剖析Java成員變量、局部變量和靜態(tài)變量的創(chuàng)建和回收時機(jī),成員變量是定義在類中的變量,每個類的實例都會擁有自己的成員變量。它們的生命周期與對象的創(chuàng)建和銷毀相對應(yīng),下面我將詳細(xì)介紹它們的特點和生命周期,需要的朋友可以參考下
    2023-07-07
  • SpringBoot整合ES解析搜索返回字段問題

    SpringBoot整合ES解析搜索返回字段問題

    這篇文章主要介紹了SpringBoot整合ES解析搜索返回字段問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • SpringBoot項目改為SpringCloud項目使用nacos作為注冊中心的方法

    SpringBoot項目改為SpringCloud項目使用nacos作為注冊中心的方法

    本文主要介紹了SpringBoot項目改為SpringCloud項目使用nacos作為注冊中心,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Java使用Canal同步MySQL數(shù)據(jù)到Redis

    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
  • 解讀前后端分離項目的跨域問題

    解讀前后端分離項目的跨域問題

    文章介紹了跨域問題的原因——瀏覽器的同源策略限制,以及CORS(跨域資源共享)的概念,CORS通過服務(wù)器設(shè)置特定的響應(yīng)頭來允許跨域請求,文章還概述了后端解決跨域問題的幾種方式,并簡要介紹了前端處理跨域請求的方法
    2024-11-11
  • 詳解SpringCloud是如何動態(tài)更新配置的

    詳解SpringCloud是如何動態(tài)更新配置的

    spring cloud在config配置管理的基礎(chǔ)上,提供了consul config的配置管理和動態(tài)監(jiān)聽,那么這里面到底是怎樣實現(xiàn)的,本文將為你揭秘,感興趣的小伙伴可以跟著小伙伴一起來學(xué)習(xí)
    2023-06-06

最新評論

镶黄旗| 永嘉县| 比如县| 张家界市| 界首市| 莱西市| 开封县| 普兰店市| 东辽县| 东辽县| 渝北区| 梁平县| 临朐县| 黄浦区| 兰坪| 甘孜| 什邡市| 商城县| 乌兰浩特市| 广宗县| 惠来县| 肥乡县| 栖霞市| 台江县| 临汾市| 江都市| 内乡县| 平安县| 精河县| 剑河县| 阜阳市| 嘉义市| 阿勒泰市| 酉阳| 奉新县| 包头市| 大城县| 土默特左旗| 海宁市| 治多县| 武冈市|