Mybatis-Plus 真好用(鄉村愛情加持)

CodeSheep發表於2019-04-11

鄉村愛情


寫在前面

MyBatis的增強方案確實有不少,甚至有種感覺是現在如果只用 “裸MyBatis”,不來點增強外掛都不好意思了。這不,在上一篇文章《Spring Boot專案利用MyBatis Generator進行資料層程式碼自動生成》 中嘗試了一下 MyBatis Generator。這次來點更加先進的 Mybatis-Plus,SQL語句都不用寫了,分頁也是自動完成,嗯,真香!

長按掃描 下面的 小心心 來訂閱作者公眾號 CodeSheep,獲取更多 務實、能看懂、可復現的 原創文 ↓↓↓

CodeSheep · 程式羊


資料庫準備

CREATE TABLE tbl_user
(
	user_id BIGINT(20) NOT NULL COMMENT '主鍵ID',
	user_name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
	user_age INT(11) NULL DEFAULT NULL COMMENT '年齡',
	PRIMARY KEY (user_id)
) charset = utf8;
複製程式碼

MyBatis-Plus加持

  • 工程搭建 (不贅述了)

  • 依賴引入

<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus-boot-starter</artifactId>
	<version>3.1.0</version>
</dependency>

<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
</dependency>

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid-spring-boot-starter</artifactId>
	<version>1.1.9</version>
</dependency>

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
	<version>8.0.12</version>
</dependency>
複製程式碼

主要是 Mybatis Plus、Lombok(不知道Lombok幹嘛的?可以看這裡)、Druid連線池 等依賴。

  • MyBatis Plus配置

專案配置

mybatis-plus:
  mapper-locations: classpath:/mapper/*Mapper.xml
複製程式碼

新增 MyBatis Plus配置類

@Configuration
@MapperScan("cn.codesheep.springbtmybatisplus.mapper")
public class MyBatisConfig {
}
複製程式碼

看到沒,幾乎零配置啊,下面就可以寫業務邏輯了


業務編寫

  • 實體類
@Data
@TableName("tbl_user")
public class User {
    @TableId(value = "user_id")
    private Long userId;
    private String userName;
    private Integer userAge;
}
複製程式碼
  • Mapper類
public interface UserMapper extends BaseMapper<User> {
}
複製程式碼

這裡啥介面方法也不用寫,就可以實現增刪改查了!

  • Service類

Service介面:

public interface UserService extends IService<User> {
    int insertUser( User user );
    int updateUser( User user );
    int deleteUser( User user );
    User findUserByName( String userName );
    IPage getUserPage( Page page, User user );
}
複製程式碼

Service實現:

@Service
@AllArgsConstructor
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

    // 增
    @Override
    public int insertUser(User user) {
        return baseMapper.insert( user );
    }

    // 改
    @Override
    public int updateUser(User user) {
        return baseMapper.updateById( user );
    }

    // 刪
    @Override
    public int deleteUser(User user) {
        return baseMapper.deleteById( user.getUserId() );
    }

    // 查
    @Override
    public User findUserByName( String userName ) {
        return baseMapper.getUserByName( userName );
    }
}
複製程式碼
  • Controller類
@RestController
@RequestMapping("/user")
public class UserContorller {

    @Autowired
    private UserService userService;

    // 增
    @PostMapping( value = "/insert")
    public Object insert( @RequestBody User user ) {
        return userService.insertUser( user );
    }

    // 改
    @PostMapping( value = "/update")
    public Object update( @RequestBody User user ) {
        return userService.updateUser( user );
    }

    // 刪
    @PostMapping( value = "/delete")
    public Object delete( @RequestBody User user ) {
        return userService.deleteUser( user );
    }

    // 查
    @GetMapping( value = "/getUserByName")
    public Object getUserByName( @RequestParam String userName ) {
        return userService.findUserByName( userName );
    }
}
複製程式碼

通過以上幾個簡單的步驟,我們就實現了 tbl_user表的增刪改查,傳統 MyBatis的 XML檔案一個都不需要寫!


實際實驗【《鄉愛》加持】

  • 啟動專案

很牛批的 logo就會出現

Mybatis Plus Logo

接下來通過 Postman來傳送增刪改查的請求

  • 插入記錄

通過 Postman隨便插入幾條記錄 POST localhost:8089/user/insert

{"userId":3,"userName":"劉能","userAge":"58"}
{"userId":4,"userName":"趙四","userAge":"58"}
{"userId":5,"userName":"謝廣坤","userAge":"58"}
{"userId":6,"userName":"劉大腦袋","userAge":"58"}
複製程式碼

傳送插入請求

插入結果

  • 修改記錄

修改記錄時需要帶使用者ID,比如我們修改 趙四 那條記錄的名字為 趙四(Zhao Four)

傳送修改請求

修改結果

  • 刪除記錄

修改記錄時同樣需要帶使用者ID,比如刪除ID=6 那條 劉大腦袋的記錄

image.png

  • 查詢記錄(普通查詢,下文講分頁查詢)

比如,按照名字來查詢:GET localhost:8089/user/getUserByName?userName=劉能


最關心的分頁問題

  • 首先裝配分頁外掛
@Bean
public PaginationInterceptor paginationInterceptor() {
	return new PaginationInterceptor();
}
複製程式碼
  • Mapper類
public interface UserMapper extends BaseMapper<User> {

    // 普通查詢
    User getUserByName( String userName );

    // 分頁查詢
    IPage<List<User>> getUsersPage( Page page, @Param("query") User user );
}
複製程式碼
  • Service類
@Service
@AllArgsConstructor
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

    // 查:普通查
    @Override
    public User findUserByName( String userName ) {
        return baseMapper.getUserByName( userName );
    }

    // 分頁查
    @Override
    public IPage getUserPage(Page page, User user) {
        return baseMapper.getUsersPage( page, user );
    }
}
複製程式碼
  • Controller類
@GetMapping( value = "/page")
public Object getUserPage( Page page, User user ) {
	return userService.getUserPage( page, user );
}
複製程式碼

實際實驗一下,我們分頁查詢 年齡 = 58 的多條記錄:

分頁查詢結果

可以看到結果資料中,除了給到當前頁資料,還把總記錄條數,總頁數等一併返回了,很是優雅呢 !


寫在最後

由於能力有限,若有錯誤或者不當之處,還請大家批評指正,一起學習交流!



相關文章