【Angularアプリケーション開発 #12】APIを作成しよう

# はじめに
タイトルにAngularと書いていますが、今回はAngularのことは出てきません。
java側で各リクエストに応じたAPIを作ってきたのでご紹介します。

## 前提
従業員テーブルに対してCRUDになります。
id,nameをカラムに持っています。
APIのメソッド名は適当につけています。参考にしないでください。

## 各種API

### 取得
テーブルに存在するレコードを全て取得

```java
	// 取得
    @GetMapping("api/getUserInfo")
    public List<UserInfo> getHoge() {
    	List<Map<String,Object>> userInfoListMap;

    	List<UserInfo> userInfoList = new ArrayList<UserInfo>();

        userInfoListMap = jdbcTemplate.queryForList("select id,name from userinfo");

        for(Map<String,Object> map:userInfoListMap) {
        	UserInfo info = new UserInfo();
        	info.setId((int) map.get("id"));
        	info.setName((String) map.get("name"));
        	userInfoList.add(info);
        }
        return userInfoList;
    }
```
### 1件取得
クエリパラメータでidが渡ってきます。```api/getUser?id=i```
```java
    // 1件取得
    @GetMapping("api/getUser")
    public UserInfo getPiyo(@RequestParam("id") String id) {
    	UserInfo userinfo = new UserInfo();

        Map<String,Object> result = jdbcTemplate.queryForMap("select id,name from userinfo where id = ?",id);

        userinfo.setId((int) result.get("id"));
        userinfo.setName((String) result.get("name"));

        return userinfo;
    }
```

### 条件に一致するレコードリストを取得
```java
    // 従業員名称で検索
    @GetMapping("api/searchUser")
    public List<UserInfo> searchUser(@RequestParam("name") String name) {
    	List<Map<String,Object>> userInfoListMap;
    	System.out.println(name);

    	List<UserInfo> userInfoList = new ArrayList<UserInfo>();

        userInfoListMap = jdbcTemplate.queryForList("select id,name from userinfo where name like " + "'" + name + "%'");

        for(Map<String,Object> map:userInfoListMap) {
        	UserInfo info = new UserInfo();
        	info.setId((int) map.get("id"));
        	info.setName((String) map.get("name"));
        	userInfoList.add(info);
        }
        return userInfoList;
    }
```

### 更新
こちらは、リクエストボディにデータがセットされてきます。
```java
    // 更新
    @PutMapping("api/updateUser")
    public int getFuga(@RequestBody UserInfo userinfo) {

        int rowNumber = jdbcTemplate.update("UPDATE userinfo"
                + " SET"
                + " name = ?"
                + " WHERE id = ?",
                userinfo.getName(),
                userinfo.getId());

        return rowNumber;
    }
```

### 登録
```java
    //1件登録
    @PostMapping("api/addUser")
    public UserInfo getFugaFuga(@RequestBody UserInfo newUserinfo) {

    	Map<String,Object> result = jdbcTemplate.queryForMap("select max(id) id from userinfo");
    	int maxId = (int)result.get("id");
    	newUserinfo.setId(++maxId);
    	System.out.println(newUserinfo.getId());

        int rowNumber = jdbcTemplate.update("INSERT INTO userinfo(id,"+ " name)" + " VALUES(?, ?)",
                newUserinfo.getId(),
                newUserinfo.getName());

        return newUserinfo;
    }
```

### 削除
```java
    // 1件削除
    @DeleteMapping("api/deleteUser")
    public int getFugaPiyo(@RequestParam("id") String id) {

    	int rowNumber = jdbcTemplate.update("DELETE FROM userinfo WHERE id = ?", id);

        return rowNumber;
    }
```

## 最後に
メソッド上部にHTTPリクエストに応じたアノテーションがついています。
各リクエストメソッドについては以下を参照ください。
参照：GET
登録：POST
更新：PUT
削除：DELETE