SSM(Spring+SpringMVC+MyBatis)、現在は比較的主流のエンタープライズレベルのアーキテクチャソリューションです。標準のMVC設計モデルは、システム全体を4つのレイヤー、ディスプレイレイヤー、コントローラーレイヤー、サービスレイヤー、DAOレイヤーに分割します。 SpringMVCは、リクエストの転送とビュー管理を担当するために使用され、Springはビジネスオブジェクト管理を実装し、MyBatisはデータオブジェクトの永続性エンジンとして使用されます。
1。フレームの詳細
Springは、エンタープライズアプリケーション開発の複雑さを解決するために作成された軽量のJava開発フレームワークです。 Springの目的は、サーバー側の開発に限定されません。シンプルさ、テスト可能性、ゆるい結合の観点から、Javaアプリケーションは春の恩恵を受けることができます。簡単に言えば、Springは軽量の反転制御(IOC)と接線指向(AOP)コンテナフレームワークです
SpringMVCは、コントローラー、モデルオブジェクト、ディスパッチャー、ハンドラーオブジェクトの役割を分離するSpringフレームワークのその後の製品です。この分離により、カスタマイズが簡単になります。
MyBatisは、Javaベースの永続性レイヤーフレームワークです。 MyBatisは、ほぼすべてのJDBCコードとパラメーターの手動設定と結果セットの取得を排除するSQLマップとデータアクセスオブジェクト(DAO)を含む永続性レイヤーフレームワークを提供します。 MyBatisマップインターフェイスとJavaは、構成と生のマッピングのための単純なXMLまたは注釈を使用してデータベースのレコードに記録します
2。Mavenプロジェクトを作成します
1. EclipseでMavenを使用してプロジェクトを作成します
2。次にデフォルトを押します
3. Maven-Archetype-Webappを見つけたら、[次へ]をクリックします
4。対応する情報を入力します。 GroupIDは、プロジェクト組織のユニークな識別子であり、実際にはJavaパッケージ構造に対応しています。 Artifactidは、プロジェクトのユニークな識別子です。実際の対応するプロジェクトの名前は、プロジェクトルートディレクトリの名前です。パッケージに記入した後、デフォルトでパッケージを作成できます。書かないでください。
5.新しく構築されたディレクトリは次のとおりです
6. Mavenは、次のソースフォルダーを追加する必要があることを規定しています。
SRC/メイン/リソース
SRC/MAIN/JAVA
SRC/テスト/リソース
SRC/test/java
このステップの前に、プロジェクトを右クリックしてプロパティを選択し、[Java Build Path]をクリックしてライブラリの下の[JRE System Library]を編集し、WorkspaceのデフォルトJREを選択します。
7.出力パスを個別に変更すると、対応する関係は次のとおりです。
8。プロジェクトをDynamic Webプロジェクトに変換し、プロジェクトのプロパティを右クリックし、左側のプロジェクトファセットを選択します。
9.展開中にファイル公開パスを設定し、テストに使用され、展開を必要としないため、2つのテストの項目を削除します。
設定MavenのJarパッケージをLibに公開します。追加 - > javaビルドパスエントリ - > maven依存関係 - >仕上げ
3. Mavenは、必要なJARパッケージを導入します
<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/maven-v4_0_0.xsd "> <modelversion> 4.0.0 </modelversion> <groupid> com.ynyjun.test </groupid> <artifactid> cordingState </artifactid> <パッケージ> < <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <maven.build.timestamp.format> yyyymmddhhmmss </maven.build.timestamp.form.> <spring.version> <mybatis.version> 3.1.1 </mybatis.version> <mybatisspring.version> 1.1.1 </mybatisspring.version> </properties> <dependencies> <依存関係> <groupid> org.springframework </groupid> <artifactid> spring </dependency> <dependency> groupid> org.springframework </groupid> <artifactid> spring-webmvc </artifactid> <version> $ {spring.version} </version> </dependency> <dependency> <groupid> org.spramework </groupid> <artifactid> spring <バージョン> $ {spring.version} </version> </dependency> <dependency> <groupid> org.mybatis </groupid> <artifactid> mybatis </artifactid> <bersion> $ {mybatis.version} </version> </dependency> <seplency> <グループ</groupid> <Artifactid> mybatis-spring </artifactid> <version> $ {mybatisspring.version} </version> </dependency> <dependency> mysql </groupid> <artifactid> mysql-connector-java </artifactid> <バージョン<GroupId> junit </groupId> <artifactid> junit </artifactid> <version> 4.11 </version> <scope> test </scope> </dependency> <依存関係> <groupid> c3p0 </groupid> <artifactid> c3p0 </artifactid> <バージョン<GroupId> org.aspectj </groupid> <artifactid> astifactid> astifactid> astifactid> <version> 1.8.1 </version> </dependency> <dependency> <groupid> javax.servlet> <artifactid> jstl </artifactid> <バージョン> <GroupId> javax.servlet </groupid> <artifactid> servet-api </artifactid> <version> 3.0 </version> <scope> </dependency> <dependency> groupid> commons-fileupload </groupid> <artifactid> commons-fileupload </artifactid> <バージョン<groupId> commons-codec </groupid> <artifactid> compons-codec </artifactid> <version> 1.9 </version> </dependency> <dependency> org.apache.httpcomponents </groupId> <artifactid> httpclient </artifactid> 4.5 </バージョン> < <GroupId> org.slf4j </groupId> <artifactid> slf4j-api </artifactid> <bersion> 1.7.10 </version> </dependency> <dependency> groupid> org.slf4j </groupId> <artifactid> slf4j-log4j12 </artifactId> <groupId> log4j </groupId> <artifactid> log4j </artifactid> <version> 1.2.17 </version> </dependency> <dependency> <groupid> com.alibaba </groupid> <artifactid> fastjson </artifactid> <バージョン> 1.1.41 < <groupid> org.codehaus.jackson </groupid> <artifactid> jackson-mapper-asl </artifactid> <bersion> 1.9.13 </version> </dependency> </dependencies> <bultins> <artifactid> maven-compiler-plugin </artifactid> </>> 2.3.2 <>> 2.2.2.2.2 </>> 1.2 </> 1.2 </> 1.2 </> 2.2.2.2バージョン> <ターゲット> 1.7 </ターゲット> </configuration> </plugin> <plugin> <artifactid> maven-war-plugin </artifactid> <バージョン> 2.2 </version> <configuration> <bersion> 3.0 </version> <failonmissingwebxml> <FinalName> $ {project.artifactid} _ $ {project.version} _ $ {maven.build.timestamp} </finalName> </build> </project>4。関連する構成ファイルとSSMフレームワークの統合
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/j2ee xmlns:web = "http://xmlns.jcp.org/xml/ns/javaee" xsi:schemalocation = "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/ns/j2eeb_4.xdddddddddddddddddddd. version = "2.4"> <! - spring-> <context-param> <param-name> contextconfiglocation </param-name> <param-value> classpath:spring.xml </param-value> </context-param> <リスナー> <リスナークラス> org.springframework.web.context.contextlodextext.contextlodextext.contextlodexedexスプリングメモリオーバーフローリスナー - > <リスナー> <リスナークラス> org.springframework.web.util.introspectorcleanuplistener </sireder-class> </ristener> <! - スプリングメモリオーバーフローリスナー - > <リスナー> <リスナークラス> org.springframework.web.util.util.till. </リスナー> <! - springmvc - > <servlet> <servlet-name> springmvc </servlet-name> <servlet-class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <init-param> <init-param> <init-param> <param-name> <param-value> classpath:spring-mvc.xml </param-value> </init-param> <load-on-startup> 1 </load-on-startup> </servlet> <servlet-name> springmvc </servet-name> <url-pattern>/</url-pertern> </vervlet-mapting> < <filter-name> encodingfilter </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> <param-name> forceConding </param-name> <param-value> true </param-value> </init-param> </filter> <filter-mapping> <filter-name> encodingfilter </filter-name> <url-pattern/*</url-pattern> </filter-mapping> </web-app>
spring.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:MVC = "http://www.springframework.org/schema/mvc" xmlns:context = "http://www.springframework.org/schema/aop" xmlns:tx = " xsi:schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www. http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context-context-dpring-context/dpring http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd "> <! - スキャンサービス、dao components-> jdbc.properites-> <context:Property-placeholder location = "classpath:jdbc.properties" /> <! - data source c3p0-> <bean id = "datasource"> <プロパティ名= "driverclass" value = "$ {jdbc.driverclassname}" value = "$ {jdbc.url}" /> <property name = "user" value = "$ {jdbc.username}" /> <プロパティ名= "password" $ {jdbc.password} " /> <プロパティ名=" maxpoolsize "value =" $ {c3p0.pool.sizemax.max.maxize " value = "$ {c3p0.pool.size.min}" /> <プロパティ名= "initialpoolsize" value = "$ {c3p0.size.ini}" /> <プロパティname = "ackireincrement" value = "$ {c3p0.pool.size.increment} <bean id = "sqlsessionfactory"> <プロパティ名= "dataSource" ref = "dataSource"/> <プロパティ名= "configlocation" value = "classpath:spring-mybatis.xml"/> <プロパティname = "mapperlocations" value = "classpath*:com/yingjun/test/test/mapping/</bean> name = "basepackage" value = "com、yingjun.test.dao" /> <Property name = "sqlsessionfactorybeanname" value = "sqlsessionfactory" /> < /bean> <bean id = "transactionmanager"> <プロパティ名= "DateAsource" Ref = "DataSource" Transaction-Manager = "TransactionManager"> <tx:attributes> <tx:method name = "add*" propagation = "required" /> <tx:method name = "append*" propagation = "required" /> <tx: "cropagation =" "reby" /> <tx: "save =" methogation = "methogation =" methogation* propagation = "必須" /> <tx:method name = "modify*" propagation = "experagation" /> <tx:method name = "edit*" propagation = "" /> <tx:method name = "delete*" propagation = " /> <tx:method name =" remove*"propagation =" name = "delandrepair" propagation = "必須" /> <tx:method name = "get*" supports " /> <tx:method name =" find*"supports" /> <tx:method name = "load*" propagation = "supports" /> <tx:method*"load =" " /<tx:" /<tx: " /<tx:<tx:" searts " /<tx:" supports " /<tx: propagation = "supports" /> <tx:method name = "datagrid*" propagation = "supports" /> <tx:method name = "*" propagation = "" supports " /> < /tx:astributes> < /tx:advice> <aop:config> <aop:pointcut id =" transactionpointcut "expression ="実行(*** com.yingjun.test.service ..*empl。*(..)) " /> <aop:advisor pointcut-ref =" transactionPointCut "Advice-ref =" transactionAdvice " /> < /aop:config> < /beans>SQLSessionDaoSupportまたはSQLSessionTemplateを使用して、データアクセスオブジェクト(DAO)の書き込みコードを置き換えるために、MyBatis-Springは動的プロキシ実装を提供します:MapperFactoryBean。このクラスを使用すると、データマッパーインターフェイスをサービスレイヤービーンに直接注入できます。マッパーを使用する場合、MyBatis-Springがプロキシを作成するため、DAOで行うように呼び出しますが、DAO実装コードを作成する必要はありません。
spring-mybatis.xml
<?xml version = "1.0" encoding = "utf-8"?> <!doctype構成public " - // mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"
spring-mvc.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:p = "http://www.springframework.org/schema/p" xmlns:context = "http://www.springframework.org/schema/context" xmlns:mvc = " xsi:schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www. http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvmv.dpring.dpring <! - デフォルトのアノテーションマッピングサポート - > <MVC:Annotation-driven /> <! - パッケージを自動的にスキャンして、パッケージの下で@Controllerによって注釈が付けられたクラスはコントローラーであると考えています - > <コンテキスト:Component-ScanSyjun.test.controller " id = "mappingjacksonhttpmessageconverter"> <Property name = "supportedmediatypes"> <value> text> text> text/html; charset = utf-8 </value> </list> </bean> <! - ジャンプファイルのプリサフィックスを定義します。後続のアクションのメソッドの文字列を返して、利用可能なURLアドレスになります - > <プロパティ名= "preperix" value = "/web-inf/jsp/"/> <プロパティname = "suffix" value = "。jsp"/> </bean> <! - ファイルアップロードを使用しない場合は、構成する必要はありません。もちろん、一致しない場合は、構成ファイルにアップロードコンポーネントパッケージを導入する必要はありません - > <bean id = "multipartresolver"> <! - デフォルトエンコード - > <プロパティ名= "デフォルトエンコード"値= "UTF-8" /> <! - 最大ファイルサイズ値 - > <プロパティ= - > <プロパティname = "maxinmemorysize" value = "40960"/> </bean> </beans>
log4j.properties
jdbc.driverclassname = com.mysql.jdbc.driver jdbc.url = jdbc:mysql://192.168.1.194:3306/test?useunicode = true&charaterencoding = utf-8 jdbc.username = root jdbc.pow.pool.pot.pot.pot.pot.pot.pot.poow. c3p0.pool.size.min = 5 c3p0.pool.size.ini = 3 c3p0.pool.size.increment = 2
JDBC.Properties
log4j.rootlogger = info、console、debug、app、error ### console ### log4j.appender.console = org.apache.log4j.consoleAppender log4j.appender.console.target = system.out log4j.appender.console.layout = org.apach.pache.pach.patternlayout = log4j.appender.console.layout.conversionpattern =%d%p [%c:%l] - %m%n ### debug ### log4j.appender.debug = org.apache.log4j.dailyrollingfileeappender log4j.appender.debug.file = log.log/debug.log.log log4j.appender.debug.threshold = debug log4j.appender.debug.datePattern = ' %m%n ### app ### log4j.appender.app = org.apache.log4j.dailyrollingfileappender log4j.appender.app.file = log/app.log log4j.appender.append = true log4j.appender.app.threshold = info log4j.Appender.apperthepterpittern.apperthepterpittern.apperter log4j.appender.app.layout = org.apache.log4j.patternlayout log4j.appender.app.layout.conversionpattern =%d%p [%c:%l] - %m%n ###エラー#########グラジェlog/error.log log4j.Appender.Error.Append = true log4j.appender.error.threshold = error log4j.appender.error.datepattern = '。' yyyy-mm-dd log4j.appender.error.layout = org.apache.log4j.perternlayout log4j.app4j.app4j.app4j.App4J.App4J.App4J.App4J.App4J.App4J.App4J.App4J.App4J.App4J.Err. %P [%C:%L] - %m%n
5. MyBatisジェネレーターを使用して、エンティティクラス、ファイルのマッピング、DAOインターフェイスを自動的に作成します
MyBatisは半自動ORMフレームワークに属しているため、その主な仕事はマッピングマッピングファイルを構成することです。ただし、手書きのマッピングファイルはエラーが発生しやすいため、MyBatisジェネレーターを使用して、エンティティクラス、DAOインターフェイス、マッピングマッピングファイルを自動的に生成できます。これにより、多くの労力を節約し、生成されたコードをプロジェクトにコピーします。
コードに必要なファイルとジャーを生成し、次のディレクトリ構造を作成します。
generatorl.xmlで関連するデータベース接続を構成すると、データベーステーブルは既に利用可能です。
<?xml version = "1.0" encoding = "utf-8"?> <!doctype generatorconfiguration public " - // mybatis.org//dtd mybatisジェネレーター構成1.0 // en" "http://mybatis.org/dtd/mybatis-generator-generator-config_1_0データベースドライバー - > <classpathentry location = "mysql-connector-java-5.1.34.jar" /> <コンテキストid = "db2tables" db2tables "targeRuntime =" mybatis3 "> <commentgenerator> <プロパティ名=" suptressdate "value =" true " /> <! value = "true"/> </commentGenerator> <! - データベースリンクURL、ユーザー名、パスワード - > <jdbcconnection driverclass = "com.mysql.jdbc.driver" connectionurl = "jdbc:mysql://192.168.1.194:3306/noc" low "pisson <javatyperesolver> <プロパティ名= "forcebigdecimals" value = "false" /> < /javatypereSolver> <! - モデルのパッケージ名と場所を生成 - > <javamodelgenerator targetpackage = "com.yingjun.test.model" regationabages = "sr < name = "trimstrings" value = "true" /> < /javamodelgenerator> <! - マッピングファイルのパッケージ名と場所を生成 - > <sqlmapgenerator targetpackage = "com.yjun.test。 daoのパッケージ名と場所を生成 - > <javaclientgenerator type = "xmlmapper" targetpackage = "com.yjun.test.dao" stargeproject = "src"> <プロパティ名= "enablesubpackages" value = "true" /> < /javaclientator> < /javaclientator> < /javaclientator> < domainobjectNameはエンティティクラス名 - > <table tablename = "other_list" domainobjectname = "otherlist" enablecountbyexample = "fasle" enabableupdatebyexample = "false" enableeletebyexample = "fals" enableselectbyexample = "false" fals "fals" fals "> x"> gent "fals" fals "fals" fals "fals" fals "fals" fials
CMDウィンドウを開き、ディレクトリ構造を入力し、コマンドラインを入力します。
java -jar mybatis-generator-core-1.3.2.jar -configfile generator.xml -overwrite
実行が完了すると、対応するDAOマッパーとモデルが生成されます。とてもいいですか?
6.サービスレイヤーとコントローラーレイヤーを確立します
パッケージcom.inyjun.test.service; public interface otherservicei {public string getoterList(); }パッケージcom.inyjun.test.service; java.util.arraylistをインポートします。 java.util.arraysをインポートします。 java.util.hashsetをインポートします。 java.util.listをインポートします。 java.util.mapをインポートします。 java.util.setをインポートします。 java.util.setをインポートします。 Import org.springframework.beans.factory.annotation.autowired; org.springframework.stereotype.serviceをインポートします。 com.alibaba.fastjson.jsonをインポートします。 com.alibaba.fastjson.serializer.serializerfeatureをインポートします。 com.ynyjun.test.dao.oterlistmapperをインポートします。 com.ynyjun.test.model.oterlistをインポートします。 com.ynyjun.test.model.otherlistdomainをインポートします。 @service public class otherserviceimplを実装します@Override public String getoterList(){set <string> set = new Hashset <String>();リスト<AltherList> list = otherlistmapper.selectall(); List <AltherListDomain> jsonList = new ArrayList <otherlistdomain>(); for(otherlist other:list){string title = other.getTitle(); if(set.contains(title)){継続; } else {list <otherlist> t_list = new arrayList <otherlist>(); for(otherlist data:list){if(title.equals(data.getTitle())){t_list.add(data); }} otherlistdomain domain = new otherlistdomain(); domain.settitle(title); domain.setItems(t_list); jsonlist.add(domain); set.add(other.getTitle()); }} return json.tojsonstring(jsonlist、serializerfeature.writemapnullvalue); }}パッケージcom.ynyjun.test.controller; Import org.springframework.beans.factory.annotation.autowired; org.springframework.stereotype.controllerをインポートします。 org.springframework.web.bind.annotation.requestmappingをインポートします。 Import org.springframework.web.bind.annotation.responsebody; com.alibaba.fastjson.jsonをインポートします。 com.ynyjun.test.service.otherserviceiをインポートします。 com.ynyjun.test.service.stockstatusserviceiをインポートします。 @controller @RequestMapping(value = "/")public class tsscontroller {@autowired private otsenservicei otherservice; @RequestMapping(value = "/getotherlist"、droces = "text/html; charset = utf-8")@responsebody private string getotherlist(){string json = otherservice.geterlist(); jsonを返します。 }} 7.テストクラスを作成します
java.util.listをインポートします。 Import org.apache.log4j.logmanager; org.apache.log4j.loggerをインポートします。 Import org.junit.test; Import org.junit.runner.runwith; Import org.springframework.beans.factory.annotation.autowired; org.springframework.test.context.contextconfigurationをインポートします。 Import org.springframework.test.context.junit4.springjunit4classrunner; @runwith(springjunit4classrunner.class)@contextconfiguration(locations = {"classpath:spring.xml"})public class testmybatis {@autowired private otsoneserviceiサービス; @test public void test(){string list = service.getoterList(); logger.info(list); }}8.ブラウザを確認します
http:// localhost:8080/tzyjstateservice/getotherlist
この時点で、テストが成功し、3つの主要なSSMフレームワークの統合が完了しました。他のニーズがある場合は、これに基づいて追加し続けることができます。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。