English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

mavenをベースにしたSSMフレームワークの統合のサンプルコード

基本概念

1.1、Spring

Springはオープンソースのフレームワークで、Springは2003 年が台頭した軽量なJava開発フレームワークで、Rod Johnsonがその著作Expert Oneで開発しました。-On-One J2EE Development and Designに記載されている部分の理念やプロトタイプが派生したものです。それは、企業アプリケーション開発の複雑さを解決するために作成されました。Springは基本的なJavaBeanを使用して、以前はEJBでしか行えなかったことを行うことができます。しかし、Springの用途はサーバーサイド開発に限りません。シンプルさ、テストのしやすさ、緩やかなバインドの観点から、どんなJavaアプリケーションもSpringから利益を得ることができます。簡単に言えば、Springは軽量の依存注入(IoC)と面向切面(AOP)のコンテナフレームワークです。

1.2、SpringMVC

Spring MVCはSpringFrameWorkの後継製品であり、Spring Web Flowに統合されています。Spring MVCはコントローラ、モデルオブジェクト、ディスパッチャ、およびハンドラオブジェクトの役割を分離し、これによりカスタマイズが容易になります。

1.3、MyBatis

MyBatisは本来、ApacheのオープンソースプロジェクトiBatisでした。 2010このプロジェクトはApache Software FoundationからGoogle Codeに移行され、MyBatisと改名されました。MyBatisはJavaベースの持久層フレームワークです。iBATISが提供する持久層フレームワークにはSQL MapsとData Access Objects(DAO)があります。MyBatisはほぼすべてのJDBCコードとパラメータの手動設定、および結果セットの検索を排除します。MyBatisはシンプルなXMLやアノテーションを使って設定と原始マッピングを行い、インターフェースとJavaのPOJOs(Plain Old Java Objects、普通のJavaオブジェクト)をデータベースのレコードにマッピングします。

第1ステップ:Mavenを使ってwebプロジェクトを作成します。

第2ステップ:pomファイルにjarパッケージをインポート

(1) pom.xml

