詳細はKotlinでSpring Bootに基づくRESTfulサービスを書いてください。
Springは複雑すぎて、これを配置するのは命の無駄です。特に、合併の圧力がないので、適当にRESTfulサービスをやって、業務全体を先に走り始めた場合、XMLの配置にこだわる必要がありますか?明らかにそう思っている人が多いので、Spring Bootがあります。また、Java 8は墨があまりにも多くてKotlinができました。
データソースはMySqlを使用します。Spring Bootという基本的にはあまり配置されていない、あまり小さくないマイクロフレームのSpring Data JPAとHibernateでデータにアクセスします。
処理の依存性
ここではGraadleを用いて依存性を処理した。
まずウェブサイトからの初期項目をダウンロードします。
IntelliJ IDEAでこのプロジェクトを開けて、Graadleで管理依存を選択します。
その後、Graadleは依存項目を自動的にダウンロードします。これはちょっと時間がかかります。妹としばらく話しに行ってもいいです。
このように面倒くさいと思ったら、Graadleプロジェクトを作ることができます。上記の例に従ってディレクトリを作成します。
次はこうです。
ディレクトリ
構成項目
簡単なエンティティクラスを作成します。
ここでは、簡単なエンティティクラスを定義し、JPAエンティティとして宣言します。この種類のファイルはディレクトリ
パラメータなしの構造関数はJPA用ですので、アクセスレベルは
全体のクラスは
他の2つの属性
簡単なクエリーを作成するか、またはDaoクラスを作成します。
これはもっと簡単です。JPAは自動的に実行時にデータベースを作成するために必要な添削を行います。この実現は私たちが提供したRepositoryによるものとすることができます。
実現します。
Controllerでテストしてみます。
データベース、Resetサービスと書庫の接続は全部終わりました。じゃ、テストしてみます。
私たちはは//create?name=Jack&[email protected]で、指定されたユーザ名とメールボックスを使ってデータベース内で新しいユーザを生成します。idは自動的に生成されます。 /delete?id=3、ID値が3のuserを削除します。 //get-by-email?[email protected]、Controllerに使用されるUserDao.findByEmail()は一つのuserに戻りますので、複数があれば、注意してください。 値を返したらエラーが発生します。 は//udate?id=1&[email protected]&name=Bruceで、idが1のuserに更新されます。 以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
データソースはMySqlを使用します。Spring Bootという基本的にはあまり配置されていない、あまり小さくないマイクロフレームのSpring Data JPAとHibernateでデータにアクセスします。
処理の依存性
ここではGraadleを用いて依存性を処理した。
まずウェブサイトからの初期項目をダウンロードします。
git clone https://github.com/spring-guides/gs-accessing-data-jpa.git
その後、gs-accessing-data-jpa/initial
ディレクトリの下に移動します。IntelliJ IDEAでこのプロジェクトを開けて、Graadleで管理依存を選択します。
その後、Graadleは依存項目を自動的にダウンロードします。これはちょっと時間がかかります。妹としばらく話しに行ってもいいです。
このように面倒くさいと思ったら、Graadleプロジェクトを作ることができます。上記の例に従ってディレクトリを作成します。
└── src
└── main
└── java
└── hello
しかし、上記のいずれの方法でも、最後にはGraadleファイルに依存項目を追加する必要があります。このGraadleファイルはbuild.gradle
です。依存項を追加しました次はこうです。
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.3.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'
jar {
baseName = 'gs-spring-boot'
version = '0.1.0'
}
repositories {
mavenCentral()
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
dependencies {
// tag::jetty[]
compile("org.springframework.boot:spring-boot-starter-web") {
exclude module: "spring-boot-starter-tomcat"
}
compile("org.springframework.boot:spring-boot-starter-jetty")
// end::jetty[]
// tag::actuator[]
compile("org.springframework.boot:spring-boot-starter-actuator")
// end::actuator[]
compile('org.springframework.boot:spring-boot-starter-data-jpa:1.3.3.RELEASE')
compile('mysql:mysql-connector-java:5.1.13')
testCompile("junit:junit")
}
task wrapper(type: Wrapper) {
gradleVersion = '2.3'
}
設定ファイルディレクトリ
src/main/resources/application.properties
でプロファイルを編集します。デフォルトでは、このファイルと対応するディレクトリがないので、自分で作成します。
spring.datasource.url = jdbc:mysql://localhost:3306/test
spring.datasource.username = root
spring.datasource.password = root
#spring.datasource.driverClassName = com.mysql.jdbc.Driver
# Specify the DBMS
spring.jpa.database = MYSQL
# Keep the connection alive if idle for a long time (needed in production)
spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# Use spring.jpa.properties.* for Hibernate native properties (the prefix is
# stripped before adding them to the entity manager)
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
Javaの設定クラス、またはXMLの設定ファイルは必要ありません。構成項目
hibernate.ddl-auto = true,
を使用するために必要なデータベースと関連テーブル、列は、自動的に定義されたエンティティクラスに従って作成されます。ここをクリックします、より多くの構成の説明を見る。簡単なエンティティクラスを作成します。
ここでは、簡単なエンティティクラスを定義し、JPAエンティティとして宣言します。この種類のファイルはディレクトリ
src\main\java\hello\Entities\
に保存されます。
package hello.Entities
import javax.validation.constraints.NotNull
import java.io.Serializable;
import javax.persistence.*;
/**
* Created by Bruce on 2016/3/9.
*/
@Entity
@Table(name = "user")
data class User(@Id @GeneratedValue(strategy = GenerationType.AUTO) var id: Long? = 0,
@Column(nullable = false) var name: String? = null,
@Column(nullable = false) var email: String? = null) : Serializable {
protected constructor() : this(id = null, name = null, email = null) {
}
}
ここではKotlinのdata classを使っています。data classの最大の利点は、getterとsetterを定義し、toString()
の時間を省くことです。これらはすでにデフォルトで実現されました。したがって、data classのオブジェクトを使用する場合は、直接name
、email
を使用することができます。もちろん、id
という属性があります。パラメータなしの構造関数はJPA用ですので、アクセスレベルは
protected
に設定されています。主コンストラクタは、データベース操作に関連するオブジェクトを作成するために使用されます。全体のクラスは
@Entity
によって修飾され、全体のクラスはJPAのエンティティクラスであることを示している。@Table
宣言は、クラス全体の対応を示すデータベーステーブルのどれですか?@Id
で修飾されたUser
の属性id
は、JPAが対象とするIDである。同時に@GeneratedValue(strategy = GenerationType.AUTO)
の修飾は、このIDが自動的に生成されると説明している。他の2つの属性
name
とemail
は@Column(nullable = false)
によって修正される。二つの列は全部空ではいけないということを説明します。二つの列の名前と属性の名前は同じです。もし違ったらこのように@Column(nullable = false, name="XXXXXX")。
です。簡単なクエリーを作成するか、またはDaoクラスを作成します。
これはもっと簡単です。JPAは自動的に実行時にデータベースを作成するために必要な添削を行います。この実現は私たちが提供したRepositoryによるものとすることができます。
実現します。
User
クラスによって、UserDao(Repository):
を実現します。
package hello.Entities
import org.springframework.data.repository.CrudRepository
import org.springframework.transaction.annotation.Transactional
@Transactional
interface UserDao : CrudRepository<User, Long> {
fun findByEmail(email: String): User?
}
汎型のタイプパラメータは、それぞれuserとuserのidのタイプです。User
、Long
。私たちは添削以外のQueryを定義できます。例えば上記のコードの中でfindByEmail()
の方法を定義しました。具体的なカスタムクエリの名前のルールはここを見ることができます。Controllerでテストしてみます。
データベース、Resetサービスと書庫の接続は全部終わりました。じゃ、テストしてみます。
私たちは
src\main\java\hello\Controllers
でUserController
クラスを作成して、データベースとのデータアクセスをテストします。
package hello.Controllers
import hello.Entities.User
import hello.Entities.UserDao
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.web.bind.annotation.RestController
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.ResponseBody
/**
* Created by Bruce on 2016/3/9.
*/
@RestController
class UserController {
@Autowired
private var userDao: UserDao? = null
@RequestMapping("/create")
@ResponseBody
public fun create(name: String, email: String): User? {
try {
var newUser = User(name = name, email = email)
userDao?.save(newUser)
return newUser
} catch(e: Exception) {
return null
}
}
@RequestMapping("/delete")
@ResponseBody
public fun delete(id: Long): String {
try {
var user = User(id)
userDao?.delete(user)
return id.toString() + "deleted"
} catch(e: Exception) {
return "delete error " + e.message.toString()
}
}
@RequestMapping("/get-by-email")
@ResponseBody
public fun getByEmail(email: String): User? {
try {
var user = userDao?.findByEmail(email)
if (user != null) {
return user
} else {
return null
}
} catch(e: Exception) {
return null
}
}
@RequestMapping("/update")
@ResponseBody
public fun updateUser(id: Long, name: String, email: String): User? {
try {
var user: User? = userDao?.findOne(id) ?: return null
user?.name = name
user?.email = email
userDao?.save(user)
return user
} catch(e: Exception) {
return null
}
}
}
テストURLは、このようにすることができます。