私は以前に.NET関連のWeb開発と連絡を取りましたが、今ではJavawebを使用して非常に不快です。
1.プロジェクトアーキテクチャについて話す<BR />私は最初に.NET関連の開発と接触したので、.NET関連の開発に非常に精通していますが、学校でJavaを学び、これら2つのプラットフォームを組み合わせる予定です。起きて、Javaをバックエンド、つまりサービスプロバイダーとして使用して、Javaプラットフォームのすべてのビジネスロジックを完了し、Web開発に精通している.NETを使用します。このようにして、AndroidアプリとWebサイドがあります。クライアントは、分散フレームワークを通じてサービスを均一に呼び出します。長い間検索した後、私はついに、軽量で、横断的、クロスプラットフォーム、非侵襲的、高性能ダイナミックリモートオブジェクトを呼び出すエンジンライブラリであるHProseを選択しました。私がそれを選んだ理由は、学習コストが低いためであり、一方で、そのクロスプラットフォームの呼び出しは非常に簡単で効率的です。 HProseのドキュメントを大まかに見た後、内蔵のHProseservletリリースサービスを使用すると開発がより速く、より簡単であることがわかりました。この方法を使用してサービスを公開する予定です。しかし、問題は、従来のSSHアーキテクチャが少し重いと感じており、.NETを使用してWebサイドを開発することです。そのため、ストラットを統合する必要はないと感じているため、Hibernate+Spring+HProse Architectureです。 。
2。データベース設計
それは小さなオンライン書店であるため、デザインはまだ不足しており、主にJava開発を実践していることを主に実用的です。したがって、Navicatを使用して、デザインテーブルの相関関係はありませんでした。
実際、テーブルの相関関係を一目で見ることができます~~、次はいくつかのマッピングを冬眠し、プラグインを使用してモデルとマッピングファイルを生成します。
わずかな変更でこのようなものです -
3。spring3+hibernate4 <br />モデルとマッピングファイルは自動的に生成されるため、自動的に生成された設定がaに対応することに注意する必要があります複合モデル。たとえば、製品レビューテーブルの複合プライマリキータイプ:
パッケージcom.book.model; //生成2015-11-2 9:07:06 by hibernateツール4.0.0.finalimport java.util.date;/** * comementid by hbm2java */publi c class commentspkはjava io.serializable {private nate commentspk(){} commentspk {omentsdate) .commentsdate = commentsdate user){this.user = user; == return true castother.getbook())||(this.getbook()!= null && castother.getbook()! )== castother.getuser())||。 .getcom mentsdate()== castother.getCommentsDate())||。 ; public int hashcode(){int result = 37 * = null?this.getuser()。製品レビューテーブルモデル:
パッケージcom.book.model; //生成2015-10-30 14:56:21 by hibernateツール4.0.0.finalimport java.sql.date;/** *コメントhbm2java */public classコメントはJavaを実装します。 io.serializable {private integer commentspk id; } public string getpic(){return pic; ; public commentspk getid(){commentspk id){conturepk} public comments(string pic、commentspk id); content = this.pic; client;対応する冬眠マッピングファイル:
<?xml version = "1.0"?> <!doctype hibernate-mapping public " - // hibernate/hibernateマッピングDTD 3.0 // en" "http://www.hibernate.org/dtd/hibernate-mapp ing-3.0 。 「コメント」カタログ= "bookstore"> <composite-id name = "id"> <key-many-one name = "book"> <column name = "bookid" /> < /key-many-to-- One> <Key-Many-to-One name = "user"> <column name = "userid" /> < /key-many-to-one> <key-property name = "commentsdate" type = "Timestamp"> <列name = "commentsdate" length = "19"/> </key-property> </composite-id> <プロパティname = "content" type = "string"> <column name = "content" length = "65535 " /> < /property> <Property name =" pic "type =" string "> <column name =" pic "length =" 65535 " /> < /property name =" client "type =" java。 lan g .integer "> <column name =" client "/> </property> </class> </hibernate-mapping>
製品レビューテーブルには2つの外部キーがあるため、キーマニュ対ワンタグが使用されます。
spring3.2+hibernate4.1が使用されるため、SessionFactoryを取得する方法は、sessionfactory.getCurrentssession()に制限されています。
<bean id = "transactionManager"> <プロパティ名= "SessionFactory" Ref = "SessionFactory" /> < /bean> <! - トランザクション伝播特性 - > <tx:アドバイスid = "txadvice" transaction-manager = "TransactionManager"> <tx:attributes> <tx:method name = "add*" propagation = "required" /> <tx:method name = "delete*" propagation = "requent" /> <tx:method name = " MODIFY*"Propagation ="必須 " /> <! - hibernate4はトランザクションを有効にするように構成する必要があります。そうしないと、getCurrentsSession()を取得できません - > <tx:method name ="*"propagation =" read-on ly = "true"/>> </tx:属性> </tx:アドバイス>
上記は、構成したときに発生した問題です。これがスプリング構成ファイルです。
<?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:aop =" http://www.springframework.org/schema/aop "xmlns:context =" http://www.springframework.org/schema/ cuttunt " http://www.springframework.org/schema/tx "xsi:schemalocation =" http://www.springframework.org/schema/beans http://www.springframework.org 3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/コンテキストhttp://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework -TX-3.2.XSD "> <! - spring annotation support-> <context:annotation-config /> <bean id =" dataSource "Destroy-Method =" close "> <Property name =" driverclassnam e " value = "com.mysql.jdbc.driver"/> <property name = "url" value = "jdbc:mysql://127.0.0.1/bookstore?useunicode = true&charaterencoding = utf-8"/> <プロパティname = " username "value =" root " /> <プロパティ名="パスワード "value =" yangyang " /> < /bean> <! - セカンダリキャッシュの構成を追加できます - > <bean id =" sessionfactory " > <プロパティ名= "dataSource" ref = "dataSource"/> <プロパティ名= "mappingdirectorylocations"> <list> <value> classpath:config </value> </list> </property name = "hibernateproperties "> <props> <prop key =" hibernate.dialect "> org.hibernate.dialect.mysqldialect </prop> <prop key =" hibernate.show_sql "> true </prop> <prop key =" hibernate.show_sql " > true </prop> <prop key = "hibernat e.hbm2ddl.auto"> update </prop> <prop key = "hibernate.temp.use_jdbc_metadata_defaults"> false </prop> <prop key = "current_session_context_class">スレッド</prop> </props> </property> </bean> <! - 構成トランザクションマネージャー - > <bean id = "transactionmanager"> <プロパティ名= "sessionfactory" ref = "sessionfactory"/> </ Bean> <! - トランザクションの伝播特性 - > <TX:アドバイスID = "TXADVICE" Transaction-Manager = "TransactionManager"> <TX:属性> <TX:メソッド名= "add*" propagation = ""必須 "" " />> <tx:method name = "delet e*" propagation = "required" /> <tx:method name = "modify*" propagation = "requent" /> <! - hibernate4を構成する必要があります。 getCurrentssession()は取得できません - > <tx:method name = "*" propagation = "read" read-only = "true"/>> </tx:actributes> </tx:advies> <! - それらのクラスおよびメソッドはトランザクションを使用します - > <aop:config> <! - ビジネスロジックレイヤーに対してトランザクションのみが実装されます - > <aop:pointcut id = "allmanagermethod" expression = "execution(* com.book.test。* 。*(..)) " /> <aop:Advisor PointCut-Ref =" Allmanagermethod "adv ice-ref =" txadvice " /> < /aop:config> <bean name =" badeddao " /> <bean name = 「Orderdao」 /> < /beans>
すべての準備ができたら、サーブレットテストを使用します。
<Servlet> <Servlet-Name> Test </servlet-name> <servlet-class> com.book.test.test </servlet-class> </servlet> <servlet-mapping> <servlet-name> test </ Servlet-name> <url-pattern>/index </url-pattern> </servlet-mapping>
保護されたvoid doget(httpservletrequest request、httpservletresponse応答)Servletexception、ioexception {// todo auto-autotory factor = webapplicationcontextutils.getrequiredwebapplicationcontext(request.getsession()。 OrderDao。私たちは構造体を使用していないため、Dao Beanを取得するためにSpringのBeanFactoryを見つける必要があります。
実行結果:
正常にロードされた注文表注文1アイテム注文数量。
結局のところ、Javawebが構築したオンラインブックモールのフレームワークをゆっくりと学ぶことができるのは、Javaを使用したときです。