私がpomファイル全体をコピーしてきましたが、初期設定で既に含まれているものは取り除いて、自分でpomが生成したものを残してください。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.test</groupId>
 <artifactId>ssm</artifactId>
 <packaging>war</packaging>
 <version>0.0.1-SNAPSHOT</version>
 <name>ssm Maven Webapp</name>
 <url>http://maven.apache.org</url>
 <properties> 
  <!-- springバージョン番号 --> 
  <spring.version>4.0.2.RELEASE</spring.version> 
  <!-- mybatisバージョン番号 --> 
  <mybatis.version>3.2.6</mybatis.version> 
  <!-- log4jログファイル管理パックバージョン --> 
  <slf4j.version>1.7.7</slf4j.version> 
  <log4j.version>1.2.17</log4j.version> 
 </properties> 
 <dependencies>
 <dependency>
  <groupId>junit/groupId>
  <artifactId>junit/artifactId>
  <version>3.8.1</version>
  <scope>test/scope>
 </dependency>
  <dependency> 
   <groupId>org.springframework/groupId> 
   <artifactId>spring-core/artifactId> 
   <version>${spring.version}/version> 
  </dependency> 
  <dependency> 
   <groupId>org.springframework/groupId> 
   <artifactId>spring-web/artifactId> 
   <version>${spring.version}/version> 
  </dependency> 
  <dependency> 
   <groupId>org.springframework/groupId> 
   <artifactId>spring-oxm/artifactId> 
   <version>${spring.version}/version> 
  </dependency> 
  <dependency> 
   <groupId>org.springframework/groupId> 
   <artifactId>spring-tx/artifactId> 
   <version>${spring.version}/version> 
  </dependency> 
  <dependency> 
   <groupId>org.springframework/groupId> 
   <artifactId>spring-jdbc/artifactId> 
   <version>${spring.version}/version> 
  </dependency> 
  <dependency> 
   <groupId>org.springframework/groupId> 
   <artifactId>spring-webmvc/artifactId> 
   <version>${spring.version}/version> 
  </dependency> 
  <dependency> 
   <groupId>org.springframework/groupId> 
   <artifactId>spring-aop/artifactId> 
   <version>${spring.version}/version> 
  </dependency> 
  <dependency> 
   <groupId>org.springframework/groupId> 
   <artifactId>spring-context-support/artifactId> 
   <version>${spring.version}/version> 
  </dependency> 
  <dependency> 
   <groupId>org.springframework/groupId> 
   <artifactId>spring-test/artifactId> 
   <version>${spring.version}/version> 
  </dependency> 
  <!-- mybatisコアパック --> 
  <dependency> 
   <groupId>org.mybatis/groupId> 
   <artifactId>mybatis/artifactId> 
   <version>${mybatis.version}/version> 
  </dependency> 
  <!-- mybatis/springパック --> 
  <dependency> 
   <groupId>org.mybatis/groupId> 
   <artifactId>mybatis-spring/artifactId> 
   <version>1.2.2</version> 
  </dependency> 
  <!-- java ee jarパックをインポートする --> 
  <dependency> 
   <groupId>javax/groupId> 
   <artifactId>javaee-api/artifactId> 
   <version>7.0</version> 
  </dependency> 
  <!-- Mysqlデータベースリンクjarパックをインポートする --> 
  <dependency> 
   <groupId>mysql/groupId> 
   <artifactId>mysql-connector-java/artifactId> 
   <version>5.1.30</version> 
  </dependency> 
  <!-- dbcpのjarパックをインポートし、applicationContext.xmlでデータベースを設定するために使用します --> 
  <dependency> 
   <groupId>commons-dbcp/groupId> 
   <artifactId>commons-dbcp/artifactId> 
   <version>1.2.2</version> 
  </dependency> 
  <!-- JSTLタグクラス --> 
  <dependency> 
   <groupId>jstl/groupId> 
   <artifactId>jstl/artifactId> 
   <version>1.2</version> 
  </dependency> 
  <!-- ログファイル管理パック --> 
  <!-- ログ開始 --> 
  <dependency> 
   <groupId>log4j</groupId> 
   <artifactId>log4j</artifactId> 
   <version>${log4j.version</version> 
  </dependency> 
  <!-- オブジェクトをフォーマットして、ログ出力を簡単にする --> 
  <dependency> 
   <groupId>com.alibaba/groupId> 
   <artifactId>fastjson/artifactId> 
   <version>1.1.41</version> 
  </dependency> 
  <dependency> 
   <groupId>org.slf4j</groupId> 
   <artifactId>slf4j-api/artifactId> 
   <version>${slf4j.version</version> 
  </dependency> 
  <dependency> 
   <groupId>org.slf4j</groupId> 
   <artifactId>slf4j-log4j12</artifactId> 
   <version>${slf4j.version</version> 
  </dependency> 
  <!-- ログ終了 --> 
  <!-- JSONに映し出す --> 
  <dependency> 
   <groupId>org.codehaus.jackson/groupId> 
   <artifactId>jackson-mapper-asl</artifactId> 
   <version>1.9.13</version> 
  </dependency> 
  <!-- アップロードコンポーネントパック --> 
  <dependency> 
   <groupId>commons-fileupload</groupId> 
   <artifactId>commons-fileupload</artifactId> 
   <version>1.3.1</version> 
  </dependency> 
  <dependency> 
   <groupId>commons-io</groupId> 
   <artifactId>commons-io</artifactId> 
   <version>2.4</version> 
  </dependency> 
  <dependency> 
   <groupId>commons-codec</groupId> 
   <artifactId>commons-codec</artifactId> 
   <version>1.9</version> 
  </dependency> 
 </dependencies>
 <build>
 <finalName>ssm</finalName>
 </build>
</project>

第三歩:プロジェクトの全体のアーキテクチャを見て、まずここにはspringMVCに関するものはまだないことを説明します。なぜなら、まずspringを統合するからです-mybatis、成功を確認するためのテストを行い、成功したらspringMVCに統合

第四歩:modelクラスを作成

public class User {
 private int id;
 private String name;
 private String password;
 private String password2; 
/*setterとgetterメソッド、toStringメソッドを提供*/
}

第五步:データベースを作成、UserDaoインターフェースとmapperマッピングファイル

(1)シンプルなテーブルを一つ作成

(2)UserDaoインターフェース

public interface UserDao {
  User findUserById(User user);
}

(3)UesrMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:名前空間、UserDaoの完全なパスを指す-->
<mapper namespace="com.ssm.dao.UserDao">
 <!-- idに基づいてユーザー情報を検索 -->
 <!-- 
  id:一意に識別するステートメント、UserDaoメソッド名と一致
  #{}:占位符を表す、#{}にシンプルなタイプのパラメータを入れる場合、#{}の名前は自由
  parameterType:入力パラメータのタイプ、UserDao()内のパラメータと一致
  resultType:出力結果のタイプ、UserDao()の返却タイプと一致
  -->
 <select id="findUserById" parameterType="com.ssm.model.User" resultType="com.ssm.model.User">
  SELECT * FROM USER 
  <where>
  <if test="name != null">
   AND Name= #{name}
  </if>
  <if test="password != null">
   AND password= #{password}
  </if>
  </where> 
 </select>
 </mapper>

第五步:创建UserService和UserServiceImpl

(1)UserService

public interface UserService {
  public User getUserById(User user); 
}

(2)UserServiceImpl

import org.springframework.stereotype.Service;
import com.ssm.dao.UserDao;
import com.ssm.model.User;
import com.ssm.service.UserService;
@Service("userService")
public class UserServerImpl implements UserService {
 @Resource
 private UserDao userDao;
 public User getUserById(User user) {
  return this.userDao.findUserById(user);
 }
}

第六步:创建jdbc文件和log日志文件

(1)jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://localhost\:3306/test?useUnicode=true&&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root

(2)log4j.properties

log4j.rootLogger=INFO,Console,File 
#定义日志输出目的地为控制台 
log4j.appender.Console=org.apache.log4j.ConsoleAppender 
log4j.appender.Console.Target=System.out 
#可以灵活地指定日志输出格式,下面一行是指定具体的格式 
log4j.appender.Console.layout = org.apache.log4j.PatternLayout 
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n 
# ファイルのサイズが指定されたサイズに達すると新しいファイルが生成されます 
log4j.appender.File = org.apache.log4j.RollingFileAppender 
# 出力先ディレクトリを指定 
log4j.appender.File.File = logs/ssm.log 
# ファイルの最大サイズを定義 
log4j.appender.File.MaxFileSize = 10MB 
# 全てのログを出力、DEBUGに変更するとDEBUG以上のレベルのログを出力 
log4j.appender.File.Threshold = ALL 
log4j.appender.File.layout = org.apache.log4j.PatternLayout 
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH:mm:ss}][%c]%m%n 

第7ステップ:Springとの統合-mybatis.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="http://www.springframework.org/schema/mvc" 
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-3.1.xsd 
      http://www.springframework.org/schema/mvc 
      http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> 
 <!-- 自動スキャン --> 
 <context:component-scan base-package="com.ssm" /> 
 <!-- jdbc設定ファイルの実装を導入 --> 
 <bean id="propertyConfigurer" 
  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
  <property name="location" value="classpath:jdbc.properties" /> 
 </bean> 
 <!-- 2.データベース接続プール -->
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
  destroy-method="close"> 
  <property name="driverClassName" value="${jdbc.driver}" /> 
  <property name="url" value="${jdbc.url}" /> 
  <property name="username" value="${jdbc.username}" /> 
  <property name="password" value="${jdbc.password}" /> 
 </bean> 
  <!-- SpringとMyBatisの統合、Springを使用してMyBatisのSqlSessionFactoryセッションファクトリを管理 -->
 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
  <!-- データベース接続プールの参照を指定します -->
  <property name="dataSource" ref="dataSource" /> 
  <!-- mapping.xmlファイルを自動的にスキャンします --> 
  <property name="mapperLocations" value="classpath:com/ssm/mapper/*.xml"></property> 
 </bean> 
 <!-- DAOインターフェースが所在するパッケージ名、Springはその下のクラスを自動的に検出します --> 
 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
  <property name="basePackage" value="com.ssm.dao" /> 
  <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> 
 </bean> 
 <!-- (トランザクション管理)transaction manager、グローバルトランザクションにはJtaTransactionManagerを使用します --> 
 <bean id="transactionManager" 
  class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
  <property name="dataSource" ref="dataSource" /> 
 </bean> 
</beans>

第8ステップ:テストクラスを構築します

以上の手順(log4jが一致しなくても影響はありません)、Springとmybatisの統合が完了しました。これで、成功したかどうかを試すためのテストコードを書くことができます。

テストクラスはsrcにあります/test/javaで構築し、テストが成功した場合、SpringとMybatisが統合されていることを示します。出力情報はLogを使用しています。4jをコンソールに打印します。

(1)TestMyBatisテストクラス

package ssm;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.ssm.model.User;
import com.ssm.service.UserService;
/*テストを実行する際にSpringテスト環境を使用する*/
@RunWith(SpringJUnit4ClassRunner.class) 
/*指定されたSpring設定ファイルの位置を指定し、デフォルトの設定ファイルを読み込みます*/
@ContextConfiguration(locations = { "classpath:spring-mybatis.xml" })
public class TestMyBatis {
 @Resource(name = "userService") 
 private UserService userService;
 @Test
 public void test1() {
  User user=new User();
  user.setName("張三");
  user.setPassword("123");
  User user1 = userService.getUserById(user);
  System.out.println(user1.toString());
 }
}

最後に!重要なのはバックエンドの出力を見ること、奇跡を証明する瞬間です。出力がオブジェクトであれば、設定の統合が成功したことを意味します!

それでは、次にspringMVCの統合に進みましょう

第九歩:springmvc.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="http://www.springframework.org/schema/mvc" 
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-3.1.xsd 
      http://www.springframework.org/schema/mvc 
      http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> 
 <!-- 自動スキャンするパッケージをスキャンし、SpringMVCがそのパッケージ下の@controllerアノテーションを持つクラスをコントローラとして認識する --> 
 <context:component-scan base-package="com.ssm.controller" /> 
 <!--IEがAJAXを実行する際に、JSONがダウンロードファイルとして返されるのを避けるために --> 
 <bean id="mappingJacksonHttpMessageConverter" 
  class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> 
  <property name="supportedMediaTypes"> 
   <list> 
    <value>text/html;charset=UTF-8</value> 
   </list> 
  </property> 
 </bean> 
 <!-- SpringMVCのアノテーション機能を起動し、リクエストとアノテーションPOJOのマッピングを完了します。 --> 
 <bean 
  class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
  <property name="messageConverters"> 
   <list> 
    <ref bean="mappingJacksonHttpMessageConverter" /> <!-- JSONコンバータ --> 
   </list> 
  </property> 
 </bean> 
 <!-- リダイレクトするファイルのプレフィックスとサフィックスを定義し、ビュー設定を行います。--> 
 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
  <!-- この設定について、私の理解では、後続のactionのメソッドreturnの文字列にプレフィックスとサフィックスを自動的に追加し、使用可能なURLアドレスに変換することです。 --> 
  <property name="prefix" value="/WEB-INF/jsp/" /> 
  <property name="suffix" value=".jsp" /> 
 </bean> 
 <!-- ファイルアップロードの設定を行います。ファイルアップロードを使用しない場合は設定する必要はありませんが、設定しない場合、設定ファイルにはアップロードコンポーネントパッケージをインポートする必要もありません。 --> 
 <bean id="multipartResolver" 
  class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
  <!-- デフォルトのエンコーディング --> 
  <property name="defaultEncoding" value="utf-8" /> 
  <!-- ファイルサイズの最大値 --> 
  <property name="maxUploadSize" value="10485760000" /> 
  <!-- メモリの最大値 --> 
  <property name="maxInMemorySize" value="}}40960" /> 
 </bean> 
</beans>

第10ステップ:web.xmlファイルの設定

ここではspringの-mybatis.xmlの読み込みとspringの設定-SSM統合を完了するために使用されるServlet MVC2フレームワーク統合の設定はここでは何も行わない。

<?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/web-app_3_0.xsd" 
 version="3.0"> 
 <display-name>Archetype Created Web Application</display-name> 
 <!-- Springとmybatisの設定ファイル --> 
 <context-param> 
  <param-name>contextConfigLocation</param-name> 
  <param-value>classpath:spring-mybatis.xml/param-value> 
 </context-param> 
 <!-- エンコードフィルタ --> 
 <filter> 
  <filter-name>encodingFilter</filter-name> 
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
  <async-supported>true</async-supported> 
  <init>-param> 
   <param-name>encoding</param-name> 
   <param-value>UTF-8</param-value> 
  </init-param> 
 </filter> 
 <filter-mapping> 
  <filter-name>encodingFilter</filter-name> 
  <url-pattern>/*</url-pattern> 
 </filter-mapping> 
 <!-- Springリスナー --> 
 <listener 
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
 </listener> 
 <!-- Springメモリオーバーフロー防止リスナー --> 
 <listener 
  <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> 
 </listener> 
 <!-- Spring MVC servlet --> 
 <servlet> 
  <servlet-name>SpringMVC</servlet-name> 
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
  <init>-param> 
   <param-name>contextConfigLocation</param-name> 
   <param-value>classpath:springmvc.xml</param-value> 
  </init-param> 
  <load-on-startup>1</load-on-startup> 
  <async-supported>true</async-supported> 
 </servlet> 
 <servlet-mapping> 
  <servlet-name>SpringMVC</servlet-name> 
  <!-- ここでは以下のように設定することができます*.do、strutsの後缀習慣に対応 --> 
  <url-pattern>/</url-pattern> 
 </servlet-mapping> 
 <welcome-file-list> 
  <welcome-file>/index.jsp</welcome-file> 
 </welcome-file-list> 
</web-app>

第10ステップ最後にテスト:

(1) 先に login.jsp を書く

<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<html>
<head>
<title>ユーザーログイン:</title>
</head>
<body>
<form action="login">
<label>ユーザー名:</label>
<input type="text" id="username" name="username"></input><br><br>
<label>パスワード:</label>
<input type="text" id="password" name="password"></input><br><br>
<input type="submit" value="ログイン"/>
</form>
</body>
</html>

画面:

(2) 在写UserController

import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.ssm.dao.UserDao;
import com.ssm.model.User;
@Controller
public class UserController {
 @Resource
 private UserDao userDao;  
@RequestMapping("/jsp/login") 
public String login(HttpServletRequest request){
 String username=request.getParameter("username");
 String password=request.getParameter("password");
 User user=new User();
 //ユーザー名と生徒を基にデータベースを検索します
 user.setName(username);
 user.setPassword(password);
  User users=userDao.findUserById(user);
 //生徒がいる場合、ログインに成功したことを示します
 if(users!=null){
  return "susscss";
 }
 //このjspは私が書いていません。皆さんは知っておくだけで大丈夫です。自分で書いてください
 return "err";
} 
}

(3)最後にsusscss.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<html>
<body>
<P>ユーザー名とパスワードが正しく、ログインに成功しました</P>
</body>
</html>

完璧!

これでこの記事はすべて終わりです。皆様の学習に役立つことを願っています。また、ナイアラ教程を多くのサポートをお願いします。

声明:この記事の内容はインターネットから取得しており、著作権者に帰属します。インターネットユーザーが自発的に貢献し、自己でアップロードしたものであり、このサイトは所有権を持ちません。また、人工編集は行われておらず、関連する法的責任を負いません。著作権侵害が疑われる内容がある場合は、メールで notice#w までお知らせください。3codebox.com(メールを送信する際、#を@に置き換えてください。報告を行い、関連する証拠を提供してください。一旦確認がとりたいと、このサイトは即座に侵害される内容を削除します。)

基本教程
おすすめ