開発環境
Eclipse ver2018-09(4.9.0)
Java8
spring boot2.2.0
Gradle
MySQL
プロジェクト作成
ファイル > 新規 > springスタータ-・プロジェクト を選択。
ビルドツールのMavenとGradleはお好みで選択してください。
Bootを使わないSpring FrameworkではMavenを使用していたので、今回はGradleを選択しました。Gradleはbuild.gradleファイルで依存を設定していきます。AndroidStudioではGradleがデフォルトとなっています。

依存関係を選択します。今回はWeb上でCRUDを試したいので下記を選択しました。完了をクリックすれば自動的にプロジェクトが生成されます。
- Spring Web
- Tymeleaf(HTMLテンプレートエンジン)
※Spring Bootでは、jspは推奨しておりません。HTMLで記述をしていきます。 - MySQL Driver
- Spring Data JPA(DBをつなぐORMapper)
SQL文が内包されているので、SQL文を書く手間が省けます。 - Lombok
冗長なアクセッサーなどをアノテーションで自動生成する事ができます。 - Spring Boot DevTools
ホットデプロイが可能になります。

DB接続設定
resourcesフォルダ直下にあるapplication.propertiesに書き込んでいきます。Bootを使用しない時は、serverのxmlやBeans定義ファイルをあちこち設定していたので、applicationファイルだけを記述すればOKという楽さに感動しました。
さすが、tomcat内包のスタンドアローン。。。素敵すぎます。
spring.datasource.url=jdbc:mysql://localhost:3306/DB名?serverTimezone=UTC spring.datasource.username=root spring.datasource.password=password spring.jpa.database=MYSQL spring.jpa.hibernate.ddl-auto=update
Entity Classの作成
EntityClassはデータの入れ物をなるクラスです。DomainClassと同等な感覚です。
@Entity
@Table(name="member")
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
public class Member{
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@Column(name="name")
private String name;
@Column(name="age")
private Integer age;
}
Repository Interfaceの作成
継承しているJpaRepositoryにはJQPL(SQL文)の簡易クエリが搭載されています。このクラスを継承する事によりSQL文を書く手間が省けます。
JpaRepository<Entityクラス名,idのtype>
@Repository
public interface MemberRepository extends JpaRepository<Member,Integer>{}
Service Classの作成
CRUDの機能を実装してゆきます。
※findOne()メソッドについて
findOne()を使用する際には、戻り値がOptional型になります。
Optional型とは値がnullであっても保持することができる型です。(ぬるぽ回避)
そのため、値がnullでない時にはget()で値を返す必要があります。(if文の部分)
ifで使われているisPresent()はOptional型に保持されている値がnull以外の時に「true」を返します。
この機能を使って、値をget()に受け渡してください。
@Service
@Transactional(rollbackOn=Exception.class)
public class MemberService{
@Autowired
MemberRepository repository;
public List<Member> findAll(){
return repository.findAll();
}
public Member findOne(Integer id) {
Optional<Member> member = repository.findById(id);
if(member.isPresent()) {
return member.get();
}else {
return null;
}
}
public Member save(Member member){
return repository.save(member);
}
public void delete(Integer id){
repository.deleteById(id);
}
}
Controller Classの作成
@Controller
@RequestMapping("/member")
public class MemberController {
@Autowired
private MemberService memberService;
@GetMapping
public String index(Model model) {
List<Member> members = memberService.findAll();
model.addAttribute("members", members);
return "index";
}
@GetMapping("new")
public String newMember(Model model) {
return "new";
}
@GetMapping("{id}/edit")
public String edit(@PathVariable Integer id, Model model) {
Member member = memberService.findOne(id);
model.addAttribute("member", member);
return "edit";
}
@PostMapping
public String create(@ModelAttribute Member member) {
memberService.save(member);
return "redirect:/member";
}
@PostMapping("{id}/edit")
public String update(@PathVariable Integer id, @ModelAttribute Member member) {
member.setId(id);
memberService.save(member);
return "redirect:/member";
}
@PostMapping("{id}")
public String destroy(@PathVariable Integer id) {
memberService.delete(id);
return "redirect:/member";
}
}
次回は、HTMLを作成していきます。

