勉強会用の資料です。
対面でやるため、資料は非常に雑です。
プロジェクトを作る
[New Project] -> [Gradle]
あと適当に。
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()']をクリック
- ブラウザで "http://localhost:8080/" にアクセス
- Helloが表示されたらOK!
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);
}
}
動作確認
- 実行、"http://localhost:8080/" にアクセス
- ↓ こんなんが表示されたらOK!!!!
[{"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;