1. 程式人生 > 實用技巧 >tensorflow2.0——波士頓房價資料與房間數關係的預測

tensorflow2.0——波士頓房價資料與房間數關係的預測

1. 前言

spring-boot 整合 MyBatis小節中,我們介紹瞭如何在 spring-boot 中整合 MyBatis,MyBatis 雖然靈活,但是對於業務開發還略顯不夠。MyBatis-Plus 是國內開發者為 MyBatis 定製的一款增強工具,在不侵入 MyBatis 的基礎上能夠快速地提升 MyBatis 的開發能力,為開發者節省大量的時間。

2. 簡介

MyBatis-Plus(簡稱 MP)是一個 MyBatis 的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。

MyBatis-Plus 內建豐富的基礎 mapper 和外掛,是目前國內使用最為廣泛的開源專案之一。

3. 依賴

在 spring-boot 的基礎上,使用 MyBatis-Plus 也十分簡單,只需在 pom 檔案中新增上對應的 starter 即可。

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.3.1.tmp</version>
</dependency>
  1. 準備

MP 提供了十分方便的 BaseMapper 供專案 mapper 繼承,如下:

@Mapper
@Repository
public interface UserMapper extends BaseMapper<User> {

  @Select("SELECT * FROM imooc_user")
  List<User> getUsers();
}

UserMapper 繼承 BaseMapper 後就擁有了基礎的增刪查改功能,而無需寫 SQL。BaseMapper 必須指定一個與 UserMapper 對應的模型類,即 User 類。

@TableName("imooc_user")
public class User implements Serializable {
  @TableId("id")
  private Long id;
  private String username;
  private Integer age;
  private Integer score;
  // 省略諸多 getter 和 setter 方法
}

在模型類中,我們需要通過 TableName 註解指定模型對於的資料表名稱,並通過 TableId 註解指定資料表字段。

並在 SpringbootMybatisExampleApplication 啟動類上新增 MapperScan 註解來掃描 mapper,如下:

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.imooc.mybatis.springbootmybatisexample.mapper")
public class SpringbootMybatisExampleApplication {
  public static void main(String[] args) {
    SpringApplication.run(SpringbootMybatisExampleApplication.class, args);
  }
}

MapperScan 中需填入 mapper 所在的包路徑,即 com.imooc.mybatis.springbootmybatisexample.mapper。

  1. 使用

5.1 基礎使用

接下來,我們在 UserController 中來使用增強後的 UserMapper。

@RestController
@RequestMapping("/user")
public class UserController {
  @Autowired
  private UserMapper userMapper;

  @GetMapping
  public List<User> getUsers() {
    // return userMapper.getUsers();
    return userMapper.selectList(null);
  }
}

這裡,我們替換了之前使用的 getUsers 方法,而是使用了 BaseMapper 提供的 selectList 方法,該方法接收一個引數,這裡我們暫時定為 null。

執行程式,並通過 curl 測試介面:

# curl 127.0.0.1:8080/user/
[{"id":1,"username":"peter","age":18,"score":100},{"id":2,"username":"pedro","age":24,"score":200},{"id":3,"username":"jerry","age":28,"score":500},{"id":4,"username":"mike","age":12,"score":300}]

我們仍然取得了與之前一樣的結果。可以看到,MP 在增強 UserMapper 後,我們無需再寫多餘的 SQL,MP 自動的為我們生成了對應的 SQL 語句。

5.2 進階使用

MP 的功能遠不止如此簡單,我們還可以通過 Java API 給 selectList 函式傳入 SQL 篩選條件。如,我們只想獲取分數大於 200 分的使用者。

@RestController
@RequestMapping("/user")
public class UserController {
  @Autowired
  private UserMapper userMapper;

  @GetMapping
  public List<User> getUsers() {
    QueryWrapper<User> condition = new QueryWrapper<>();
    condition.lambda().gt(User::getScore, 200);
    return userMapper.selectList(condition);
  }
}

QueryWrapper 是 MP 提供的查詢條件包裝器,通過 Java API 的方式我們就可以構造 SQL 過濾條件。如這裡我們通過 lamdba 表示式構造了使用者積分需大於200的過濾條件,然後將包裝器以引數的形式傳遞給 selectList 函式。

再次執行程式,並通過 curl 測試介面:

# curl 127.0.0.1:8080/user/
[{"id":3,"username":"jerry","age":28,"score":500},{"id":4,"username":"mike","age":12,"score":300},{"id":5,"username":"tom","age":27,"score":1000}]

從結果中,可以看出積分小於200的使用者都已經被過濾掉了。

5.3 分頁外掛

MP 內建提供了分頁外掛,只需幾行程式碼我們就可直接引入。

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;

@SpringBootApplication
@MapperScan("com.imooc.mybatis.springbootmybatisexample.mapper")
public class SpringbootMybatisExampleApplication {
  @Bean
  public PaginationInterceptor paginationInterceptor() {
    return new PaginationInterceptor();
  }
  public static void main(String[] args) {
    SpringApplication.run(SpringbootMybatisExampleApplication.class, args);
  }
}

在 SpringbootMybatisExampleApplication 啟動類中,我們添加了一個帶有 Bean 註解的 paginationInterceptor 方法,該方法返回一個
PaginationInterceptor 物件,這樣外掛就配置完成了。

接下來,我們來使用它。

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

@RestController
@RequestMapping("/user")
public class UserController {
  @Autowired
  private UserMapper userMapper;

  @GetMapping
  public List<User> getUsers() {
    Page page = userMapper.selectPage(new Page<>(1, 3), null);
    return page.getRecords();
  }
}

UserMapper 的 selectPage
方法接受兩個引數,第一個引數是分頁配置,第二個引數是查詢條件包裝器。這裡第一個引數,我們直接通過 Page 建構函式來構造,1 表示當前頁,3
表示分頁最大的記錄數,即第一頁且最多返回三條記錄;第二個引數我們直接設定為 null。

執行程式,並通過 curl 測試介面:

# curl 127.0.0.1:8080/user/
[{"id":1,"username":"peter","age":18,"score":100},{"id":2,"username":"pedro","age":24,"score":200},{"id":3,"username":"jerry","age":28,"score":500}]

從結果可以看出,分頁生效了,記錄總數卻是為 3 條。