SpringBoot + MyBatis(SQLite)なプロジェクトを30分で作成するハンズオン

More than 3 years have passed since last update.

勉強会用の資料です。

対面でやるため、資料は非常に雑です。


プロジェクトを作る

[New Project] -> [Gradle]

あと適当に。

newproject_gradle.png


SpringBootを使ってWebサーバを作る


build.gradle にspringbootを追加する

build.gradle

apply plugin: 'java'

sourceCompatibility = 1.8
version = '1.0'

repositories {
mavenCentral()
}

dependencies {
compile("org.springframework.boot:spring-boot-starter-web:1.3.5.RELEASE")// 追加
testCompile group: 'junit', name: 'junit', version: '4.11'
}


コントローラを作る

SampleController.java

@Controller

@EnableAutoConfiguration
public class SampleController {
@RequestMapping("/")
@ResponseBody
String home() {
return "Hello";
}

public static void main(String[] args) throws Exception {
SpringApplication.run(SampleController.class, args);
}
}


動作確認


  • 実行


    • クラスを選択して右クリック

    • [Run 'Sample...main()']をクリック



run.png


MybatisでSQLiteにアクセスする


build.gradle にmybatisとsqliteを追加する

dependenciesに2行追加する

build.gradle

dependencies {

compile("org.springframework.boot:spring-boot-starter-web:1.3.5.RELEASE")

compile group: 'org.mybatis', name: 'mybatis', version: '3.0.1'// 追加
compile group: 'org.xerial', name: 'sqlite-jdbc', version: '3.8.11.2'// 追加

testCompile group: 'junit', name: 'junit', version: '4.11'
}


ターミナルでdbを作る

% sqlite3 hoge.db

SQLite version 3.8.5 2014-08-15 22:37:57
Enter ".help" for usage hints.
sqlite> create table test_table(name);
sqlite> insert into test_table values('apple');
sqlite> insert into test_table values('banana');

※プロジェクト直下でやってね。


mybatisの設定ファイルを作る

リソースディレクトリにmybatis-config.xmlを作る

src/main/resources/mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
<environments default="sample_id">
<environment id="sample_id">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="org.sqlite.JDBC"/><!-- sqliteのドライバーを設定 -->
<property name="url" value="jdbc:sqlite:hoge.db"/><!-- dbのファイルパス -->
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="sample_mapper.xml"/>
</mappers>
</configuration>


マッパーを作る

リソースディレクトリにsample_mapper.xmlを作る

src/main/resources/sample_mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="sample.mybatis">
<select id="selectTest" resultType="map">
select * from test_table
</select>
</mapper>


コントローラーから呼び出す

SampleController.java

@Controller

@EnableAutoConfiguration
public class SampleController {
@RequestMapping("/")
@ResponseBody
List<Map<String, Object>> home() {
String resource = "mybatis-config.xml";
try (Reader in = Resources.getResourceAsReader(resource)) {
// ★設定ファイルを元に、 SqlSessionFactory を作成する
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);

// ★SqlSessionFactory から SqlSession を生成する
SqlSession session = factory.openSession();
// ★SqlSession を使って SQL を実行する
List<Map<String, Object>> result = session.selectList("sample.mybatis.selectTest");
return result;
} catch (IOException e) {
// nop
}

return null;
}

public static void main(String[] args) throws Exception {
SpringApplication.run(SampleController.class, args);
}
}


動作確認

[{"name":"apple","NAME":"apple"},{"name":"banana","NAME":"banana"}]


おつかれさまでした


補足: はまりポイント


importできない

原因: build.gradleを更新後、intellijのRefreshをしてない。

-> intellijでgradleをリフレッシュする

[View] - [Tool Windows] - [Gradle]を表示して、左上のリロードっぽいボタンを押す


なんにもしてないのにサーバが立ち上がらなくなった

原因: 前回実行したアプリを落としてない

-> [Run] - [Stop]


SampleController.javaはどこにおけばイイ?

src/main/java配下


SampleController.javaでimportすべきパッケージがわからん

import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.io.IOException;
import java.io.Reader;
import java.util.List;
import java.util.Map;