1.SpringBootの概要
SpringBootは、Spring、SpringMVC、および関連する一般的なフレームワークをデフォルトで統合し、デフォルトで通常の構成を完了するコレクションです。構成に関して、SpringBootの哲学は「慣習は構成よりも大きい」です。使用の過程で、構成する必要はありませんが、SpringBootによって完成された構成値にも準拠します。
2.SpringBootプロジェクトを作成します
https://start.spring.ioを開き、ページにプロジェクトを作成するためのパラメーターを入力し、必要に応じて、追加する必要のある依存関係を確認し、[生成]ボタンをクリックしてプロジェクトをダウンロードします。
ダウンロードしたプロジェクト圧縮パッケージを解凍してプロジェクトフォルダーを取得します。プロジェクトフォルダーはWorkspaceに移動し、Eclipseで[インポート]> [既存のMavenプロジェクト]からプロジェクトをインポートします。
インポートするときは、現在のコンピューターがMavenサーバーに接続できることを確認してください。このプロジェクトでは、Mavenサーバーから多数の依存jarパッケージをダウンロードする必要があります。
プロジェクトが自動的に更新を開始しない場合は、プロジェクトを右クリックして[Maven]> [プロジェクトの更新]を選択し、ポップアップダイアログボックスで[強制更新...]をオンにして更新を試みます。それでも更新に失敗する場合は、依存しているスプリングブートのバージョンを下げることができます。
Eclipse Oxygen(4.7)以降を使用することをお勧めします。より低いバージョンのEclipseを使用している場合、pom.xmlファイルでMavenバージョンエラーが表示される場合があります。このエラーは無視してかまいませんが、プロジェクトの操作には影響しません。
3.SpringBootプロジェクトの構造
たとえば、作成されたプロジェクト構造は次のとおりです。
[Java Resources]
[src/main/java]
[cn.tedu.springboot]
ServletInitializer.java
SpringbootApplication.java
[src/main/resources]
[static]
[templates]
application.properties
[src/test/java]
[cn.tedu.springboot]
SpringbootApplicationTests.java
注:上記のcn.tedu.springbootパッケージは、プロジェクトの作成時に設定されたグループとアーティファクトに従って決定され、現在のプロジェクトで設定されたコンポーネントスキャンのルートパッケージでもあります。したがって、後続のプログラミング中に、すべてのコンポーネントクラス(コントローラークラスなど)をこのパッケージまたはそのサブパッケージに配置する必要があります。
注:SpringbootApplicationクラスの名前は、プロジェクトの作成時に設定されたアーティファクトによっても決定されます。このクラスは、SpringBootプロジェクトのスタートアップクラスです。実行する必要がある場合は、このクラスでmain()メソッドを実行してください。
注:SpringBootプロジェクトにはTomcatが組み込まれています。スタートアップクラスが実行されると、プロジェクトは組み込みのTomcatにデプロイされます。
注:src / main / resourcesの下の静的フォルダーは、.html、.css、.js、写真などの静的リソースを保存するためのフォルダーです。
注:src / main / resourcesの下のtemplatesフォルダーは、テンプレートページを保存するために使用されます。たとえば、Thymeleafを使用する場合は、関連するテンプレートページをここに配置する必要があります。
注:src / main / resourcesの下にあるapplication.propertiesファイルはSpringBootプロジェクトの唯一の構成ファイルであり、すべてのカスタム構成はこのファイルで構成する必要があります。構成ファイルapplication.ymlを使用するSpringBootプロジェクトもいくつかあります。application.propertiesとの違いは、構成の構文のみであり、機能と位置はまったく同じです。
注:src / test / javaの下にcn.tedu.springbootパッケージがあります。このパッケージ名は、プロジェクトの作成時にも決定されます。SpringBootプロジェクトのすべてのユニットテストクラスは、このパッケージまたはサブパッケージに配置する必要があります。そうしないと、ユニットテストの実行時にSpring環境がロードされません。SpringbootApplicationTestsテストクラスでは、クラスの宣言ステートメントの前にある2つの注釈は、各ユニットテストクラスに追加する必要のある注釈でもあります。
4.静的WebページをSpringBootプロジェクトに追加します
src / main / resources / staticの下にindex.htmlを作成します。コンテンツは自分で設計できます。完了したら、プロジェクトを開始し(SpringbootApplicationクラスでmain()メソッドを実行)、ブラウザーを開いて、http:// localhost:8080 /にアクセスします。このページにアクセスできます!
index.htmlはデフォルトのウェルカムページのファイル名であるため、アクセス時にURLでhttp:// localhost:8080 /index.htmlを明示的に使用する必要はありません。
5.SpringBootプロジェクトの組み込みTomcatのポート番号を変更します
src / main / resourcesの下のapplication.propertiesに構成を追加します。
server.port=8888
HTTPプロトコルのデフォルトのポート番号は80です。ポート番号をこの値に変更することもできます。Linuxオペレーティングシステムを使用している場合、ポート80を使用するには、関連する権限設定が必要です。
6.SpringBootプロジェクトでリクエストを処理します
プロジェクトのルートパッケージcn.tedu.springbootの下にサブパッケージコントローラーを作成し、このサブパッケージにコントローラークラスHelloControllerを作成し、クラスの前に@RestControllerアノテーションを追加します。
package cn.tedu.springboot.controller;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
}
@RestControllerは、@ Controller + @ResponseBodyと同等です。つまり、この注釈を追加した後、現在のクラスはコントローラークラスであり、現在のクラスで要求を処理するすべてのメソッドは応答本文です。これは、要求を処理する各メソッドの前に追加することと同じです。 @ResponseBody!@RestControllerは、SpringBootプロジェクトに固有の注釈ではありません。通常のSpringMVCプロジェクトでも使用できますが、個別に構成する必要があります。
注:SpringBootプロジェクトはデフォルトでSpringMVCのDispatcherServletを構成しており、マップされたパスは/です。したがって、SpringBootを使用して開発する場合、設計要求パスで.doをサフィックスとして使用する必要はありません。*
次に、コントローラークラスに処理要求を追加します。
@GetMapping("hello")
public String showHello() {
return "Hello, <b>SpringBoot</b>!!!";
}
上記の@GetMappingは、@ RequestMapping(method = RequestMethod.GET)と同等です。つまり、制限要求メソッドはGETタイプの要求である必要があります。さらに、@ PostMappingがあります......
- SpringBootを使用してユーザー登録機能を開発する
7.1。フロントエンドページを作成する
通常の開発プロセスは最後のページになります!
src / main / resources / staticの下にユーザー登録ページを作成します。
7.2。コントローラーを使用して、要求を受信および処理します
ユーザーから送信された登録データの受信を容易にするために、最初に、cn.tedu.springboot.entity.Userユーザーデータのエンティティクラスを作成する必要があります。
cn.tedu.springboot.controller.UserControllerコントローラークラスを作成し、コントローラークラスの前に@RestControllerと@RequestMapping( "user")を追加します。
@RequestMapping("user")
@RestController
public class UserController {
}
次に、リクエストを受信して処理するメソッドを追加します。
@PostMapping("reg")
public void reg(User user) {
// 目前无法确定注册成功与否,暂时使用void作为返回值类型
System.err.println("UserController.reg()");
System.err.println("\t" + user);
// TODO 将用户数据写入到数据库中
}
フロントエンドページで、登録リクエストが/ user / regに送信されていることを確認します。正しい場合は、プロジェクトを開始し、ユーザーの登録データをサーバー側コントローラーに送信できるかどうかを確認します。
7.3。データベース接続
SpringBootプロジェクトには、デフォルトで統合データベースプログラミングに必要な依存関係がありません。プロジェクトの作成時に追加することも、プロジェクトが正常に作成された後にpom.xmlに関連する依存関係を追加することもできます。
MyBatisとMySQLへの依存関係は次のとおりです。
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
注:SpringBootプロジェクトにデータベース関連の依存関係を追加しても、データベース接続関連の情報を構成しない場合、SpringBootは開始時にデータベース関連の情報をロードするため、プロジェクトの開始時にエラーが報告されます。
次に、application.propertiesに構成を追加する必要があります。
spring.datasource.url=jdbc:mysql://localhost:3306/tedu_ums?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
データベース接続を構成する場合、driverClassNameを構成する必要はありません。SpringBootは、データベース接続のjarパッケージから自動的にそれを見つけます。
上記の構成を追加した後、構成値が間違っていても、プロジェクトの起動には影響しません。ただし、構成が時間内に正しいかどうかを確認する必要があります。ユニットテストでデータベース接続を試みることができます。接続できる場合、構成は正しいです。接続できない場合、構成が間違っているか、関連するjarパッケージが破損しています。
SpringbootApplicationTestsでユニットテストを記述して実行します。
@Autowired
private DataSource dataSource;
@Test
public void getConnection() throws SQLException {
Connection conn = dataSource.getConnection();
System.err.println(conn);
}
SpringBootユニットテストは実行前にプロジェクト全体の構成とSpring環境をロードするため、従来のSpringMVCプロジェクトでgetBean()を介して取得できるオブジェクトは、SpringBootプロジェクトで自動的にアセンブルできます。
7.4.MyBatisを介してデータを挿入する
cn.tedu.springboot.mapper.UserMapperインターフェイスを作成し、インターフェイスに抽象メソッドを追加します。
Integer insert(User user);
次に、インターフェイスファイルの場所を構成する必要があります。インターフェイスの宣言ステートメントの直前に@Mapperアノテーションを追加できます!このアプローチを使用する場合、各MyBatisインターフェイスはこの注釈を追加する必要があります。クラスを開始する前に、構成用に@MapperScan注釈を追加する別の方法があります。
@SpringBootApplication
@MapperScan("cn.tedu.springboot.mapper")
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
}
src / main / resourcesの下にmappersという名前のフォルダーを作成します。これは、SQLステートメントを構成するためのXMLファイルを格納するために特別に使用され、このフォルダーの下にUserMapper.xmlファイルをコピーして貼り付けて構成します。
<mapper namespace="cn.tedu.springboot.mapper.UserMapper">
<insert id="insert"
useGeneratedKeys="true"
keyProperty="id">
INSERT INTO t_user (
username, password,
age, phone,
email, is_delete,
department_id
) VALUES (
#{username}, #{password},
#{age}, #{phone},
#{email}, #{isDelete},
#{departmentId}
)
</insert>
</mapper>
SpringBootプロジェクトでは、XMLファイルの場所を構成する必要があり、application.propertiesに構成を追加する必要があります。
mybatis.mapper-locations=classpath:mappers/*.xml
完了後、ユニットテストを作成して実行します。
@Autowired
private UserMapper userMapper;
@Test
public void insert() {
User user = new User();
user.setUsername("boot");
user.setPassword("1234");
Integer rows = userMapper.insert(user);
System.err.println("rows=" + rows);
}
「一意のユーザー名」を確認するために、ユーザーが登録を試みる前にユーザー名が登録されているかどうかを確認し、「ユーザー名に基づいてユーザーデータをクエリ」し、クエリ結果がnullかどうかを判断して、答えを判断できます。
したがって、UserMapper.javaインターフェイスを追加します。
User findByUsername(String username);
そして、UserMapper.xmlでSQLマッピングを構成します。
<select id="findByUsername"
resultType="cn.tedu.springboot.entity.User">
SELECT
*
FROM
t_user
WHERE
username=#{username}
</select>
完了後も、ユニットテストを作成して実行する必要があります。
@Test
public void findByUsername() {
String username = "root";
User user = userMapper.findByUsername(username);
System.err.println(user);
}
次に、上記の方法をコントローラーの要求を処理するプロセスに適用します。
@PostMapping("reg")
public JsonResult reg(User user) {
System.err.println("UserController.reg()");
System.err.println("\t" + user);
JsonResult jsonResult = new JsonResult();
// 检查该用户名是否已经被注册
String username = user.getUsername();
User result = userMapper.findByUsername(username);
// 判断查询结果是否为null
if (result == null) {
// 将用户数据写入到数据库中
userMapper.insert(user);
jsonResult.setState(1);
} else {
// 用户名已经被注册
jsonResult.setState(2);
jsonResult.setMessage("您尝试注册的用户名(" + username + ")已经被占用!");
}
return jsonResult;
}