この記事では、最も基本的なJavaプロジェクトであるWebプロジェクトを、Spring、SpringMVC、SpringDatajpa+Hibernateの統合に紹介します。
通常、テンプレートを介してプロジェクトを構築するか、プロジェクトを直接インポートする場合があります。ただし、この記事では、より多くの原則を示す目的で、最も基本的なJavaプロジェクトから始めることを選択します。
もちろん、私たちはまだ最も基本的なMavenプロジェクトから始めます。実際、通常の非被告プロジェクトの建設プロセスはほとんど同じです。 JARパッケージはプロジェクトに手動で追加する必要がありますが、Mavenプロジェクトは構成ファイルを変更するだけです。
以下が正式に開始されます。
1. Mavenに基づいて最も基本的なJavaプロジェクトを作成します(Mavenを使用していない場合は、従来のプロジェクトを使用することもできます)
新しいプロジェクトを作成するには、Maven Projectを選択してください。
シンプルなプロジェクトを作成するように確認してください。
グループIDは、ドメイン名の逆順であり、通常はプロジェクトソースコードのパッケージ名に対応します。 Artifact IDは、このグループIDのプロジェクトの唯一の名前です。それはあなたの趣味に応じて何らかの形で埋めることができ、それから終了します:
これは、次のようなプロジェクトディレクトリ構造の結果です。
pom.xmlはMavenのコアファイルです。
2.プロジェクトを動的Webモードに設定します
次に、プロジェクトをWebプロジェクトに変換し、右クリックしてプロジェクトプロパティを開きます。図に示すように、左側のメニューのプロジェクトファセットをクリックしてから、[変換]をクリックして、FaceTedのファセットになります。
右側では、ダイナミックWebモジュールをチェックして[OK]をクリックします。
この時点で、追加のWebContentディレクトリが表示されます。
Web-INFディレクトリで、次のようにweb.xmlファイルを追加します。
<?xml version = "1.0" encoding = "utf-8"?> <web-app xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xml/ns/javaee" xsi:schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd "version =" 3.0 "> <display-name> springdatajpa </display-name> <welcome-file-list> <welcome-file> index.html </welcome-file-list> </web-app>
次に、ウェルカムページindex.htmlを追加します。
<html> <head> </head> <body> <h1> hello word!</h1> </body> </html>
ディレクトリ構造は次のとおりです。
この時点で、プロジェクトを右クリックしてサーバーで実行できます。あなたは効果を見ることができます:
3。Spring+SpringMVCを統合します
新しいパッケージを作成し、いくつかのインターフェイスとクラスを追加します(特定のコードは後でリストされます)。パッケージ構造は、図に示されているとおりです。
JARパッケージを追加する必要がある場合は、POMファイルを直接変更するだけです。通常のプロジェクトの場合は、pom.xmlのJARパッケージを押してプロジェクトに追加するだけです。
まず、統一された管理を促進するために使用されるスプリングバージョンを追加し、必要なすべてのJARパッケージを追加します。以下は、ここに必要なすべてのJARパッケージを追加するためです。完了したpom.xmlは次のとおりです。
<Project XMLNS = "http://maven.apache.org/pom/4.0.0" xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation = "http://maven.apach/4.0. http://maven.apache.org/xsd/maven-4.0.0.xsd "> <modelversion> 4.0.0 </modelversion> <groupid> com.anxpp </groupid> <artifactid> springdatajpa </artifactid> <バージョン> 0.0.1-snapshot </> < <spring.version> 4.2.5.Release </spring.version> </properties> <dependencies> <! - springコアパッケージ - > <依存関係> <groupid> org.springframework </groupid> <artifactid> spring-core </artifactid> <バージョン> $ {spring.version} <GroupId> org.SpringFrameWork </groupId> <artifactid> spring-web </artifactid> <version> $ {spring.version} </version> </dependency> <dependency> groupid> org.springframework </groupid> <artifactid> spring-> </spring> <Dependency> groupId> org.springframework </groupid> <artifactid> spring-tx </artifactid> <version> $ {spring.version} </version> </dependency> <redency> <groupid> org.springframework </groupid> <artifactid> spring> </artifactid> </artifactid> < </dependency> <dependency> groupid> org.springframework </groupid> <artifactid> spring-webmvc </artifactid> <bersion> $ {spring.version} </version> </dependency> <redency> <groupid> org.spramework </groupid> <artifactid> spring-aop-aop-aop-aop-aop-aop-aop-aop-aop-aop- <バージョン> $ {spring.version} </version> </dependency> <dependency> <groupid> org.springframework </groupid> <artifactid> spring-context-support </artifactid> <バージョン> $ {spring.version} </version> </dependency> <dependency> <artifactid> spring-test </artifactid> <version> $ {spring.version} </version> </dependency> <dependency> <groupid> org.springframework </groupid> <artifactid> spring-torm </artifactid> <バージョン> $ {spring.version} </バージョン<groupid> org.springframework.data </groupid> <artifactid> spring-data-jpa </artifactid> <バージョン> 1.10.1.release </version> </dependency> </dependencies> </project>Web-INFディレクトリにSpring構成ファイルApplicationContext.xmlを追加し、次のコンテンツを追加します。
<?xml version = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns:context = "http://www.springframework.org/schema/context" xmlns:aop = "http://www.springframework.org/schema/aop" xmlns:p = " xmlns:tx = "http://www.springframework.org/schema/tx" xmlns:mvc = "http://www.springframework.org/schema/mvc" xsi:schemalocation = " http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/spring-4.x2.xd2.xp. http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd "> <! - IOC Annotation scan-> < MVCアノテーションスキャン - > <MVC:Annotation-Driven /> < /Beans>
web.xmlを変更し、スプリングを追加します。
<?xml version = "1.0" encoding = "utf-8"?> <web-app xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xml/nns/javaee xsi:schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_0.xsd" <display-name> springdatajpa </display-name> <リスナー> <リスナー> <リスナークラス> org.springframework.web.context.contextloaderlistener </ristener-class> </ristener> <context-param> <param-name> contextconfiglocation </param-balue> <param-value> <param-value> </Context-Param> <Servlet> <Servlet-Name> springMVC </servlet-name> <servlet-class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <init-param> <param-name> contextconfiglocation </paramue> spring-value> </spring-value> </init-param> <load-on-startup> 1 </load-on-startup> </servlet> <servlet-mapping> <servlet-name> springmvc </servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> <welcome-file> ichtml </welcome-file> </welcome-file-list> </web-app>
以下のコードを書き始めましょう。注釈を書くのを忘れないように注意しましょう。このセクションの冒頭でパッケージ階層が与えられています。
エンティティユーザー:
パッケージcom.anxpp.demo.core.entity; public class user {private integer id;プライベート文字列名; public user(integer id、string name){this.id = id; this.name = name; } public Integer getId(){return id; } public void setid(integer id){this.id = id; } public string getname(){return name; } public void setName(string name){this.name = name; } @Override public String toString(){return "id:"+id+"、name:"+name; }}userdaoレイヤーインターフェイス:
パッケージcom.anxpp.demo.core.dao;インポートcom.anxpp.demo.core.entity.user; public interface userdao {user getUser(integer id、string name);}DAOレイヤーはuserdaoimplを実装しています:
パッケージcom.anxpp.demo.core.dao.impl; import org.springframework.stereotype.repository; Import com.anxpp.demo.core.dao.userdao; Import com.anxpp.demo.core.entity.user; getuser(integer id、string name){return new user(id、name); }}サービスレイヤーインターフェイスユーザーサービス:
パッケージcom.anxpp.demo.core.service;インポートcom.anxpp.demo.core.entity.user; public interface userservice {user getUser(integer id、string name);}サービスレイヤーの実装:
パッケージcom.anxpp.demo.core.service.impl; import org.springframework.beans.factory.annotation.autowired; Import org.springframework.stereotype.service; Import com.anxpp.demo.core.core.dao.userdao; Import com.anxpp.demo.core.sy.cor.core.core. com.anxpp.demo.core.service.userservice; @servicepublic class userserviceimpl emprence userservice {@autowired userdao userdao; @OverrideパブリックユーザーgetUser(integer id、string name){return userdao.getuser(id、name); }}コントローラーレイヤーデモコントローラー:
パッケージcom.anxpp.demo.controller; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stereotywork.tringframework com.ancpp.demo.core.service.userservice;@controller@requestmapping( "/")public class democontroller {@autowired userservice userservice; @RequestMapping( "/")@responsebody public string index(){return "index"; } @RequestMapping( "/getUser")@responsebody public string getuser(integer id、string name){return userservice.getuser(id、name).toString(); }}これは、JARパッケージが一緒にリリースされないため、サーバーで直接実行することはできません。以下を構成する必要があります。
プロジェクトを右クリックしてプロパティを選択し、以下の図に従って構成します。
この時点で、テストを実行できます。効果は次のとおりです。
この時点で、データベースをまだ操作していません。
4. JSON形式のデータサポートを追加および返します
現在、JSONをデータ送信形式として使用することがよくあります。 SpringMVCのJSONを返すためのサポートを追加しましょう。
最初にJARパッケージを追加します:
<Dependency> GroupId> com.fasterxml.jackson.core </groupid> <artifactid> jackson-databind </artifactid> <バージョン> 2.5.0 </version> </dependency> <seplency> <sheplency> eprofency> </Dependency> <Dependency> <groupId> com.fasterxml.jackson.core </groupid> <artifactid> jackson-annotations </artifactid> <バージョン> 2.5.0 </version> </dependency>
次に、次のようにgetuser()メソッドを書き換えます。
@RequestMapping( "/getUser")@responsebody public map <string、object> getuser(integer id、string name){map <string、object> map = new hashmap <string、object>(); map.put( "state"、 "success"); map.put( "data"、userservice.getuser(id、name));マップを返します。 }再実行後、アクセス効果は次のとおりです。
この時点で、JSONデータを返すことができます。
5.静的リソースアクセスを構成します
一般的に言えば、Web-INFディレクトリ内のリソースに直接アクセスすることはできません。当社のWebサイトがHTML+AJAXで構成されている場合、Web-INF以外で新しいHTMLディレクトリを作成し、web.xmlのデフォルトフィルターを構成できます。ただし、SpringMVCフィルターの前に入れるように注意してください。
<サーブレットマッピング> <Servlet-Name>デフォルト</servlet-name> <url-pattern>*。html</url-pattern> </servlet-mapping>
Springの公式ドキュメントをチェックすることで、Web-INFディレクトリにリソースにアクセスする必要がある場合、2つの方法があることがわかります
1。手書きのリソースマッパー:
@configuration @enablewebmvcpublic class webconfig extends webmvcconfigureradapter {@override public void addResourcehandlers(resource handlerregistry registry){registry.addresourcehandler( "/resources/**").addresourcelocations( "/public-Resources/") .setCacheControl(cachecontrol.maxage(1、timeunit.hours).cachepublic()); }}ご覧のとおり、キャッシュ時間を設定することもできます。より簡単な方法は、XMLを構成することです。
<MVC:Resources Mapping = "/resources/**" location = "/public-resources/"> <mvc:cache-control max-age = "3600" cache-public = "true"/>> </mvc:resources>
以下を追加することもできます。
<! - 静的リソースファイルへのアクセスは、コントローラーにマッピングできないパスにアクセスすることにより、処理のためにデフォルトのサーブレットハンドラーに引き渡されます - > <MVC:デフォルトセルバーハンドラー />
6.ガベージコードソリューション
通常、AJAXを使用してリクエストを送信しますが、アドレスバーを使用して直接テストします。リクエスト提出物を取得して投稿します。
投稿を使用してリクエストを送信すると、一般的に中国語の文字化けコードはありませんが、Carled Codeが表示されている場合は、Encoding FilterをWeb.xmlに追加することで問題を解決できます。
<filter> <filter-name> CharatleEncoding </filter-name> <filter-class> org.springframework.web.filter.characterencodingfilter </filter-class> <init-param> <param-name>エンコード</param-name> <-value> utf-8 </param-init-param> <init-param> <init-param> <param-name> forceConding </param-name> <param-value> true </param-value> </init-param> </filter> <filter-mapping> <filter-name> charatereCoding </filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
上記は、中国の文字化けされた投稿のコードのみを解決できます。 get(ブラウザアドレスバーの直接送信方法を含む)の場合、Tomcat構成を変更し、server.xmlでconfディレクトリのxmlで見つけて、次のように変更する必要があります。
<connector connectiontimeout = "20000" port = "8080" protocol = "http/1.1" redirectport = "8443" uriencoding = "utf-8"/>
テストしているだけで、プロジェクトが展開されていない場合、Eclipseのサーバーの下でServer.xmlを直接見つけることができ、上記と同じ変更を加えることができます。
7。SpringDatajpa+Hibernateを統合します
JPAについて学ぶことができます:JPA仕様と例の紹介(Javaデータの永続性ソリューション)
Springdatajpaはこのような軽量ソリューションでもあり、好ましい冬眠はJPAを実装しています。
まず、JARパッケージであるSpringdatajpa Jarパッケージが、Springを統合するときに一緒に追加されました。以下は、Hibernate(およびMySQLドライバー)のJARパッケージです。
<! - hibernate-> <dependency> groupid> org.hibernate </groupid> <artifactid> hibernate-core </artifactid> <version> $ {hibernate.version} </version> </dependency> <依存関係> <依存症> <グループ<バージョン> $ {hibernate.version} </version> </dependency> <dependency> <expendency> <groupid> org.hibernate </groupid> <artifactid> hibernate-entitymanager </artifactid> <バージョン> $ {hibernate.version} </version> </dependency> <deprogency> <groupid> <groupid> <Artifactid> hibernate-C3p0 </artifactid> <bersion> $ {hibernate.version} </version> </dependency> <dependency> <groupid> mysql </groupid> <artifactid> mysql-connector-java </artifactid> <バージョン> 5.1.9 </バージョン>統一された管理バージョンは次のとおりです。
<! - Hibernateバージョン番号 - > <hibernate.version> 5.1.0.final </hibernate.version>
JPAの構成ファイルPersistence.xmlをMeta-INFディレクトリに追加します。データベースは、この記事を紹介するときにMySQLを使用します。次のコンテンツを追加します。
<?xml version = "1.0" encoding = "utf-8"?> <persistenceバージョン= "1.0" xmlns = "http://java.sun.com/xml/ns/persistence" xmlns:xsi = "http://www.w3.org/2001/xmlschema-instcance" XSI:Schemalocation = "http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence_1_0.xsd" Provider> org.eclipse.persistence.jpa.persistenceprovider </provider-> <provider> org.hibernate.ejb.hibernatePersistence </provider> <class> com.ninelephas.meerkat.pojo.user </class> <! name = "hibernate.connection.driver_class" value = "com.mysql.jdbc.driver"/> <property name = "hibernate.connection.url" value = "jdbc:mysql://127.0.0.1:3306/demo?createdatabasexist = true"/< name = "hibernate.connection.username" value = "root" /> <プロパティ名= "hibernate.connection.password" value = "root" /> <プロパティ名= "hibernate.dialect" value = "org.hibernate.dialect.mysqldialect" />
JPAサポートをSpring構成ファイルApplicationContext.xmlに追加した後の完全なコンテンツ:
<?xml version = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns:context = "http://www.springframework.org/schema/context" xmlns:aop = "http://www.springframework.org/schema/aop" xmlns:p = " xmlns:tx = "http://www.springframework.org/schema/tx" xmlns:mvc = "http://www.springframework.org/schema/mvc" " xmlns:jpa = "http://www.springframework.org/schema/data/jpa" xsi:schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context-4.pring-context-4 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd http://www.springframework.org/schema/ap http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/mvc/mvc/mvc/mvc/mvc/mvc/mvc/mvc/ http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd "> <! - eoc Annotation scan-> <comcentcan scan- /> <bean id = "entitymanagerfactory"> <プロパティname = "jpavendoradapter"> <bean> <プロパティname = "generateddl" value = " /> <プロパティ名="データベース "値" mysql " /> < /bean> < /property> <propertial name =" demo on " /< /beanスキャン - > <MVC:annotation-driven/> <bean> <プロパティ名= "ViewResolvers"> <list> <bean> <bean name = "preperix" value = "/web-inf/view/> <プロパティ名=" value = "。html"/> </bean> </list> < <bean /> < /list> < /property> < /bean> <! - 静的リソースファイルへのアクセスは、コントローラーにマッピングできないパスを、処理用のデフォルトサーブレットハンドラーにマッピングできないパスを残します。 < /bean> <! - enable annotation Transaction-> <tx:annotation-driven transaction-manager = "TransactionManager" /> <! - Spring Data JPa Scanning Directory-> <JPa:jpa:repositories base-package = "com.anxpp.demo" /> < /beans> <
エンティティを変更します。
パッケージcom.anxpp.demo.core.entity; Import javax.persistence.entity; Import javax.persistence.generatedValue; Import javax.persistence.generationType; Import javax.persistence.id; Import javax.persistence.table; GenerationType.auto)private Integer ID;プライベート文字列名; public user(){} public user(string name){this.name = name; } public Integer getId(){return id; } public void setid(integer id){this.id = id; } public string getname(){return name; } public void setName(string name){this.name = name; } @Override public String toString(){return "id:"+id+"、name:"+name; }}DAOレイヤーの実装を削除できます。強力なJParePositoryからDAOレイヤーインターフェイスを継承することを忘れないでください。
public interface userdaoはjparepository <user、serializable> {user findbyid(integer id);}を拡張します特に簡潔に見え、実装を書く必要はありませんか? Springdatajpaは、自動的に完了するのに役立ちます。
サービスレイヤーインターフェイスを変更します。
パッケージcom.anxpp.demo.core.service; import java.util.list; import com.anxpp.demo.demo.core.entity.user; public interface userservice {user findbyid(integer id); user save(string name);リスト<ユーザー> findall();}サービスレイヤーの実装を変更します。
パッケージcom.anxpp.demo.core.service.impl; import java.util.list; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.service; import com.anxpp.demo.core.dao.dao.userdao; com.anxpp.demo.core.entity.user; Import com.anxpp.demo.core.service.userservice; @servicepublic class userserviceimpl emprences userservice {@autowired userdao userdao; @OverrideパブリックユーザーFindByID(integer id){return userdao.findbyid(id); } @Override public user save(string name){return userdao.save(new user(name)); } @Override public List <user> findall(){return userdao.findall(); }}コントローラーを変更して、複数のテストインターフェイスを提供します。
パッケージcom.anxpp.demo.controller; Import java.util.hashmap; Import java.util.map; Import org.springframework.beans.factory.annotation.autowired; Import org.springframework.stereotype.controller; Import org.springframework.springframework.springframework.springframework.springframework.springframework.springframework.springframework.springframework.springFramework. org.springframework.web.bind.annotation.responsebody;インポートcom.anxpp.demo.core.service.userservice;@controller@requestmapping( "/")public class democontroller {@autowired userservice userservice; @RequestMapping( "/")@responsebody public string index(){return "index"; } @RequestMapping( "/info")public string info(){return "info"; } @RequestMapping( "/findall")@responsebody public map <string、object> getuser(){map <string、object> map = new hashmap <string、object>(); map.put( "state"、 "success"); map.put( "data"、userservice.findall());マップを返します。 } @requestMapping( "/findByid")@responsebody public map <string、object> findbyid(integer id){map <string、object> map = new hashmap <string、object>(); map.put( "state"、 "success"); map.put( "data"、userservice.findbyid(id));マップを返します。 } @RequestMapping( "/add")@responsebody public map <string、object> save(string name){map <string、object> map = new hashmap <string、object>(); map.put( "state"、 "success"); map.put( "data"、userservice.save(name));マップを返します。 }}ランニング効果:
では、指定された値よりも大きいIDを持つ指定された姓を探すデータを追加する必要がある場合はどうなりますか?
SQLの場合、このように書きます(?パラメーターを表します):
[ユーザーからid>]を選択します>? 「?%」のような名前。
しかし、ここでは、SQL(またはHQL)を記述したり、DAOレイヤーインターフェイスにメソッドを追加する必要さえありません。
リスト<ユーザー> findbyidgreaterthanandnamelike(integer id、string name);
上記の方法が実行された場合、上記の方法が成功することを疑う必要はありません(注:サービスの実装を使用し、このメソッドを呼び出すときにname+"%"を覚えておいてください)!
上記は、最も基本的なJavaプロジェクトからSpringMVC+SpringDatajpa+Hibernateの構築について紹介された関連する知識です。私はそれが誰にでも役立つことを願っています。詳細情報を知りたい場合は、wulin.comのWebサイトに注意してください!